0

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

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

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

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

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

4

3 回答 3

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]);

注意事项:

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

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

于 2013-04-10T14:47:11.233 回答
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;
?>
于 2013-04-10T14:50:03.650 回答
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 教程。

于 2013-04-10T14:44:54.037 回答