我正在處理簡單的事件日曆。當我第一次加載日曆加載頁面。然後,當我點擊下一個或上一個時,它會將我帶到下一個月,但事件不會加載,並且月份標題不會更改,但會繪製正確的日曆。我嘗試從代碼中取出我的事件腳本,並將其放入控制ajax的函數中,但它不起作用。事件僅在第一次加載時顯示,而不是在點擊下一頁或上一頁後顯示
這是一個鏈接到頁面。 http://hartslogmuseum.com/bookhjr10/cal/final/ajcal3.php (是的,它現在是醜陋的)
有人可以指出我在正確的方向。謝謝。 這是代碼。
<?php
/* Open up a connection to the mysql database on the same server as website */
$dbhost = '';
$dblogin = '';
$dbpass = '!';
$dbbase = '';
$conn = mysql_connect($dbhost, $dblogin, $dbpass, $dbbase)
or die("Unable to connect to mysql database");
function isAjax() {
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
}
if(isAjax() && isset($_POST['month']))
{
$month = $_POST['month'];
$year = !isset($_POST['year']) ? date('Y', $current_time) : $_POST['year'];
$events = array();
die(draw_calendar($month,$year,$events));
die(draw_calendar($month,$year,$events));
}
/* Select our database (there is more than one in my server) */
mysql_select_db("", $conn);
/* draws a calendar */
function draw_calendar($month,$year,$events = array()){
echo '<div id="calendar_wrapper">';
/* 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.= '';
/* add leading zero in the day number */
if($list_day < 10) {
$list_day = str_pad($list_day, 2, '0', STR_PAD_LEFT);
}
/* add leading zero in the month number */
if($month < 10) {
$month = str_pad($month, 2, '0', STR_PAD_LEFT);
}
$event_day = $year.'-'.$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['title'].'</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;
}
function random_number() {
srand(time());
return (rand() % 7);
}
/* date settings */
$month = (int) ($_GET['month'] ? $_GET['month'] : date('m'));
$year = (int) ($_GET['year'] ? $_GET['year'] : date('Y'));
/* "next month" control */
$next_month_link = '<a href="#" class="monthnav" onClick="getNextMonth();return false;">Next »</a>';
$heading ='<td colspan=5 class="month">$month_name $year</b></td>';
/* "previous month" control */
$previous_month_link = '<a href="#" class="monthnav" onClick="getPrevMonth();return false;">« Prev</a>';
/* bringing the controls together */
$controls = '<form method="get">'.$select_month_control.$select_year_control.$previous_month_link.$heading.' '.$next_month_link.' </form>';
/* get all events for the given month
I had to rewrite this query to get
anything usable out of the mysql
database we already had. */
$events = array();
$query = ("
SELECT
event_title
AS title,
DATE_FORMAT(FROM_UNIXTIME(event_date), '%Y-%m-%d')
AS event_date
FROM
events
WHERE
FROM_UNIXTIME(event_date)
LIKE '$year-%$month-%'");
/* verify the query is correct
echo $query;
echo "<hr />";
echo "<br />";
*/
$result = mysql_query($query,$conn) or die('error 2');
while($row = mysql_fetch_assoc($result)) {
$events[$row['event_date']][] = $row;
/* verify that the query gets results.
Also generates a list of this months events*/
/*echo $row['event_title']." ----- ".$row['event_date'];
echo "<br />";*/
}
echo '<h2 style="float:left; padding-right:30px;">'.date('F',mktime(0,0,0,$month,1,$year)).' '.$year.'</h2>';
echo '<div style="float:left;">'.$controls.'</div>';
echo '<div style="clear:both;"></div>';
echo draw_calendar($month,$year,$events);
echo '<br /><br />';
echo '</div>';
?>
<html>
<head>
<link href="cal.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="proto.js"></script>
<script type="text/javascript" language="javascript">
var current_month = <?PHP echo $month ?>;
var current_year = <?PHP echo $year ?>;
function getPrevMonth()
{
if(current_month == 1)
{
current_month = 12;
current_year = current_year - 1;
}
else
{
current_month = current_month - 1;
}
params = 'month='+current_month+'&year='+current_year;
new Ajax.Updater('calendar_wrapper',window.location.pathname,{method:'post',parameters: params});
}
function getNextMonth()
{
if(current_month == 12)
{
current_month = 1;
current_year = current_year + 1;
}
else
{
current_month = current_month + 1;
}
params = 'month='+current_month+'&year='+current_year;
new Ajax.Updater('calendar_wrapper',window.location.pathname,{method:'post',parameters: params});
}
</script>
</head>
<body>
<div id="calendar_wrapper"><? /*?PHP draw_calendar($month,$year,$events = array());*/ ?>
</body>
</html>
嗨,您發佈的代碼不會包含'$ month_name'定義的部分。這個問題與最近可能出現的$ month_name沒有正確設置有關。看起來像做一些事情:(見答案) –