检查在线状态PHP / SQL

时间:2018-02-12 02:56:52

标签: php mysqli

我一直试图解决这个问题。我让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。我认为......以上逻辑是合理的,但我必须有语法错误......?任何帮助表示赞赏! :)

2 个答案:

答案 0 :(得分:0)

只需在更新查询中添加此内容即可尝试。

    "UPDATE users SET status='online' WHERE 
    username=$name" 

答案 1 :(得分:0)

这是罪魁祸首:

return $row['last_login'] = $db_last;

更改为:

$db_last = $row['last_login'];

现在很棒。以为我会为可能遇到类似问题的人发布答案。