5

我有一个正在创建的小博客。它从数据库中获取信息。我想向已登录的用户显示其他人刚刚输入了新评论。我创建了 3 个页面:old_count、new_count、posts。我打算为 new_count 和 old_count 创建一个会话,并在帖子中减去它们。结果将在 div 中显示给用户。我已经放弃了这个想法,因为 old_count 和 new_count 将具有相同的信息,因此帖子中的结果将始终为 0。我正在寻找类似 Twitter 的东西,如果有新条目,则会出现一个 div 显示 - 1 新帖子--。我一直在寻找一种方法来做到这一点。有人可以帮帮我吗。(注意 - 请解释完整的脚本......提前谢谢!!!!)

4

4 回答 4

0

设置他们上次检查内容的时间戳。

然后,使用 javascript,轮询服务器(SELECT * FROM posts WHERE created_timestamp > {$last_checked_timestamp}

如果结果 > 0 则显示计数。

更新时间戳。

于 2012-12-19T20:35:08.733 回答
0

问题是:评论什么时候是新评论?如果它是在最近一次点击和当前点击之间创建的?或者如果用户还没有看到它?

最简单的方法是在会话中存储“已知”评论(例如 ID)并检查当前可用的评论。

于 2012-12-19T20:35:15.237 回答
0

您必须存储登录时间戳用户。也许在数据库或会话中。对照评论时间戳检查它。您必须为已插入数据库中的所有评论显示通知并遵守以下条件

  1. Comment_Timestamp < User_Login_Timestamp。
  2. (Current_Timestamp - Comment_Timestamp) <= Refresh_interval

PHP:

<?php

/*
    DB CONNECT AND SQL TO SELECT COMMENTS FROM THE TABLE. YOU CAN OPTIMIZE QUERY TO REDUCE THE NUMBER OF
    TUPLES
*/

$current_ts = strtotime(date('m/d/Y h:i:s a');
$notified = array();

foreach($all_comments as $comment) {
    if(strtotime($comment['ts']) < strtotime($_SESSION['user_login_ts'])) {
        if(($current_ts - strtotime($comment['ts']) <= REFRESH_INTERVAL) {
            $notified[] = $comment;     
        }
    }
}

echo json_encode($notified);

?>

JS AJAX

setInterval(function(){
    $.ajax({ 
        url: "server", 
        success: function(data) {
            /* Data is the JSON Object for new comments for that user */
        }, 
        dataType: "json"
    });
}, <?=REFRESH_INTERVAL?>);
于 2012-12-19T21:19:51.747 回答
0

根据 David 发布的建议,我针对之前提出的问题提出了以下解决方案。

  1. 我在登录时创建了一个时间戳。
  2. 然后我使用它在数据库上运行搜索。

包含此信息的 DIV 每 10 秒刷新一次,并且是指向时间戳重置页面的可点击链接。该页面的代码如下:

<?php
session_start();

$reset = $_POST['reset'];

if($reset == 'reset')
{
$_SESSION['time_stamp'] = time();
echo "done";//confirmation purpose
}
?>

和我控制整个节目的javascript:

<script type="text/javascript">
<!--
$(document).ready(function(){
$('#divname').click(function(){
var r="reset";

$.ajax({
type: "POST",
url: "reset_time.php",
data: r,
success: function(html){
if(html == 'done')
{
 $('#divwithinfo').reload(/*my blog page url*/);
}
});
});
});
-->
</script>
于 2012-12-21T17:05:21.647 回答