Php打印来自mysql的在线用户名

时间:2013-04-10 14:39:40

标签: php mysql list

我正在尝试将在线和离线用户列表添加到我的网页。我正在运行一种游戏服务器。我在数据库auth中有一个列,在表帐户中。

我希望有一个在线标题:然后是在线用户列表 然后离线标题:然后离线用户

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

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

$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命令也是错误的,但我希望有人也可以解决这个问题:)

3 个答案:

答案 0 :(得分:1)

尝试:

$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 *强制DB获取整行,然后丢弃几乎所有数据。

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

答案 1 :(得分:0)

首先:这不是“请做我的工作”网站。对于像这样的事情,网上有大量的例子。

总之:

$result = mysql_query("SELECT * FROM account");
$users = array("offline" => array(), "online" => array());
while($row = mysql_fetch_assoc($users))
{
  if ($row['online'] == 1)
    $users['online'][] = $row['username']
  else
    $users['offline'][] = $row['username']
}

现在$ users包含离线用户和在线用户的列表。我无法让这个工作,运行一些PHP教程。

答案 2 :(得分:0)

<?php
$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);


$totonline=0;
$totoffline=0;
while($row = mysql_fetch_assoc($result))
{
     if($row['online'] == '1')
     {
        $usernameon .= "<div>".$row['username']."</div>";

        $totonline++;
     }
     else
     {
        $usernameoff .= "<div>".$row['username']."</div>";
        $totoffline++;
     }
}

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