MySQL вставка в явно не выполняющиеся с использованием формы HTML, PHP и MySQL - PullRequest
0 голосов
/ 14 марта 2020

Я начинающий "программист", поэтому прошу прощения за мое невежество. Я использую подготовленное заявление в интересах безопасности. Предложение else отображается вместо выполнения инструкции INSERT INTO. Я передаю скрытое значение из формы HTML:

<input type="hidden" value="EVS1" name="CustomerCode" />
<?php   

include ('../etc/mysql_connect.php');


if(isset($_POST['submit'])) {

$FirstName= trim( $_POST['FirstName'] );
$LastName= trim( $_POST['LastName'] );
$Address1= trim( $_POST['Address1'] );
$Address2= trim( $_POST['Address2'] );
$City= trim( $_POST['City'] );
$State= trim( $_POST['State'] );
$Zip= trim( $_POST['Zip'] );
$Email= trim( $_POST['Email'] );



$calculated_date = date('m-d-Y', time() + 86400 * 42);



$stmt = $conn->prepare("INSERT INTO xxx SET FirstName = ?,LastName = ?,Address1 = ?,Address2         = ?,City = ?,State = ?,Zip = ?,Email = ?,CustomerCode = CustomerCode,DrawingEntryDate = NOW() ");

$stmt->bind_param("sssssssss", $_POST['FirstName'] , $_POST['LastName'], $_POST['Address1'],           $_POST['Address2'], $_POST['City'], $_POST['State'], $_POST['Zip'], $_POST['Email'], $_POST['CustomerCode']);

$stmt->execute();

$affected_rows= mysqli_stmt_affected_rows ($stmt);

  if ($affected_rows ==1){
    echo '<body bgcolor="#F9F9F9"><h2>Thank You!</h2><font type="Arial,Helvetica, sans-serif"              size="3">We have successfully received your entry.  Good luck!<br><br>Names are drawn randomly each month, and notified via email.  If your name is chosen, please expect delivery within 4-6 weeks.  Your order is scheduled to be delivered by '.$calculated_date.'.</font></body>';

      mysqli_stmt_close($stmt);
      mysqli_close($dbconnect);

   }  else {
      echo '<body bgcolor="#F9F9F9"><h2>Oops!</h2><font type="Arial,Helvetica, sans-serif" size="3">There is a limit of 1 entry per day.  <b>'.$FirstName.'</b> has already entered on '.$DrawingEntryDate.' .</font></body>';
      echo mysqli_error();

      mysqli_stmt_close($stmt);
      mysqli_close($dbconnect);
   }
}
?>

1 Ответ

0 голосов
/ 14 марта 2020

У вас есть восемь заполнителей параметров в запросе, и вы пытаетесь привязать к нему девять параметров.

Здесь:

$stmt = $conn->prepare("INSERT INTO xxx SET FirstName = ?,LastName = ?,Address1 = ?,Address2 = ?,City = ?,State = ?,Zip = ?,Email = ?,CustomerCode = CustomerCode,DrawingEntryDate = NOW() ");

$stmt->bind_param("sssssssss", $_POST['FirstName'] , $_POST['LastName'], $_POST['Address1'], $_POST['Address2'], $_POST['City'], $_POST['State'], $_POST['Zip'], $_POST['Email'], $_POST['CustomerCode']);

вы забыли поместить заполнитель параметров для CustomerCode.

Если вы всегда собираетесь установить DrawingEntryDate в значение NOW (), вы можете просто не указывать это в запросе и задать для этого столбца значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...