我想检查用户是否在线。我的成员表中有一个状态列。该列记录用户活动的最后时间戳。如果用户在5分钟内没有做任何事情(意味着他没有激活),则用户应该从users_online页面消失。
这是我存储用户的上一个活动的方式:
$setStatus = mysqli_query($mysqli,"UPDATE members SET status = '".time()."' WHERE id = '".$_SESSION['user_id']."'");
现在在users_online页面上,我选择状态(最新时间戳)是当前时间的用户名,间隔为5分钟。意思是,如果用户最新时间戳在5分钟的间隔内,则应显示用户USERNAME。如果超过5分钟,他将被标记为离线。
这就是我所拥有的:
$getUsers = mysqli_query($mysqli,"SELECT username FROM members WHERE status = (NOW() - INTERVAL 5 MINUTE)");
if ( mysqli_num_rows($getUsers) > 0 ) {
$row = mysqli_fetch_array($getUsers);
echo $row['username'];
} else {
echo "Nobody online";
}
现在的问题是;它一直说在网上没有人,即使我一直活跃着我的账户。
我错过了还是做错了什么?任何帮助都将受到高度赞赏。
答案 0 :(得分:3)
status = (NOW()
应该是status > (NOW()
,因为您想要在一段时间内完成,而不仅仅是5分钟之前
答案 1 :(得分:1)
time()给出自1970年以来的秒数,在你的sql语句中你应该说类似
"SELECT username FROM members WHERE status BETWEEN " . time() - (60*5) . " AND " . time() . ")"
答案 2 :(得分:0)
$t =time()-5*60;
$strSql = "SELECT username FROM members WHERE status > ".$t;
echo $strSql;
// run this query into my sql server
$getUsers = mysqli_query($mysqli,$strSql);
if ( mysqli_num_rows($getUsers) > 0 ) {
$row = mysqli_fetch_array($getUsers);
echo $row['username'];
} else {
echo "Nobody online";
}
尝试在MySQL服务器中运行查询,然后您将清楚问题:)
答案 3 :(得分:0)
使用PHP time()函数而不是mysql now()函数。
"SELECT username FROM members WHERE status >= '".time()-(60*5)."')"