我一直试图解决这个问题。我让login_handler
将当前时间发送到users
- last_login
中的数据库。我现在要做的是从当前时间中减去此值,并将用户状态设置为在线或离线。我有以下内容:
global $con;
$query = "SELECT * FROM users";
$result = mysqli_query($con, $query);
while($datarows = mysqli_fetch_array($result)){
$name = $datarows['username'];
$db_last = $datarows['last_login'];
$current = date("Y-m-d H:i:s"); //Current date/time
$difference = strtotime($current) - strtotime($db_last);
$diff_in_mins = $difference/60;
if($diff_in_mins < 4){
$updateStatus = mysqli_query($con, "UPDATE users SET status='online'");
} else {
$updateStatus = mysqli_query($con, "UPDATE users SET status='offline'");
}
?>
<table>
<td><?php echo $name; ?></td>
<td><?php echo $diff_in_mins; ?></td>
</table>
<?php } ?>
当我以某个用户身份登录时,用户last_login
会将(仅限该用户)更改为当前timestamp
,而回复$diff_in_mins
表示该用户public function getStatus() {
$username = $this->user['username'];
$query = mysqli_query($this->con, "SELECT last_login FROM users WHERE username='$username'");
$row = mysqli_fetch_array($query);
return $row['last_login'] = $db_last;
$current = date("Y-m-d H:i:s"); //Current date/time
$difference = strtotime($current) - strtotime($db_last);
$diff_in_mins = ($difference / 60);
if($diff_in_mins < 5){
$updateStatus = mysqli_query($this->con, "UPDATE users SET status='online' WHERE username='$username'");
} else {
$updateStatus = mysqli_query($this->con, "UPDATE users SET status='offline' WHERE username='$username'");
}
$query_status = mysqli_query($this->con, "SELECT status FROM users WHERE username='$username'");
$status_row = mysqli_fetch_array($query_status);
return $status_row['status'];
}
。但是,当我刷新上面代码的页面时(这不起作用,仍然试图弄明白)所有的last_login字段变得相同......?每个人都被设置为在线&amp;几乎崩溃了。
任何人都可以对此有所了解,任何帮助都会受到赞赏吗?
三江源, EP
更新: 我需要这个动态更新,所以当另一个用户访问用户配置文件时,他们可以判断该人是否在线。我决定把它写成User类的函数,现在有以下内容:
{{1}}
我现在遇到的问题是:未定义的变量:db_last。我认为......以上逻辑是合理的,但我必须有语法错误......?任何帮助表示赞赏! :)
答案 0 :(得分:0)
只需在更新查询中添加此内容即可尝试。
"UPDATE users SET status='online' WHERE
username=$name"
答案 1 :(得分:0)
这是罪魁祸首:
return $row['last_login'] = $db_last;
更改为:
$db_last = $row['last_login'];
现在很棒。以为我会为可能遇到类似问题的人发布答案。