2013-04-10 28 views
0

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

我想有在线的标题:那么在线用户 然后前往下线的名单:然后脱机用户

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

在这个我很差,但我已经设法做到了一个用户帐户,而不是它只是检查一个用户是否在线我想要它检查每个人。 我这样做的方式我会手动不得不为数据库中的每个帐户重复此代码。 这里是香港专业教育学院有:

$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; 

我知道肯定有这样做的更好,更清洁的方式,但我只是不知道它了吗?有什么建议么?? :) 林相当肯定如果命令是错误的,但即时通讯希望有人可以解决,以及:)

+0

[常见问题解答:我不应该在这里问什么样的问题?(http://stackoverflow.com/faq#dontask) - 这是一个非常开放式的问题,没有一个明确的答案,酷似FAQ说不要问。 – 2013-04-10 14:46:55

+0

@ user2266565专注于更好,更干净的做法,然后制定一个关于它的具体问题 – emecas 2013-04-10 15:03:58

回答

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'] 
} 

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

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 *,当你只需要几个表中的字段。选择*强制数据库获取整行,然后丢弃几乎所有的数据。

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

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; 
?>