0

Web ページにオンラインおよびオフラインのユーザー リストを追加しようとしています。ある種のゲームサーバーを実行しています。テーブルアカウントのデータベース認証に列があります。

オンラインの見出しが必要です: 次にオンライン ユーザーのリスト、次にオフラインの見出し: 次にオフラインのユーザー

また、オンライン アカウントとオフライン アカウントの数も表示したいと思います。

私はこれがかなり苦手ですが、1人のユーザーアカウントに対してそれを行うことができましたが、1人のユーザーがオンラインかどうかを確認するだけでなく、全員を確認したいと考えています。私が行った方法では、データベース内のアカウントごとにこのコードを手動で繰り返す必要があります。これが私が得たものです:

$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)テーブル内のいくつかのフィールドのみが必要な場合は、 a を実行しないでください。select * は、DB が行全体をフェッチするように強制し、その後、そのデータのほとんどすべてを破棄します。

2) フェッチ ループの内部に注意してください。オフラインおよびオンラインの人々の配列を自動的に構築し、オンライン フィールドを手動でチェックする必要をなくします。単純に配列を作成し、後でその内容をカウントします。オンライン/オフラインのカウントを取得するために純粋にこれを行っていた場合、これを行うことさえありません.DBにカウントを行わせ、単に結果を返すだけです. 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 に答える