我正在尝试向我的网页添加在线和离线用户列表。我正在运行一种游戏服务器。我在数据库身份验证中有一个列,位于表帐户中。
我想要一个在线标题:然后是在线用户列表 然后是离线标题:然后是离线用户
我还想显示在线和离线帐户的数量。
我在这方面很差,但我已经设法为一个用户帐户做到这一点,但我不只是检查一个用户是否在线,我希望它检查每个人。 按照我的方式,我必须手动为数据库中的每个帐户重复此代码。 这是我得到的:
$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/