2013-04-10 35 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; 
?>