每个用户的 PHP 用户在线和离线状态


PHP user status online and offline for each user

我正在使用PDO处理用户状态,但我遇到了一些问题。我发布了一个关于我的新问题的新问题。我创建了一个列:last_activity,当用户连接到我的网站时,我会更新它,如下所示:

if(empty($errors))
{
    $request = $pdo -> prepare("SELECT * FROM users WHERE username = :username OR e_mail = :username");
    $request -> execute(["username" => $_POST["username"]]);
    $user = $request -> fetch();
    if($user && password_verify($_POST["password"], $user -> password))
    {
        $_SESSION["signed-in"] = $user;
        $user_id = $_SESSION["signed-in"] -> id;
        $request = $pdo -> prepare("UPDATE users SET last_activity = NOW() WHERE id = ?");
        $request -> execute([$user_id]);
        $_SESSION["flash-message"]["success"] = ["Success", "You are now signed in!"];
        header("Location: account.php");
        exit();
    }
    elseif($user && !empty($_POST["username"]) && !empty($_POST["password"]))
    {
        $errors["password"] = "Votre mot de passe est incorrect.";
    }
}

这是允许您连接到站点的代码,但也更新"last_activity":

    $user_id = $_SESSION["signed-in"] -> id;
    $request = $pdo -> prepare("UPDATE users SET last_activity = NOW() WHERE id = ?");
    $request -> execute([$user_id]);

现在,last_activity将使用用户连接的当前日期刷新。现在,如果用户已连接,我想显示"在线",5分钟后,如果他不处于活动状态,则输入"离线"。如果用户默认未连接,只需显示"离线"。

例如,我有一个用户列表,在每个用户名下方,我想显示每个用户的用户状态。喜欢这个:

http://prntscr.com/a50zo5

要显示所有用户名:

$request = $pdo -> prepare("SELECT username FROM users");
$request -> execute();
$users = $request -> fetchAll();

在 HTML 中:

<?php if($users): ?>
    <div id="users-list">
        <ul class="unstyled-list">
            <?php foreach($users as $user): ?>
                <li>
                    <a href="#" class="username"><?= $user -> username; ?></a>
                    <p>L'utilisateur est : </p>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
<?php endif; ?>

现在,如何显示每个用户名的用户状态?我试图做这样的事情,但不可能:

$request = $pdo -> prepare("SELECT username FROM users WHERE last_activity > NOW()");
$request -> execute();
$loggedTime = $request -> fetchAll();

在 HTML 中:

User is: <?php if($loggedTime): ?><span class="online" style="color: green;">Online</span><?php else: ?><span class="offline" style="color: red;">Offline</span><?php endif; ?>

谢谢你,对不起英语,这不是我的主要语言。

不需要

其他查询即可获取用户最后一个活动。在 foreach 用户中,您可以执行以下操作:

<?php echo strtotime($user['last_activity']) > time() - 300 ? 'Online' : 'Offline' ?>

如果你想要 if 情况,你可以做:

<?php if(strtotime($user['last_activity']) > time() - 300): ?>
    <span class="online" style="color:green;">Online</span>
<?php else: ?>
    <span class="offline" style="color:red;">Offline</span>
<?php endif; ?>