2013-06-11 3 views
-3

У меня есть событие календаря с PHP.Автоматически обновлять календарь

Мне нужно, если пользователь опубликовал сообщение о событии на дату, другой пользователь может увидеть изменение непосредственно без кнопки обновления. Как я это делаю? с ajax, jquery или что?

Вот код

<?php 
include "connection.php"; 
$monthNames = Array(
    "January", 
    "February", 
    "March", 
    "April", 
    "May", 
    "June", 
    "July", 
    "August", 
    "September", 
    "October", 
    "November", 
    "December" 
); 

if (!isset($_REQUEST["month"])) 
    $_REQUEST["month"] = date("n"); 
if (!isset($_REQUEST["year"])) 
    $_REQUEST["year"] = date("Y"); 


$cMonth = $_REQUEST["month"]; 
$cYear = $_REQUEST["year"]; 
$prev_year = $cYear; 
$next_year = $cYear; 
$prev_month = $cMonth-1; 
$next_month = $cMonth+1; 
if ($prev_month == 0) 
{ 
    $prev_month = 12; 
    $prev_year = $cYear - 1; 
} 
if ($next_month == 13) 
{ 
    $next_month = 1; 
    $next_year = $cYear + 1; 
} 
?> 
<table width="200"> 
<tr align="center"> 
<td bgcolor="#999999" style="color:#FFFFFF"> 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td width="50%" align="left"><a href="<?php 
    echo $_SERVER["PHP_SELF"] . "?month=". $prev_month . "&year=" . $prev_year; 
?>" style="color:#FFFFFF">Previous</a></td> 
<td width="50%" align="right"><a href="<?php 
    echo $_SERVER["PHP_SELF"] . "?month=". $next_month . "&year=" . $next_year; 
?>" style="color:#FFFFFF">Next</a></td> 

</tr> 
</table> 
</td> 
</tr> 
</table> 
<tr> 
<td align="center"> 
<table width="100%" border="1" cellpadding="2" cellspacing="2"> 
<tr align="center"> 
<td colspan="7" bgcolor="#999999" style="color:#FFFFFF"><strong><?php 
echo $monthNames[$cMonth-1].' '.$cYear; 
?></strong></td> 
</tr> 
<tr> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>S</strong></td> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>M</strong></td> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>T</strong></td> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>W</strong></td> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>T</strong></td> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>F</strong></td> 
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>S</strong></td> 
</tr> 
$timestamp = mktime(0,0,0,$cMonth,1,$cYear); 
$maxday = date("t",$timestamp); 
$thismonth = getdate ($timestamp); 
$startday = $thismonth['wday']; 
for ($i=0; $i<($maxday+$startday); $i++) 
{ 
    if(($i % 7) == 0) 
    { 
     echo ""; 
    } 
    if($i < $startday) 
    { 
     echo "<td></td>\n"; 
    }else 
    { 
     $sql = "select * from data_agenda where date='".($i - $startday + 1).'-'.$cMonth.'-'.$cYear."'"; 
     $hs = mysql_query($sql); 
     $event = mysql_num_rows($hs); 
     echo "<td align='center' valign='middle' height='20px'".($event > 0 ? " bgcolor='yellow'" : '').">"; 
     echo "<a href=2.php?tgl=".urlencode($i - $startday + 1)."&month=".urlencode($monthNames[$cMonth-1])." onclick=\"window.open(this.href,'window','width=640,height=480,resizable,scrollbars,toolbar,menubar') ;return false;\">".($i - $startday + 1)."</a><br>"; 
     echo "</td>\n"; 
    } 
    if(($i % 7) == 6) 
    { 
     echo "</tr>\n"; 
    } 
} 

Нужна ваша помощь, пожалуйста ...

Благодаря прежде,

+0

Отступы - хорошая вещь. – vascowhite

+0

какая идентификация вы имели в виду? – Iker

+0

Отступ кода, он делает код более удобным для чтения. – vascowhite

ответ

0

сам протокол HTTP не в состоянии понять, что. Пользователь B выполняет свой запрос и получает ответ от сервера. Теперь связь между клиентом и сервером завершается до тех пор, пока Пользователь не выполнит другой запрос. Если вы хотите уведомить пользователя об изменениях на текущем сайте, который отображается в браузере, вам нужна технология реального времени.

Один из вариантов - спросить сервер, например, каждые 10 секунд, если что-то изменилось с помощью запроса asyncron xml (ajax), а затем изменит DOM браузера клиентов с помощью javascript. Это не очень хорошее решение, потому что, если у вас много клиентов, и каждый из них запрашивает сервер каждые 10 секунд, вы получите много трафика.

Лучшим вариантом является открытие сокета с клиента на сервер, что означает, что вы постоянно подключены к серверу, и сервер может уведомить клиента о том, что что-то изменилось.

Вам нужно что-то вроде nodejs (http://nodejs.org/), чтобы иметь возможность уведомлять других клиентов со своей серверной части. Nodejs - это реализация javascript на стороне сервера, которую вы можете использовать для открытия порта на вашем сервере, прислушиваясь к сокет-соединениям от ваших клиентов.

socket.io (http://socket.io/) - еще одна вещь, которую вы хотели бы проверить. Socket.io способен обрабатывать старые браузеры, где js-сокет недоступен, например IE 9.

Еще один вариант (если вы не используете серверный javascript) - это храповая реализация PHP-сокета-сервера, это имеет хорошую документацию и некоторые примеры, чтобы показать вам, как это работает. Я сделал хороший опыт работы с храповиком (http://socketo.me/), особенно этот пример очень приятно, и должно быть то, что вы ищете:

http://socketo.me/docs/push

Пожалуйста, поймите, что это не будет сделано в течение 3 минут. Если вы никогда не использовали сокеты, прежде чем потребуется некоторое время, чтобы понять и интегрировать его в свой проект. Но если это закончено, это действительно приятно. Обратите внимание, что это возможно только с более новыми браузерами, которые могут открыть веб-узел HTML5.

+0

Можете ли вы описать больше? Я все еще запутался в вашем ответе, спасибо ... – Iker

+0

Привет всем, Теперь у меня есть 2 пользователя. Пользователь A и пользователь B. Пользователь A назначает встречу в этом календаре, но пользователь B не является. Когда пользователь A закончит его, пользователь B должен увидеть изменения без кнопки обновления. Это то, что мне нужна ваша помощь ... – Iker

Смежные вопросы