Как вставить данные в две таблицы с отношением FK в php - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь выучить php и хочу вставить данные в две таблицы, которые имеют отношение Fk к форме. Это мой код:

<?php
// gegevens inserten in de database 
require "db.php"; // database connectie 
$message =''; // het bericht laten we eerst leeg 
//checken of alle velden zijn ingevuld
if (isset ($_POST['client_name']) && isset($_POST['phonenumber']) && isset($_POST['tabel']) && isset($_POST['persons']) && isset($_POST['date']) && isset($_POST['time'])){
   $client_name = $_POST['client_name'];
   $phonenumber = $_POST['phonenumber'];
   $tabel = $_POST['tabel'];
   $persons = $_POST['persons'];
   $date = $_POST['date'];
   $time = $_POST['time'];
   //$sql = "INSERT INTO reserveringen(tabel, date, time, persons) VALUES(:tabel, :date, :time, :persons) INNER JOIN klant (client_name, phonenumber) VALUES(:client_name, :phonenumber) ON reserveringen.client_id = klant.client_id "
   $sql = "INSERT INTO reserveringen(tabel, date, time, persons) VALUES(:tabel, :date, :time, :persons)";
   $sql1= "INSERT INTO klant(client_name, phonenumber) VALUES(:client_name, :phonenumber)";
   $statement = $connection->prepare($sql);
   $statement1 = $connection->prepare($sql1);

  if ($statement->execute([':tabel' => $tabel, ':date' => $date, ':time' => $time, ':persons' => $persons]) && $statement1->execute([':client_name' => $client_name, ':phonenumber' => $phonenumber]) ){
       $message = 'Data is succesvol toegevoegd';
   }else{
    $message = 'Data is niet  succesvol toegevoegd';
   }
}
?>

может кто-нибудь мне помочь

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Похоже, вы хорошо используете lastInsertId ().

Теперь, вы слышали о транзакциях?

PHP РУЧНАЯ - ОПЕРАЦИИ С PDO

Транзакции - это способ обеспечить выполнение обоих запросов, если один из них сбой, оба сбоя, таким образом вы можете гарантировать установление отношения FK.

Вместе с транзакциями вам нужно будет использовать функцию PDO чтобы получить последний вставленный идентификатор в БД.

Я предполагаю, что вы используете PHP 7 и PDO для вашего соединения, поэтому это будет что-то вроде:

   <?php
    $connection->beginTransaction();
    $sql1 = "INSERT INTO klant(client_name, phonenumber) VALUES(:client_name, :phonenumber)";
    $statement1 = $connection->prepare($sql1);
    $statement1->execute([':client_name' => $client_name, ':phonenumber' => $phonenumber]);

    $client_id = $connection->lastInsertId();

    $sql = "INSERT INTO reservation(tabel, date, time, client_id,  persons) VALUES(:tabel, :date, :time, :client_id, :persons)";
    $statement = $connection->prepare($sql);
    $statement->execute([':tabel' => $tabel, ':date' => $date, ':time' => $time, ':client_id' => $client_id, ':persons' => $persons]);

    if ($statement && $statement1 == true) {
        $message = 'Data is succesvol toegevoegd';
    } else {
        $message = 'Data is niet  succesvol toegevoegd';
        $connection->rollBack();
    }

Надеюсь, это поможет .

0 голосов
/ 25 февраля 2020
 $sql1= "INSERT INTO klant(client_name, phonenumber) VALUES(:client_name, :phonenumber)";
   $statement1 = $connection->prepare($sql1);
   $statement1->execute([':client_name' => $client_name, ':phonenumber' => $phonenumber]);

   $client_id = $connection->lastInsertId();

   $sql = "INSERT INTO reservation(tabel, date, time, client_id,  persons) VALUES(:tabel, :date, :time, :client_id, :persons)";
   $statement = $connection->prepare($sql);
   $statement->execute([':tabel' => $tabel, ':date' => $date, ':time' => $time, ':client_id' => $client_id, ':persons' => $persons]);

   if($statement && $statement1 == true){
    $message = 'Data is succesvol toegevoegd';
   }else{
    $message = 'Data is niet  succesvol toegevoegd';
   } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...