Я строю систему бронирования отелей с использованием PHP JAVASCRIPT и MYSQLi.У меня есть страница, на которой пользователь должен определить свои критерии поиска, такие как поиск доступной комнаты по гостям по детям по городам по цене по типу комнаты.до сих пор я успешно внедряю, но проблема в том, как проверить наличие номеров, используя дату заезда и проверки.
Вот код для поиска комнаты по гостям детьми по городам по цене и типу комнаты.Я не знаю, чтобы проверить доступность, используя мой код.
HTML-код для критериев поиска:
Для цены:
<div class="checkbox">
<select id="price">
<option value=""> Select Range of Price in Rs</opiton>
<option value="1000-1999">1000-1999 </option>
<option value="2000-2999">2000-2999 </option>
<option value="3000-3999">3000-3999 </option>
<option value="4000-4999">4000-4999 </option>
<option value="5000-5999">5000-5999 </option>
<option value="6000 +">6000+</option>
</select>
</div>
тот же код для подсчета детей, количестводля взрослых, город и тип номера
Для даты заезда и отъезда:
<div class="checkbox">
<label for="ch7">Check-in Date</label>
<input type="text" class="datepickerIn" placeholder="Check-in Date" id="checkin" name="checkin" >
<label for="ch7">Check-out Date</label>
<input type="text" class="datepickerOut" placeholder="Check-out Date" id="checkout" name="checkout" >
</div>
Код Java Script для вызова ajax с использованием идентификатора.
JAVA Script для регистрациии дата выезда:
//Ajax call when user changes the check in and check out date
$('#checkout').change(function(){
var hotel_city = document.getElementById("hotel_city").value;
var Room_Type_Name = document.getElementById("Room_Type_Name").value;
var count_of_travels = document.getElementById("count_of_travels").value;
var count_of_childerns = document.getElementById("count_of_childerns").value;
var price = document.getElementById("price").value;
var checkin = document.getElementById("checkin").value;
var checkout = document.getElementById("checkout").value;
var obj = { "hotel_city": hotel_city, "Room_Type_Name": Room_Type_Name, "count_of_travels": count_of_travels,"count_of_childerns":count_of_childerns,"price":price,"checkin":checkin,"checkout":checkout};
var myJSON = JSON.stringify(obj);
$.ajax({
url: "searchHotelsByDates.php",
dataType: "html",
type: 'POST',
data: myJSON,
success: function (data) {
$("#result").html(data);
}
});
});
SQL: Таблицы - отели [hotel_id, hotel_name, hotel_city] комната [room_id, Hotel_Id (FK), удобства, room_type (FK), count_of_travels, count_of_childerns] room_type [Room_Type_Id,Room_Type_Name] резервирование [booking_id, check_in, check_out, room_id (FK), hotel_id (FK), User_Email (FK)]
session_start();
include "required/connection.php";
$str_json = file_get_contents('php://input');
//Decoding received JSON to array
$response = json_decode($str_json,true);
//Get values
$hotel_city = $response['hotel_city'];
$Room_Type_Name = $response['Room_Type_Name'];
$count_of_travels = $response['count_of_travels'];
$count_of_childerns= $response['count_of_childerns'];
$price= $response['price'];
$split_price=explode("-",$price);
$min = $split_price[0];
$max = $split_price[1];
$checkin =$response['checkin'];
$checkout =$response['checkout'];
//Concatenate sql string considering users inputs
//$sql = "SELECT * FROM room";
if($hotel_city!=="" || $count_of_travels !=="" || $Room_Type_Name!=="" ||$count_of_childerns!==""||$min!==""||$max!=="" ||$checkin!=="" || $checkout!=="" ) {
$sql = "SELECT *.reservation, room.room_id,room.short_description,room.count_of_travels,room.count_of_childerns,room.price,hotels.hotel_id,hotels.hotel_name,hotels.hotel_city,hotels.hotel_picture,room_type.Room_Type_Id,room_type.Room_Type_Name FROM hotels INNER JOIN room ON room.Hotel_Id=hotels.hotel_id INNER JOIN room_type on room.room_type=room_type.Room_Type_Id INNER JOIN on reservation Where";
}
if($hotel_city!=="" && $count_of_travels !=="" && $Room_Type_Name!=="" && $count_of_childerns!=="") {
if($min=="" && $max=="")
{
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND Room_Type_Name='$Room_Type_Name' && count_of_childerns='$count_of_childerns' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND Room_Type_Name='$Room_Type_Name' && count_of_childerns='$count_of_childerns' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND Room_Type_Name='$Room_Type_Name' && count_of_childerns='$count_of_childerns' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($hotel_city!=="" && $count_of_travels !=="" && $Room_Type_Name!=="" ) {
if($min=="" && $max=="")
{
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND Room_Type_Name='$Room_Type_Name' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND Room_Type_Name='$Room_Type_Name' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND Room_Type_Name='$Room_Type_Name' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($hotel_city!=="" && $count_of_travels !=="" ) {
if($min=="" && $max=="")
{
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " hotel_city='$hotel_city' AND count_of_travels='$count_of_travels' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($hotel_city!=="" ) {
if($min=="" && $max=="")
{
$sql = $sql. " hotel_city='$hotel_city' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " hotel_city='$hotel_city' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " hotel_city='$hotel_city' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($count_of_travels!=="" ) {
if($min=="" && $max=="")
{
$sql = $sql. " count_of_travels='$count_of_travels' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " count_of_travels='$count_of_travels' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " count_of_travels='$count_of_travels' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($Room_Type_Name!=="" ) {
if($min=="" && $max=="")
{
$sql = $sql. " Room_Type_Name='$Room_Type_Name' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " Room_Type_Name='$Room_Type_Name' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " Room_Type_Name='$Room_Type_Name' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($count_of_childerns!=="" ) {
if($min=="" && $max=="")
{
$sql = $sql. " count_of_childerns='$count_of_childerns' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " count_of_childerns='$count_of_childerns' AND price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " count_of_childerns='$count_of_childerns' AND price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
}
else if($min!=="" && $max!=="" ) {
if($min!=="" && $max=="")
{
$split_min=explode("+",$min);
$sql = $sql. " price >= '$split_min[0]' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
else
{
$sql = $sql. " price BETWEEN '$min' AND '$max' ORDER by hotels.hotel_name,room_type.Room_Type_Name";
}
}
else
{
$sql = "SELECT room.room_id,room.short_description,room.count_of_travels,room.count_of_childerns,room.price,hotels.hotel_id,hotels.hotel_name,hotels.hotel_city,hotels.hotel_picture,room_type.Room_Type_Id,room_type.Room_Type_Name FROM hotels INNER JOIN room ON room.Hotel_Id=hotels.hotel_id INNER JOIN room_type on room.room_type=room_type.Room_Type_Id";
}
// echo $sql;
//exit;
$result = $connection->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
?>
<article class="one-third">
<figure><a href="hotel.php?id=<?php echo $row["room_id"]; echo ';' ; echo $row["hotel_id"]; echo";"; echo $row["Room_Type_Id"]; ?>" title=""><img src="admin/images/Hotels/<?php echo $row['hotel_picture']; ?>" alt="<?php echo $row['hotel_name']; ?>" /></a></figure>
<div class="details">
<h3><?php echo $row['hotel_name']; ?>
<span class="stars">
<i class="material-icons"></i>
<i class="material-icons"></i>
<i class="material-icons"></i>
<i class="material-icons"></i>
<i class="material-icons"></i>
</span>
</h3>
<span class="address">Type•<?php echo $row['Room_Type_Name'] ?></span>
<span class="address">Adults Allowed:<?php echo $row['count_of_travels'] ?></span>
<span class="address">Children Allowed:<?php echo $row['count_of_childerns'] ?></span>
<span class="address">City: <?php echo $row['hotel_city'] ?> • <a href="map.php">Show on map</a></span>
<span class="rating"> 8 /10</span>
<span class="price">Price per room per night from <em>Rs:<?php echo $row['price']; ?></em> </span>
<div class="description">
<p><?php echo $row['short_description']; ?> </p>
</div>
<a href="hotel.php?id=<?php echo $row["room_id"]; echo ';' ; echo $row["hotel_id"]; echo";"; echo $row["Room_Type_Id"]; ?>" class="gradient-button">Book Now</a>
</div>
</article>
я знаю, что мое объяснение очень длинное, но важно написать всю мою логику здесьчто может помочь вам понять.
Проблема в том, какой запрос я должен использовать, чтобы проверить наличие номеров, используя дату заезда и дату оформления и где этот запрос будет использоваться?У меня есть идея, что запрос содержит соединения с таблицей бронирования, но я не знаю, как использовать.Пожалуйста, помогите
Спасибо