我正在为超过一家酒店的预订系统工作,每个酒店都有多种房型,我想创建一个可用性日历。我的想法是,如果我可以重复插入预订详细信息(姓名,check_in_date,check_out_date,hotel_name .... bla bla),可以预订房间的天数说,我的入住日期是2014-12-28并检查out date是2015-01-07,我插入重复除check_in_date之外的所有其他列的值,这些列应该增加到退房日期之前的日期,然后我可以使用每个房间类型的行数和每天减去到达房间可用。
我被困在数据库...和PHP代码......我似乎无法获得日期类型的html输入的值作为我的开始日期
如果有人知道更简单的方式来实现我的可用性日历,请与我分享。
谢谢,节日快乐。
答案 0 :(得分:0)
我建议这样做:
1)在HTML input
中要求用户在YYYY-MM-DD
中输入日期//我认为你在做同样的事情
2)在通过date_in
和date_out
提交循环时,请检查可用性并显示。
$availability="";
if( $date_in=date_create($_POST["check_in_date"]) &&
$date_out=date_create($_POST["check_out_date"]) )
{
$interval = date_diff($date_in, $date_out)->format('%R%a')+1;
for($j=0;$j<$interval;$j++){
$date=date_add($date, date_interval_create_from_date_string('1 days'));
$availability.="ON ".$date->format("Y-m-d").": ";
//check in database and append to $availability as available...
// ....in Hotel XXX,YYY room type AAA,BBB [as you want to display]
}
}
else $availability="Enter dates correctly";
echo $availability;
3)如果用户确认&amp;然后付款,然后在预订确认信息中存储在数据库中。
//code to store in database
// assuming table BOOKING (date,room_type,hotel_id)
//mentioning only required column, you may have more
$bookingDone=false;
if($confirmPayment && $date_in=date_create($_POST["check_in_date"]) &&
$date_out=date_create($_POST["check_out_date"]) )
{
$interval = date_diff($date_in, $date_out)->format('%R%a')+1;
mysqli_start_transaction($dbConnection);
$bookingDone=true;
for($j=0;$j<$interval;$j++){
$date=date_add($date, date_interval_create_from_date_string('1 days'));
//insert in database, $j is dayNo. Ex. in your case 28th will be first day...
// $sql="INSERT INTO booking VALUES ('".$date->format("Y-m-d")."','".$selected_room_type_for_day[$j]."','".$selected_hotel_for_day[$j]."');
if(!inserted) $bookingDone=false;
}
if($bookingDone) mysqli_commit($dbConnection);
else mysqli_rollback($dbConnection);
}
else echo "An error occured";
查询以检查可用性将在步骤2)中使用
"SELECT count(1) as filled_room, hotel_id, room_type FROM booking WHERE date='".$date->format("Y-m-d")."' GROUP BY hotel_id,room_type;"
"SELECT rooms_available-".$filled_room." FROM hotel_info WHERE hotel_id=".$hotel_id." AND room_type='".$room_type."';"
//variable used in second query comes from first one & second will return available rooms
// hotel_info table contains information about each hotels and no of rooms af perticuler type, value of `rooms_available` contains no of rooms in particular hotel.