PHP:显示每个用户是否在线或不在线
问题描述:
如果我有一个具有unix time()标记的列“lastaccess
”,如何过滤在线用户?然后我通常有这个功能:PHP:显示每个用户是否在线或不在线
function showStatus($userid) {
$timeoutIdle = 80;
$timeoutOffline = 150;
$row = mysql_query("select last_access from users where id='$userid'");
$read = mysql_fetch_array($row);
$last_access = $read["last_access"];
$thetime = time();
if ($thetime - $last_access > $timeoutOffline) {
echo "";
}
else if ($thetime - $last_access > $timeoutIdle) {
echo "<span class='statusIdle'>Idle</span>";
} else {
echo "<span class='statusOnline'>Online</span>";
}
}
如何查询,它显示如果你在线?
答
$sql = "SELECT
CASE
WHEN last_access < UNIX_TIMESTAMP()-150 THEN 'offline'
WHEN last_access < UNIX_TIMESTAMP()-80 THEN 'idle'
ELSE 'online'
END AS online_status
FROM users
WHERE id = $userid";
答
MySQL有一些与Date/Times相关的功能。检查出NOW()
和UNIX_TIMESTAMP()
。您可以将此添加到您的查询where子句仅限SELECT
在线用户。
SELECT * FROM users WHERE NOW() - last_access < 80;
或者使用CASE
语句来确定给定用户的状态字符串
SELECT CASE
WHEN (NOW() - last_access > 150) THEN 'offline'
WHEN (NOW() - last_access > 80) THEN 'idle'
ELSE 'online' END AS status
FROM users WHERE id = $user_id;
答
我想说一个简单的方法来做到这一点是, 当用户登录时更新该用户的状态字段:
$update = mysql_query("UPDATE table SET status='online' WHERE id='$userid'")
or die(mysql_error());
然后在您想要的页面上ee值,如果他们是在网上补充一点:
$status = mysql_query("SELECT online FROM table
WHERE id='$searched_user'") or die(mysql_error());
$row = mysql_fetch_array($status);
if($row['status'] == "online"){
echo "Online";
}
else{
echo "Offline";
}
然后,当他们点击注销或当该Cookie /会话已过期:
$update = mysql_query("UPDATE table SET status='offline' WHERE id='$userid'")
or die(mysql_error());
你是什么意思?您已经可以看到用户是否在线。或者您想更改查询,以便结果中包含用户是否在线的信息? – 2010-10-02 18:38:27