-1

シナリオが次のようなアプリを作成しました。ユーザーは登録でき、その登録情報はPHPサーバーに送られ、MySQLデータベースに保存されます。これは私のPHPファイルです:

 <?php

  // Check if he wants to login:
  if (!empty($_POST[username]))
  {
    require_once("connect.php");

    // Check if he has the right info.
    $query = mysql_query("SELECT * FROM gen_users
    WHERE username = '$_POST[username]'
    AND password = '$_POST[password]'")
    or die ("Error - Couldn't login user.");
    $row = mysql_fetch_array($query)
    or die ("Error - Couldn't login user.");
    if (!empty($row[username])) // he got it.
    {
      echo "success";
      exit();
    }
    else // bad info.
    {
      echo "comes in else part";
      exit();
    }
  }
?>

MySQLデータベースから一致するユーザー名とパスワードを入力すると、「成功」という単語がAndroidクラスにスローされ、アプリ内でさらに進みます。私はディスプレイリストを持っています-私のアプリに登録されている人のビュー。

現在アプリを使用している人の数を知るにはどうすればよいですか?アプリにログインしている人はリストビューに緑色の画像で表示され、他の人は赤色の画像で表示されます。

どうすればこれを達成できますか?

4

2 に答える 2

2

@GlaciesofPacis の回答に加えて、次のいずれかを実行できます。

  1. 間隔を置いてサーバーにリクエストを送信し、誰がオンラインかどうかを確認します。
  2. クライアント サーバー メカニズムを使用できます。これは、はるかに複雑ですが、はるかに効率的でエレガントです。また、一部のクライアントがオフまたはオンになったときに、サーバーがすべてのオンライン クライアントにプッシュされるようにすることができます。

私はあなたのアプリが何をするべきか本当に知りませんが、オプション番号2 - 私の意見では - 苦労する価値があります..

リンク:

  1. PHPのソケットサーバーの紹介
  2. Javaのソケットサーバーの紹介
于 2012-09-18T14:31:51.123 に答える
1

ログイン状態に関する列を users テーブルに追加してみてください (これは MySQL テーブルであるため、tinyint(1))。0 (ログアウトしたことを示す) または 1 (ログインしたことを示す) として入力されます。ログイン時に、値をデータベースで 1 に設定し、ログアウト関数内で 0 に戻す必要があります。このようにして、以下のようなものを使用できます (ユーザー オブジェクトの使用を前提としています)。

<?php
$users = getUsers();
foreach($users as $user)
{
    $display = "";
    if($user->isLoggedIn())
    {
        $display .= '<img src="green.png" alt="Logged In" />';
    }
    else
    {
        $display .= '<img src="red.png" alt="Logged Out" />';
    }
    $display .= $user->getUsername().'<br />';
    echo $display;
}
?>

テーブルを変更する SQL コマンド:

ALTER TABLE gen_users ADD COLUMN loggedin TINYINT(1) DEFAULT 0;
于 2012-09-18T14:26:27.650 に答える