Как мне опубликовать значение переменной $ _GET с помощью МЕТОДА ЗАПРОСА

#php

#php

Вопрос:

Я пытаюсь опубликовать значение $ _GET, чтобы оно не могло вставить значение переменной в базу данных, используя $ _SERVER [«REQUEST_METHOD»].

 <?php require_once("../includes/initialize.php"); ?>
<?php include("../includes/form_validation_card.php"); ?>
<?php $username = $_SESSION['username']; ?>
<?php
if(!isset($_GET['total']) amp;amp; !isset($_GET['order_id'])){
    redirect_to('order_summary.php');
}
$total    = $_GET['total'];
$order    = $_GET['order_id'];
?>

<?php
$username       = $_SESSION['username'];
$sql            = "SELECT * FROM customers WHERE username='$username'";
$result_set     = $database->query($sql);
$found_user     = $database->fetch_array($result_set);
?>

<?php include_layout_template('header2.php'); ?>
<div class="container">
<div class="row">
<br/><br/><?php echo output_message($message); ?>
</div>
    <div class="row ">
    <div class="jumbo jumbotron-fluid mx-auto d-block" style="height: 500px; width: 440px; background-color:#DCDCDC; border-radius: 5px;" >
    <div class="text-center" style="margin: 3px;"><img src="logo/eden_petshop_logo.png" width="32" height="32"/><?php echo $found_user['first_name']; ?> <?php echo $found_user['last_name']; ?></div>
    <p class="text-center">order id: #<?php echo $order; ?></p>
  <h4 class="display-4 lead text-center">N<?php echo $total; ?></h4>
   <div class="col-sm-6 col-sm-offset-3 mx-auto d-block">
    <?php echo output_message($message); ?>
       <form action="<?= $_SERVER['PHP_SELF']; ?>" method="post" class="form-horizontal">
        <div class="form-group">
        <div class="col">
        <input type="text" name="card_number" onchange="trim(this)" placeholder="Card Number" class="form-control" id="card_number"/>
        <span style="color: #EA4335"><?= $card_number_error; ?></span>
        </div>
       </div>
    <div class="form-group">
    <div class="row">
    <div class="col">
      <input type="text" name="mm_yy" class="form-control" onchange="trim(this)" placeholder="MM/YY">
      <span style="color: #EA4335"><?= $mm_yy_error; ?></span>
    </div>
    <div class="col">
      <input type="password" name="cvv" class="form-control" onchange="trim(this)" placeholder="CVV">
      <span style="color: #EA4335"><?= $cvv_error; ?></span>
    </div>
     </div>
           </div>
       <div class="col-sm-12 col-sm-push-3">
        <button type="submit" name="submit" value="Pay" class="btn bg-info btn-sm btn-block" onClick="return confirm('Are you sure your details are correct?');">Pay</button>
           </div>
       </form>
   </div>
    </div>
</div>

<?php include_layout_template('footer2.php'); ?>
 

Это страница отображения ввода, но я пытаюсь вставить переменные $ total и $ order $ _GET в базу данных… Пожалуйста, обратите внимание, что все остальные части назначения кода работают нормально.

 <?php 
//define variables and set them to empty values
$total_error = $order_error = $card_number_error = $mm_yy_error = $cvv_error = "";
$timestamp = strftime("%Y-%m-%d %H:%M:%S", time()); 
//form is submitted with post method
if($_SERVER["REQUEST_METHOD"] == "POST"){

if(empty($_POST["card_number"])){
    $card_number_error = "<div class=''>Card number is required</div>";
}else{
    $card_number = test_input($_POST["card_number"]);
    //Check if name only contains letters and whitespaces
    if(!preg_match("/^(?=.*?[0-9]).{16,}$/",$card_number)){
        $card_number_error = "<div>Only 16 numbers allowed</div>";
    }
}

if(empty($_POST["mm_yy"])){
    $mm_yy_error = "<div class=''>Card expiry is required</div>";
}else{
    $mm_yy = test_input($_POST["mm_yy"]);
    //Check if name only contains letters and whitespaces
    if(!preg_match("/^(?=.*?[0-9]).{3,}$/",$mm_yy)){
        $mm_yy_error = "<div class=''>Only numbers allowed</div>";
    }
}   

if(empty($_POST["cvv"])){
    $cvv_error = "<div class=''>Card verification is required</div>";
}else {
    $cvv = test_input($_POST["cvv"]);
    //check if username is atleast 7 characters
    if(!preg_match("/^(?=.*?[0-9]).{3,}$/",$cvv)){
        $cvv_error = "<div class=''>Card verification must not be more than 3 numbers</div>";
    }
}


if($card_number_error == "" amp;amp; $mm_yy_error == "" amp;amp; $cvv_error == ""){
    $token = 'vfjhvbkebecbjDRCWVJEcbkrvlnke24tir7c_zdvbejw968350124';
    $token = str_shuffle($token);
    $token = substr($token, 0, 15);

    $username       = $_SESSION['username'];
    $sql            = "SELECT * FROM customers WHERE username='$username'";
    $result_set     = $database->query($sql);
    $found_user     = $database->fetch_array($result_set);
    $email          = $found_user['email_address'];

    $pay = new Payment();
    $pay->username           = $username;
    $pay->order_id           = $order;
    $pay->total              = $total;
    $pay->card_number        = $card_number;
    $pay->expiry             = $mm_yy;
    $pay->cvv                = $cvv;
    $pay->transaction_id     = $token;
    $pay->status             = 0;
    $pay->created_at         = $timestamp;
    if($pay->save()){
        //$mail = new Mail();
        //$mail->email_address  =  $email_address;
        //$mail->send_transaction_confirmation();
    unset($_SESSION['shopping_cart']);  
    $session->message('<div class="btn bg-success">Congratulations!!! Your order has been processed.</div>');
    redirect_to('photos.php');
    }
}

if(empty($_POST["message"])){
    $message = "";
}   else{
    $message = test_input($_POST["message"]);
}
}


function test_input($data){
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    $data = htmlentities($data);
    return $data;
}
?>
 

Пожалуйста, обратите внимание, что мои $ order и total не вставляются в мою базу данных… Буду признателен за любую помощь в моем preg_match… Заранее спасибо.

Комментарии:

1. Вместо этого используйте $_POST в своем коде.

2. @chipster какая часть кода?

3. Сломанная часть.

Ответ №1:

Вам нужно использовать $_POST в вашем неработающем коде вместо $ _GET. Обратите внимание, что в вашем рабочем коде вместо этого используется $ _POST, поэтому он работает.