Форма пытается отправить в базу данных при ее открытии - PullRequest
0 голосов
/ 01 марта 2019

Когда я открываю свою страницу формы, она пытается немедленно отправить в базу данных и вызывает пропуск в поле первичного ключа.Если я отправляю последовательные данные, это не вызывает пропуска.Если я закрою и снова открою, он пропускаетЛюбые идеи?

 $dbh = new PDO("pgsql:host=$host;dbname=$dbname", $dbuser, $dbpass);
if(!$dbh) {
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }

if (!empty($_POST['submit'])) {
$custID = $_POST['custID'];
$CustFirstName = $_POST['CustFirstName'];
$CustLastName = $_POST['CustLastName'];
$CustAddress =$_POST['CustAddress'];
$CustCity = $_POST['CustCity'];
$CustState = $_POST['CustState'];
$CustZip = $_POST['CustZip'];
$CustCellPhone = $_POST['CustCellPhone'];
$CustWorkPhone = $_POST['CustWorkPhone'];
$CustEmail = $_POST['CustEmail'];
}
$sql = "INSERT INTO customers (custID, CustFirstName, CustLastName, CustAddress, CustCity, CustState, CustZip, CustCellPhone, CustWorkPhone, CustEmail) 
VALUES (:custID, :CustFirstName, :CustLastName, :CustAddress, :CustCity, :CustState, :CustZip, :CustCellPhone, :CustWorkPhone, :CustEmail)";

$stmt = $dbh->prepare($sql);
$stmt->bindValue(':custID', $_POST['custID']);
$stmt->bindValue(':CustFirstName', $_POST['CustFirstName']);
$stmt->bindValue(':CustLastName', $_POST['CustLastName']);
$stmt->bindValue(':CustAddress', $_POST['CustAddress']);
$stmt->bindValue(':CustCity', $_POST['CustCity']);
$stmt->bindValue(':CustState', $_POST['CustState']);
$stmt->bindValue(':CustZip', $_POST['CustZip']);
$stmt->bindValue(':CustCellPhone', $_POST['CustCellPhone']);
$stmt->bindValue(':CustWorkPhone', $_POST['CustWorkPhone']);
$stmt->bindValue(':CustEmail', $_POST['CustEmail']);
$inserted = $stmt->execute();


/*
var_dump($_POST);*/

Вот что он делает

accounting=# select * from customers;
 id | custid | custfirstname | custlastname |   custaddress   | custcity | custstate | custzip | custcellphone | custworkphone |       custemail       |             ts             
----+--------+---------------+--------------+-----------------+----------+-----------+---------+---------------+---------------+-----------------------+----------------------------
  1 | Swo750 | Pat           
  3 | Bod750 | Bob          
  4 | Col555 | Sam           | Close        | 5525 East       | West     | TX        | 76052   | 555-555-5555  | 888-555-5555  | b@ya.com              | 2019-03-01 10:30:21.161783
  5 | Tim555 | Tim           | Tiny         | 666 Q St        | Hope     | AR        | 77858   | 222-222-2222  | 333-333-3333  | tim@tiny.com          | 2019-03-01 10:33:37.960887
  6 | a      | b             | c            | d               | e        | f         | 666     | 6666          | 6666          | g@g.com               | 2019-03-01 10:34:08.699302
  8 | e      | f             | g            | h               | i        | j         | 44      | 55            | 66            | j@j.com               | 2019-03-01 10:35:06.950209
(6 rows)

`Вы можете увидеть пропуски между 1 и 3 и 6 & 8 при повторном открытии или обновлении

Код формы

<form action="" method="post">
CustID:<input type="text" name="custID"><br>
Fist Name: <input type="text" name="CustFirstName"><br>
Last Name: <input type="text" name="CustLastName"><br>
Address: <input type="text" name="CustAddress"><br>
City: <input type="text" name="CustCity"><br>
State: <input type="text" name="CustState"><br>
Zip Code: <input type="text" name="CustZip"><br>
Cell Phone: <input type="text" name="CustCellPhone"><br>
Work Phone: <input type="text" name="CustWorkPhone"><br>
E-mail: <input type="text" name="CustEmail"><br>
<input type="submit">
</form>

1 Ответ

0 голосов
/ 01 марта 2019

Ваш SQL-код выполняется независимо от того, была ли отправлена ​​форма или нет.Переместите выполнение $stmt внутрь блока if (!empty($_POST['submit'])).

$dbh = new PDO("pgsql:host=$host;dbname=$dbname", $dbuser, $dbpass);
if(!$dbh) {
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }

if (!empty($_POST['submit'])) {
  $custID = $_POST['custID'];
  $CustFirstName = $_POST['CustFirstName'];
  $CustLastName = $_POST['CustLastName'];
  $CustAddress =$_POST['CustAddress'];
  $CustCity = $_POST['CustCity'];
  $CustState = $_POST['CustState'];
  $CustZip = $_POST['CustZip'];
  $CustCellPhone = $_POST['CustCellPhone'];
  $CustWorkPhone = $_POST['CustWorkPhone'];
  $CustEmail = $_POST['CustEmail'];

  $sql = "INSERT INTO customers (custID, CustFirstName, CustLastName, CustAddress, CustCity, CustState, CustZip, CustCellPhone, CustWorkPhone, CustEmail) 
VALUES (:custID, :CustFirstName, :CustLastName, :CustAddress, :CustCity, :CustState, :CustZip, :CustCellPhone, :CustWorkPhone, :CustEmail)";

  $stmt = $dbh->prepare($sql);
  $stmt->bindValue(':custID', $_POST['custID']);
  $stmt->bindValue(':CustFirstName', $_POST['CustFirstName']);
  $stmt->bindValue(':CustLastName', $_POST['CustLastName']);
  $stmt->bindValue(':CustAddress', $_POST['CustAddress']);
  $stmt->bindValue(':CustCity', $_POST['CustCity']);
  $stmt->bindValue(':CustState', $_POST['CustState']);
  $stmt->bindValue(':CustZip', $_POST['CustZip']);
  $stmt->bindValue(':CustCellPhone', $_POST['CustCellPhone']);
  $stmt->bindValue(':CustWorkPhone', $_POST['CustWorkPhone']);
  $stmt->bindValue(':CustEmail', $_POST['CustEmail']);
  $inserted = $stmt->execute();
}
...