需要在线显示姓名玩家的帮助(PHP)

需要在线显示姓名玩家的帮助(PHP),php,Php,我需要帮助在我的网站上显示在线玩家的名字 我已经完成了所有工作,但当我选择排名0(成员)时,你会看到1000名玩家在线/离线 我希望它只显示玩家(在线)和隐藏玩家(离线)我希望你知道我的意思 我的代码: <?php $findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = '1'"); while($rowAdmins = $findAdmins->fetch(

我需要帮助在我的网站上显示在线玩家的名字

我已经完成了所有工作,但当我选择排名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>';
        }
    }

?>      

您已经把这件事弄得太复杂了-您想要的东西可以在一个查询中更有效地完成。而且,如你所说,如果你只想让它显示在线的玩家,那么你不需要一段代码来回应“离线”文本。如果这是您的要求,那么我不确定您为什么要添加该行:-)

此查询将返回具有请求排名的所有“在线”用户:

SELECT * FROM `users` WHERE `rank` = 0 and unix_timestamp() - `activity` < 60
从'users'中选择*,其中'rank`=0和unix\u timestamp()-'activity`<60
演示:

因此,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>'
}
$findAdmins=$odb->query(“从`users`中选择*,其中`rank`=0,unix_timestamp()-`activity`<60”);
而($rowAdmins=$findAdmins->fetch(PDO::fetch_两者)){
回音“
  • ” }
    这将返回所有具有该排名的在线用户,并为每个用户回显一个链接



    另一方面,HTML中的
    标记是-您应该使用CSS
    text align
    属性将文本居中。考虑改变你的代码的这个部分。

    为什么你有第二个查询?如果判断
    $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>';
        }
    }
    
    $findAdmins=$odb->query(“从`users`中选择*,其中`rank`='0');
    而($rowAdmins=$findAdmins->fetch(PDO::fetch_两者)){
    $logo=“fa-ban”;
    如果(time()-$rowAdmins['activity']<60){
    回音“
  • ”; }否则{ 回音“
  • ”; } }
    这个问题是否解决了?你已经给出了答案,但没有被接受。