I have php mysql calneder for my hotel room booking system. but it shows a strange problem I dont know why. it does not go after 2013 year and and after february 2012 it directly goes to march 2013.
Another problem is I make the calender to show if a room is booked or not. if I book room from 23-25 it marks booked 24 and 25 wheather it should be 23 and 24. here are the codes of the calender:
function.php
function draw_calendar($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">'.$list_day.'</div>';
/** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/
$calendar.= getAllRooms($list_day,$month,$year);
$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 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';
}
}
index.php for prev next function:
$prev_month = (($month - 1) == 0) ? 12 : $month -1 ;
$prev_year = ($prev_month == 12) ? $year - 1 : $year;
?>
<h2 class="calender">
<a href="index.php?month=<?php echo $prev_month ?>&year=<?php echo $prev_year ?>" class="prev"> >></a>
<span class="month"><?php echo date('F',mktime(0,0,0,$month,1,$year)).' '.$year.''; ?></span>
<?php
$next_month = (($month + 1) == 13) ? 1 : $month + 1 ;
$next_year = ($prev_month == 1) ? $year + 1 : $year;
?>
<a href="index.php?month=<?php echo $next_month ?>&year=<?php echo $next_year ?>" class="next">
<<</a>
Thanks in advance to all.
I have only looked at the second snippet, but I'm pretty sure this is the problem:
$next_year = ($prev_month == 1) ? $year + 1 : $year;
In case of February, $prev_month
is set to 1, so your $next_year
becomes $year + 1
.
I think all you have to do, is change that line to:
$next_year = ($month == 12) ? $year + 1 : $year;
I can't tell exactly what the error is in your code, but I'm pretty sure it has to do with this year - 2012 - being a leap year.
Make sure your variables such as $days_in_month have an option for 29 days in February.
Should it be this ?
<?php
$next_month = (($month + 1) == 13) ? 1 : $month + 1 ;
$next_year = ($prev_month == 12) ? $year + 1 : $year;
?>
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.