Делаем заказ и получаем приходящий вместе с ним reservation_id форму SQL, PHP, html5

У меня есть пара форм:

В первую форму ввожу: Дата бронирования, информация о клиенте и таблица, которую я назначаю на эту дату.

Я ввожу вторую форму: Данные для принятия заказа, я ввожу дату и таблицу, и я хочу знать, какой идентификатор бронирования связан с этим.

Теперь я не могу понять, как это сделать, поскольку дата резервирования, table_number и идентификатор резервирования не извлекаются из таблицы резервирования с помощью следующего запроса:

SELECT o.OrderID
        , o.MenuItemID
        , o.ReceiptID 
        , r.Res_Datum
        , r.Tafel_Id
        , r.Reservering_Id 
     FROM Orders o
     JOIN reserveringen r
       ON o.Res_ID = r.Reservering_Id 
    GROUP 
       BY o.Res_Datum
        , o.Res_ID 
        , o.Tafel_Id

Однако этот запрос работает:

$sql = "
SELECT O.Res_Datum
     , O.Res_ID
     , O.Tafel_Id
     , O.ReceiptID
     , SUM(MI.ItemPrice) TotalReceiptPrice
  FROM Orders O 
  JOIN MenuItem MI 
    ON O.MenuItemID = MI.MenuItemID
 GROUP 
    BY O.Res_Datum
     , O.Res_ID
     , O.Tafel_Id  
";

Проблема в том, что мне нужно вводить все вручную, даже reservation_id, и тогда я могу подсчитать, какова общая цена заказа этой таблицы на эту дату.

Мне нужен reservation_id из бронирования, привязанного к зарезервированному столу в тот день, чтобы я знал, кто сделал какой заказ. Так что мне не нужно вводить его вручную.

Я просмотрел все из JOINS, Views и множественных операторов выбора, но я не могу понять это. Также пробовал внешние ключи, но это еще больше запутывает.

Что я пытаюсь выполнить: 1. Чтобы сделать и просмотреть резервирование и назначить таблицу (это работает) 2. Чтобы принять заказ и увидеть общую цену заказа таблицы -> с reservation_id (и датой) (это работает, но только когда я ввожу reservation_id вручную в sql.)

Ниже то, что я уже создал. Вы видите, что я почти закончил. Просто нужно, чтобы этот последний запрос работал, и я был бы очень рад узнать, что я делаю неправильно.

Моя база данных:

MenuItem: 
    MenuItemID  int(11)         
    ItemName    varchar(255)        
    ItemPrice   double

orders:
 OrderID    int(11)         
 MenuItemID int(11)         
 ReceiptID  int(11)         
 Res_Datum  date            
 Tafel_Id   int(11)         
 Res_ID     int(11) 


receipt:
ReceiptID       int(11)         
ReceiptPrice    double

reserveringen:  
    Reservering_Id  int(11)         
    Tafel_Id        int(11)         
    VoorNaam        varchar(255)            
    AchterNaam      varchar(255)            
    TelefoonNummer  varchar(255)        
    Email           varchar(255)        
    Res_Datum       date

Ниже я добавлю два моих php файла для создания заказа Если вы скопируете и вставите код из двух форм и используете одно и то же имя, вы сможете воссоздать его.

Bestelling.php:

<form action = "/restaurant/maak_bestelling.php" method = "POST">
  <h2>Enter Order</h2>

  Table Number:<br>
  <input type = "text" name = "tafelnummer" value = ""><br><br>
  Receipt Id:<br>
  <input type = "text" name = "receiptid"   value = ""><br><br>
  Menu_Item:<br>
  <input type = "text" name = "menu_item"   value = ""><br><br>
  Date: <br>
  <input type = "date" name = "date"        value = ""><br><br>

  <input type = "submit" value = "Submit">
</form>


<h2>Pending Orders:</h2>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "restaurant";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

//MY Query i am trying to run
// $sql = "SELECT O.Res_Datum, R.Reservering_Id, O.Tafel_Id,O.ReceiptID, SUM(MI.ItemPrice) AS TotalReceiptPrice
// FROM Orders, Reserveringen AS O INNER JOIN MenuItem AS MI ON O.MenuItemID = MI.MenuItemID
// AS O LEFT JOIN Reservering_Id AS R on O.Reservering_Id = R.reservering_Id
// GROUP BY O.Res_Datum, O.Res_ID, O.Tafel_Id  ";

//The statement I get with an Empty reservation_ID
$sql = "SELECT O.Res_Datum, O.Res_ID, O.Tafel_Id,O.ReceiptID, SUM(MI.ItemPrice) AS TotalReceiptPrice
FROM Orders AS O INNER JOIN MenuItem AS MI ON O.MenuItemID = MI.MenuItemID
GROUP BY O.Res_Datum, O.Res_ID, O.Tafel_Id  ";


$result = $conn->query($sql);

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "Res_datum: ". $row["Res_Datum"]. " ReservationID : " . $row["Res_ID"]. " - Table_Number: " . $row["Tafel_Id"]. " Total Order Price: " . $row["TotalReceiptPrice"]." ". "<br>";
    }
} else {
    echo "0 results";
}

mysqli_close($conn);
?>


</div>

maak_bestelling.php :

<?php


$con = mysqli_connect('localhost','root','');

if (!$con) {
echo 'Not connected with server';
}

if (!mysqli_select_db ($con,'restaurant')) {
echo 'Database Not selected';
}

$tablenumber = $_POST['tafelnummer'];
$receiptid = $_POST['receiptid'];
$menu_item = $_POST['menu_item'];
$date = $_POST['date'];


$sql = "INSERT INTO Orders (orders.Tafel_Id, orders.ReceiptID, orders.MenuItemID,  orders.Res_Datum )
VALUES ('$tablenumber', '$receiptid', '$menu_item', '$date')";

if (!mysqli_query($con,$sql)){
  echo 'insert did not work';
}else {
  echo 'Order created successfully';
}

header("refresh:1; url=bestelling.php");





?>

У меня есть еще два файла для создания брони, Форма выглядит следующим образом, возможно, вы хотите произвести впечатление:

<form action = "/restaurant/maak_reservering.php" method = "POST">
  Voornaam:<br>
  <input type = "text" name = "voornaam" value = ""><br><br>

  Achternaam:<br>
  <input type = "text" name = "achternaam" value = ""><br><br>

  Email:<br>
  <input type = "text" name = "email" value = ""><br><br>

  Telefoonnummer:<br>
  <input type = "text" name = "telefoonnummer" value = ""><br><br>

  Tafel:<br>
  <input type = "text" name = "tafel" value = ""><br><br>

  Reserverings Datum:<br>
  <input type = "date" name = "datum" value = "dd//mm//yy"><br><br>

  <input type = "submit" value = "Submit">
</form>




<div id = "Tafels">
<h3>Gereserveerde Tafels</h3>

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "restaurant";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// $sql = "SELECT reserveringen.Tafel_Id, reserveringen.Res_Datum
// FROM reserveringen
// INNER JOIN tafels ON reserveringen.Tafel_Id=tafels.Tafel_Id";
// $result = $conn->query($sql);

//andere query welke ik heb geprobeerd met reservering nummer
//tafels.tafel_Nummer,reserveringen.Res_Datum,reserveringen.Reservering_Id FROM tafels INNER JOIN reserveringen ON reserveringen.Res_Datum = reserveringen.Res_Datum AND reserveringen.Reservering_Id = reserveringen.Reservering_Id

//$sql = "SELECT tafels.tafel_Nummer,reserveringen.Res_Datum,reserveringen.Reservering_Id FROM tafels LEFT JOIN reserveringen ON reserveringen.Res_Datum = reserveringen.Res_Datum AND reserveringen.Reservering_Id = reserveringen.Reservering_Id";
$sql = "SELECT Reservering_Id, Tafel_Id, Res_Datum, VoorNaam, AchterNaam FROM reserveringen ORDER BY Res_Datum DESC";
$result = $conn->query($sql);

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "reserveringID: ". $row["Reservering_Id"]. " tafelnummer: " . $row["Tafel_Id"]. " - Reservering_datum: " . $row["Res_Datum"]. " " . $row["VoorNaam"]." ".$row["AchterNaam"]. " ". "<br>";
    }
} else {
    echo "0 results";
}

mysqli_close($conn);

Прочтите о SQL-инъекция. Вместо построения запросов с конкатенацией строк используйте подготовленные заявления с связанные параметры. См. эта страница и эта почта для некоторых хороших примеров.

Alex Howansky 23.01.2019 21:51

Мне просто нужен идентификатор квитанции со связанной таблицей на эту дату, ничего больше.

Zaaky 23.01.2019 22:09

Я не понимаю, зачем вам связывать заказы с бронированиями. Что имеет значение (обычно), так это то, какой стол заказал что, а не то, кто забронировал столик для заказа начос.

Strawberry 24.01.2019 07:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
49
1

Ответы 1

Бронирование и назначенные столы:

select 
reserveringen.Reservering_Id
, orders.Tafel_Id

from reserveringen

inner join orders on orders.Res_ID = reserveringen.Reservering_Id  
inner join MenuItem on MenuItem.MenuItemID = orders.MenuItemID
inner join receipt on receipt.ReceiptID = orders.ReceiptID

Заказ, стол, резервация и сумма цены пункта меню:

select 
orders.OrderID
, reserveringen.Reservering_Id
, orders.Tafel_Id
, sum(MenuItem.ItemPrice) as sum

from reserveringen

inner join orders on orders.Res_ID = reserveringen.Reservering_Id  
inner join MenuItem on MenuItem.MenuItemID = orders.MenuItemID
inner join receipt on receipt.ReceiptID = orders.ReceiptID


where orders.OrderID = ? --insert the OrderID

group by
orders.OrderID
, reserveringen.Reservering_Id
, orders.Tafel_Id

Это прекрасно, за исключением того, что я забыл, что не использую таблицу Tafels. Как бы я это сделал, потому что, когда я меняю запрос, все разваливается. я обновил свой вопрос

Zaaky 24.01.2019 00:07

select orders.OrderID ,reservingen.Reservering_Id ,reservingen.Tafel_Id ,sum(MenuItem.ItemPrice) как сумма из резервирования внутренних заказов на соединение по заказам.Res_ID = backupingen.Reservering_Id внутреннее соединение MenuItem на MenuItem.MenuItemID = заказы.MenuItemID внутреннее получение соединения при получении .ReceiptID = заказы.ReceiptID внутреннее соединение резервирования на резервирование.Tafel_Id = группы заказов.Tafel_Id по заказам.OrderID , backupingen.Reservering_Id , tafels.Tafel_Id

Zaaky 24.01.2019 00:10

замените tafels.Tafel_Id на orders.Tafel_Id (я отредактировал ответ)

Armin 24.01.2019 00:18

Все еще получаю 0 результатов, он должен быть зарезервирован.Tafel_Id, который я ищу И зарезервирован.Reservering_Id

Zaaky 24.01.2019 00:23

Другие вопросы по теме