简体   繁体   中英

Is it possibly to use a select query that gets the PK from two tables and inserts the values of those PK into another table that has them as FK?

Hi as my question states I was wondering if it possible to get the a PK from two tables and then insert them into another table where they are already set in as FK. I currently have a form that also inserts data that the user inputs into that same table. For example I want, the user to choose the rooID they want from drop down menu, input checkindate, checkoutdate, contactnumber, and booking extras. This then gets put into my booking table along with the two FK. Below is my booking table columns to help understand the inputs.

  • bookingID (PK)
  • checkindate
  • checkoutdate
  • contactnumber
  • bookingextras
  • customerID (FK) from customer table
  • roomID (FK) from room table

bookproccess.php:

<?php

include_once 'config.php';
$conn = mysqli_connect("127.0.0.1", DBUSER, DBPASSWORD, DBDATABASE);
if(isset($_POST['submit']))
{    
 $roomID = $_POST['rooID'];
 $checkindate = $_POST['checkindate'];
 $checkoutdate = $_POST['checkoutdate'];
 $contactnumber = $_POST['contactnumber'];
 $bookingextras = $_POST['bookingextras'];

     
 $query = "SELECT booking.bookingID, customer.customerID, room.roomID FROM ((booking
 INNER JOIN customer ON booking.customerID = customer.customerID)
 INNER JOIN room ON booking.roomID = room.roomID) WHERE roomID = ".$roomID;

 $result = $conn->query( $query );
 if( $result ) {
 
 $sql = "INSERT INTO booking (roomID, checkindate, checkoutdate, contactnumber, bookingextras, customerID)
 VALUES ('$roomID''$checkindate','$checkoutdate','$contactnumber','$bookingextras','$customerID')";
 if (mysqli_query($conn, $sql)) {
    echo "New record created successfully !";
 } else {
    echo "Error: " . $sql . "
" . mysqli_error($conn);
 }
 mysqli_close($conn);
}}
?>
 
 

makeabooking.php:

<h1>Booking</h1>
<h2><a href='menu.php'>[Return to the main page]</a></h2>

<form method = "post" action = "bookproccess.php">
<p>
<label for = "rooID">Room: (name, type, beds): </label>
<select id = "rooID" name = "rooID" required>
<option name = "" value = "" disabled selected>Select</option>
<option name = "1" value = "1">Kellie, S, 5</option>
<option name = "2" value = "2">Herman, D, 2</option>
<option name = "3" value = "3">Scarlett, D, 2</option>
<option name = "4" value = "4">Jelani, S, 5</option>
<option name = "5" value = "5">Sonya, S, 4</option>
<option name = "6" value = "6">Miranda, S, 2</option>
<option name = "7" value = "7">Helen, S, 2</option>
<option name = "8" value = "8">Octavia, D, 3</option>
<option name = "9" value = "9">Bernard, D, 5</option>
<option name = "10" value = "10">Dacey, D, 1</option>
</select>
</p> 

<p>
<label for="checkindate">Check in date: </label>
<input type="date" name="checkindate"required> 
</p>  
<p>
<label for="checkout">Check out date: </label>
<input type="date" name="checkoutdate"required> 
</p>  
<p>  
<label for="contactnumber">Contact number: </label>
<input type="text" name="contactnumber" required> 
</p>
<p>
<label for="bookingextras">Booking extras: </label>
<input type="text" name="bookingextras" size="100" minlength="5" maxlength="200"  required> 
</p> 

<input type="submit" name="submit" value="submit">
<a href="menu.php">[Cancel]</a>

 </form>
 </body>
 </html>

Of course it is possible because that's what you should do.

It seems you have a many to many relationship between Customers and Rooms which is resolved with an associative table Bookings. Bookings has 2 foreign keys - one to Customers and one to Rooms.

Typically what you want is to be on a customer master detail page which gives you access to the customer id - the detail being the booking.

To add a booking you introduce a row which is already aware of the master customer id and then in the booking context, you introduce a fixed list of rooms in some fashion (which come with room ids). This will depend on if a customer (a party/family) can occupy one room or multiple rooms.

By the time you submit the booking to be saved in the database, it has CustomerID, Booking ID and any other booking level details you need.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM