我需要帮助才能在我的网站上在线显示玩家的姓名。
我已经完成所有工作,但是当我选择0级(成员)时,可以看到1000位在线/离线玩家。
我希望它仅显示玩家(在线)和隐藏玩家(离线),希望您知道我的意思
我的代码:
<?php
$findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = '1'");
while($rowAdmins = $findAdmins->fetch(PDO::FETCH_BOTH)) {
$diffOnline = time() - $rowAdmins['activity'];
$countOnline = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username AND {$diffOnline} < 60");
$countOnline->execute(array(':username' => $rowAdmins['username']));
$onlineCount = $countOnline->fetchColumn(0);
$logo = "fa fa-ban";
if($onlineCount == "1") {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#1388a0;">Online</span></center></a></li>';
} else {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#f71c11;">Offline</span></center></a></li>';
}
}
?>
答案 0 :(得分:0)
您已经使这一过程变得非常复杂-您可以在单个查询中更高效地完成所需的操作。而且,如您所说,如果您只希望它显示在线的玩家,那么您就不需要这段代码来回显“脱机”文本。如果这是您的要求,那么我不确定您为什么添加该行:-)
此查询将返回具有所需排名的所有“在线”用户:
SELECT * FROM `users` WHERE `rank` = 0 and unix_timestamp() - `activity` < 60
演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5fc7238d7c9ecc968fef7da4e4657a9d
因此,PHP代码可以简化为:
$findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = 0 and unix_timestamp() - `activity` < 60");
while($rowAdmins = $findAdmins->fetch(PDO::FETCH_BOTH)) {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon" style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#1388a0;">Online</span></center></a></li>'
}
这将返回具有该排名的所有在线用户,并为每个用户回显一个链接。
P.S。只是一点说明,HTML中的<center>
标签是obsolete-您应该使用CSS text-align
属性将文本居中。也考虑更改代码的这一部分。
答案 1 :(得分:0)
您为什么要第二次查询?如果您判断$onlineCount == 1
,则用户名字段是唯一的,并且$diffOnline
变量在计算后保持不变。与常数60的比较是固定的。尝试以下代码:
$findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = '0'");
while($rowAdmins = $findAdmins->fetch(PDO::FETCH_BOTH)) {
$logo = "fa fa-ban";
if(time() - $rowAdmins['activity'] < 60) {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#1388a0;">Online</span></center></a></li>';
} else {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#f71c11;">Offline</span></center></a></li>';
}
}