我正在使用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; ?>