首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在线显示名称播放器的帮助(PHP)

需要在线显示名称播放器的帮助(PHP)
EN

Stack Overflow用户
提问于 2019-10-11 10:35:43
回答 2查看 81关注 0票数 0

我需要帮助才能在我的网站上显示在线球员的名字。

我已经完成了所有的工作,但当我选择排名0(会员)时,你会看到1000名玩家在线/离线。

我希望它只显示球员(在线)和隐藏球员(离线),我希望你明白我的意思

我的代码:

代码语言:javascript
复制
<?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>';
        }
    }

?>      
EN

回答 2

Stack Overflow用户

发布于 2019-10-11 16:55:01

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

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

代码语言:javascript
复制
SELECT * FROM `users` WHERE `rank` = 0 and unix_timestamp() - `activity` < 60

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5fc7238d7c9ecc968fef7da4e4657a9d

因此,PHP代码可以简化为:

代码语言:javascript
复制
$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>'
}

这将返回具有该排名的所有在线用户,并为每个用户回显一个链接。

附注:在HTML中的<center>标签是obsolete -你应该使用CSS的text-align属性来居中你的文本。也可以考虑更改代码的这一部分。

票数 0
EN

Stack Overflow用户

发布于 2019-10-11 17:21:14

为什么会有第二个查询?如果判断为$onlineCount == 1,则用户名字段是唯一的,计算后$diffOnline变量保持不变。与常量60的比较是固定的。尝试以下代码:

代码语言:javascript
复制
$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>';
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58333505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档