我有这个代码生成一个PHP日历,其中包含从MY SQL数据库中提取的事件:
<?php
/* draws a calendar */
function draw_calendar($month,$year,$events = array()){
$month = (isset($_GET['month']) ? $_GET['month'] : date('m'));
$year = (isset($_GET['year']) ? $_GET['year'] : date('Y'));
if($month < 10)
$month = '0'.$month;
/* draw table */
$calendar = '<table cellpadding="0" cellspacing="0" class="calendar">';
/* table headings */
$headings = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
$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,0,$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"><div style="position:relative;height:100px;">';
/* add in the day number */
$calendar.= '<div class="day-number">'.$list_day.'</div>';
$event_day = $year.'-'.$month.'-'.$list_day;
if(isset($events[$event_day])) {
foreach($events[$event_day] as $event) {
$calendar.= '<div class="event">'.$event['pet_name']. '<br>'. $event['booking_period']. '</div>';
}
}
else {
$calendar.= str_repeat('<p> </p>',2);
}
$calendar.= '</div></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>';
/** DEBUG **/
$calendar = str_replace('</td>','</td>'."\n",$calendar);
$calendar = str_replace('</tr>','</tr>'."\n",$calendar);
/* all done, return result */
return $calendar;
}
/* get all events for the given month */
include 'functions/connect.php';
$month = str_pad($month,2,"0", STR_PAD_LEFT);
$events = array();
$query = "SELECT bb_Clients.pet_name, bb_Bookings.booking_period, DATE_FORMAT(start_date,'%Y-%m-%e') AS start_date FROM bb_Bookings INNER JOIN bb_Clients ON bb_Bookings.client_id=bb_Clients.client_id WHERE start_date LIKE '$year-$month%'";
$result = mysql_query($query) or die('cannot get results!');
while($row = mysql_fetch_assoc($result)) {
$events[$row['start_date']][] = $row;
}
$monthName = date("F", mktime(0, 0, 0, $month, 10));
echo '<h2>'. $monthName .' '. $year .'</h2>';
echo draw_calendar($month,$year,$events);
?>
目前我只是回应每个有活动的单元格的预订时间,但我想在每天运行的每个活动中显示它,但我无法知道如何去做。
我的桌子有一个开始日期,结束日期和预订期限,所以我一直在考虑使用预订期间值来计算事件应该显示的天数但是因为每个事件都是单独生成的我不会# 39;不知道这会如何运作。
我的另一个想法是使用BETWEEN运算符来说出&#34; SELECT * FROM event_table WHERE $ list_day BETWEEN $ start_date AND $ end_date&#34;
或许有一种更简单的方法可以做到这一点?
(P.S我很清楚我使用不安全的PHP代码从数据库中提取数据,但这些都在本地运行,因此目前并不重要。)