我有一個php MySql預訂日曆,它顯示了是否按日期預訂房間。問題是,它顯示了錯誤的信息。例如,如果我預訂了5-6,它應該標記爲第五個紅色,這意味着它在5日被預訂了。它顯示6日但6點,12點00分房間將是免費的。另一個例子:如果我預訂23-25,它顯示24,25爲預訂,但它應該顯示23-25,不知道問題在哪裏。php mySQL房間預訂日曆顯示預訂日期錯誤
下面是代碼:
function getAllRooms($date,$month,$year)
{
global $db;
$where = ' ';
if ($_GET['room_type'] != '') {
$where .= " HAVING room_type = '".$_GET['room_type']."'";
}
$sql = "SELECT room_type
FROM
room
GROUP BY
room_type
$where
";
/*echo $sql;
exit;*/
$result = $db->Execute($sql);;
$room = '';
while (!$result->EOF) {
$qs = '?room_type='.$result->fields('room_type').'&month='.$month.'&year='.$year;
$total = get_total_rooms_by_type($result->fields('room_type'),$date,$month,$year);
$room .=
'<div class="'.$result->fields('room_type').'">
<a href="'.BASE_URL.'room_detail.php'.$qs.'">
'.$result->fields('room_type').' ('.$total.')
</a>
</div>';
$result->MoveNext();
}
$result->Close;
return $room;
}
function get_total_rooms_by_type($room_type,$date,$month,$year)
{
global $db;
$_newdate = $year.'-'.$month.'-'.$date;
$sql = "SELECT room_id FROM room where room_type = '$room_type' ";
$room_results = $db->Execute($sql);
$room_ids = array();
while (!$room_results->EOF) {
$room_ids[] = $room_results->fields('room_id');
$room_results->MoveNext();
}
$room_results_str = implode(',',$room_ids);
$where = ' where 1 = 1 ';
$available = 1;
if ($_GET['booking_status'] == '1') {
$where .= ' and (booking_status = 1 or booking_status = 2)';
$available = 0;
} else if ($_GET['booking_status'] == '2') {
$where .= ' and (booking_status = 2)';
$available = 0;
}
$sql = "select count(room_id) from bookings
$where
and checkin <= '$_newdate'
and '$_newdate' <= checkout
and room_id in ($room_results_str)
";
if ($available == 0) {
return $db->GetOne($sql);
} else {
return count($room_ids) - $db->GetOne($sql);
}
}
function draw_calendar_room($month,$year){
/* draw table */
$calendar = '<table cellpadding="0" cellspacing="0" class="calendar">';
/* table headings */
$headings = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
$calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>';
/* days and weeks vars now ... */
$running_day = date('w',mktime(0,0,0,$month,1,$year));
$days_in_month = date('t',mktime(0,0,0,$month,1,$year));
$days_in_this_week = 1;
$day_counter = 0;
$dates_array = array();
/* row for week one */
$calendar.= '<tr class="calendar-row">';
/* print "blank" days until the first of the current week */
for($x = 0; $x < $running_day; $x++):
$calendar.= '<td class="calendar-day-np"> </td>';
$days_in_this_week++;
endfor;
/* keep going with days.... */
for($list_day = 1; $list_day <= $days_in_month; $list_day++):
$calendar.= '<td class="calendar-day">';;
$calendar.= '<div class="day-number" style=" padding:5px 5px 45px;background-color:'.getRoomColor($list_day,$month,$year).'">'.$list_day.'</div>';
/** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/
$calendar.= '</td>';
if($running_day == 6):
$calendar.= '</tr>';
if(($day_counter+1) != $days_in_month):
$calendar.= '<tr class="calendar-row">';
endif;
$running_day = -1;
$days_in_this_week = 0;
endif;
$days_in_this_week++; $running_day++; $day_counter++;
endfor;
/* finish the rest of the days in the week */
if($days_in_this_week < 8):
for($x = 1; $x <= (8 - $days_in_this_week); $x++):
$calendar.= '<td class="calendar-day-np"> </td>';
endfor;
endif;
/* final row */
$calendar.= '</tr>';
/* end the table */
$calendar.= '</table>';
/* all done, return result */
return $calendar;
}
function getRoomColor($date,$month,$year)
{
global $db;
$where = ' ';
if ($_GET['room_id'] != '') {
$room_id = $_GET['room_id'];
} else {
$sql = "SELECT room_id
FROM
room
WHERE
room_type = '".$_GET['room_type']."' order by room_number asc
";
$room_id = $db->GetOne($sql);;
}
$_newdate = "$year-$month-$date";
$sql = "SELECT booking_status
FROM
bookings
where
checkin <= '$_newdate'
and
'$_newdate' <= checkout
and
room_id = '$room_id'
";
/*echo $sql;
exit;*/
$result = $db->GetOne($sql);;
if ($result == 1) {
return '#FF0';
} else if ($result == 2) {
return '#F00';
} else {
return '#64C733';
}
}
我想$其中 和籤<= '$ _newdate' 和 '$ _newdate'<=結賬 這個SQL沒有得到正確的結果。 –