首先这是相关问题PHP:在线离线状态 https://stackoverflow.com/questions/13201579/php-online-offline-status/13201617#comment17974371_13201617但由于我的方法略有不同,而且也存在问题,所以我认为新问题会更好。
现在我在 qa_users 表中添加了一列名为“online”的列,该列插入/更新记录时间并在用户交互时保持更新(我不确定它是否正确)
现在,它在用户登录后立即显示用户在线,但问题是注销后,他们保持显示状态为在线,并且永远不会进入离线状态。
我认为我的时间比较条件代码有问题,但我不知道。
请在下面找到我正在使用的代码。
$loggedtime = date('Y-m-d h:i:s', time()-300); // 5 minutes
$query = 'SELECT userid, handle, online FROM ^users ORDER BY userid ASC';
$result = qa_db_query_sub($query);
while($ids = mysql_fetch_array($result)){
$online = $ids['online'];
$userid = qa_get_logged_in_userid();
if(qa_is_logged_in()){
$update = 'UPDATE ^users SET online = NOW() WHERE userid = '.$userid.'';
qa_db_query_sub($update);
}
$time = $ids['online'];
if ($time >= $loggedtime){ // i have tried with $loggedtime > $time too
echo '<li>'.$ids['handle'].' online</li>';
} else {
echo '<li>'.$ids['handle'].' offline</li>';
}
}
在不知道您的数据库结构的情况下,这只是一种猜测。
if ($time >= $loggedtime)
您正在将“2012-11-01 10:10:10”之类的字符串与任何内容进行比较$time
在你的数据库中。这似乎是这里的问题。
您可以/应该使用 UNIX 时间戳。它们可以很容易地进行比较。
If $time
是一个 UNIX 时间戳,你可以这样做:
if ($time >= time()-300)
EDIT:
更改您的查询以获取 UNIX 时间戳online
$query = 'SELECT userid, handle, UNIX_TIMESTAMP(online) as online FROM ^users ORDER BY userid ASC';
EDIT2:为了更清楚地说明:
在您的第一个版本中,您比较了“2012-11-01 10:10:10”形式的两个日期
if ('2012-11-01 10:10:10' < '2012-11-02 10:10:10')
这在 PHP 中是行不通的——就像这样做:
if ('apples' < 'bananas')
你必须比较数字。因此我建议使用unix时间戳,这样可以很容易地进行比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)