我正在使用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分钟后,如果他不活动,则显示“离线”。如果默认情况下未连接用户,则只显示“离线”。
例如,我有一个用户列表,在每个用户名下面,我想显示FOR EACH用户的用户状态。像这样:
显示所有用户名:
$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; ?>
谢谢你,对不起英语,这不是我的主要语言。
答案 0 :(得分:1)
您无需其他查询即可获取用户上次活动。在您的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; ?>