PHP从mysql打印在线用户名

标签 php mysql list

我正在尝试向我的网页添加在线和离线用户列表。我正在运行一种游戏服务器。我在数据库身份验证中有一个列,位于表帐户中。

我想要一个在线标题:然后是在线用户列表 然后是离线标题:然后是离线用户

我还想显示在线和离线帐户的数量。

我在这方面很差,但我已经设法为一个用户帐户做到这一点,但我不只是检查一个用户是否在线,我希望它检查每个人。 按照我的方式,我必须手动为数据库中的每个帐户重复此代码。 这是我得到的:

$DBTYPE = 'mysql';
$DBHOST = '127.0.0.1';
$DBUSER = 'root';
$DBPASSWORD = 'password';
$DBNAME = 'auth';


$link = mysql_connect($DBHOST, $DBUSER, $DBPASSWORD);
mysql_select_db($DBNAME);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
$member_id= '1'; // get value of the member, assumed that you have post the data into id. change if it is different into your code

$result = mysql_query("SELECT * FROM account where id=$member_id");

while($row = mysql_fetch_assoc($result))
{
     if($row['online'] == '1')
     {
        $usernameon = ($row['username']);
     }
     else
     {
        $usernameoff = ($row['username']);
     }
}

$onlineppl="<FONT COLOR=green>[*]Online players:</b></FONT><br />";
echo $onlineppl;
echo $usernameon;
?>
<br />
<br />
<?php
$offlineppl="<FONT COLOR=red>[*]Offline players:</b></FONT><br />";
echo $offlineppl;
if($usernameoff == '');
$usernameoff="We're all online";
echo $usernameoff;

我知道肯定有更好、更干净的方法来做到这一点,但我只是还不知道?有什么建议么?? :) 我很确定 if 命令也是错误的,但我希望有人也能解决这个问题:)

最佳答案

尝试:

$sql = "SELECT username, online FROM ..."
$result = mysql_query($sql) or die(mysql_error());
$users = array();
while($row = mysql_fetch_assoc($result)) {
   $users[$row['online']][] = $row['username'];
}

$online = count($users[1]);
$offline = count($users[0]); // or whatever value you assign to offline users

$online_list = implode(',' $users[1]);
$offline_list = implode(',', $users[0]);

注意事项:

1) 当您只需要表中的几个字段时,不要执行select *。 select * 强制数据库获取整行,然后丢弃几乎所有数据。

2) 注意获取循环的内部结构。它自动构建离线和在线人员数组,无需手动检查在线字段。只需构建数组,然后计算其内容即可。如果您这样做纯粹是为了获取在线/离线计数,那么您甚至不会这样做 - 您将让数据库进行计数并简单地返回结果。当您没有数据时,切勿将数据吸入 PHP。这是对 CPU 时间和内存的浪费。

关于PHP从mysql打印在线用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928945/

相关文章:

php - 在另一个区域重用 PDO 查询 block 最佳实践

php - 在 Windows 7 中创建的 .htaccess 文件,但在 Ubuntu 12.10 中不起作用

php - 如何在 Laravel 中执行 MYSQL 查询?

python - 一次向列表中的两个元素添加一个元素

java - 访问列表中所有对象的字段

php - 在 PHP 中计算数组的中位数

mysql - 如何在 SQL/SQLalchemy 中对多条记录使用 join 和 order_by?

java - 使用 MySQL 的 DataJpaTest 存储库测试,Hibernate 不会将用户设置为在 H2 DB 中自动递增

php - 将 SQL 转换为 JSON 并保留空值?

c# - 如何限制向 List<T> 添加项目?