2012-09-18 29 views
-1

我做了一個應用程序,其中的場景如下: 用戶可以註冊並且註冊信息發送到PHP服務器並存儲在MySQL數據庫中。 這是我的PHP文件:登錄我的Android應用程序時,如何顯示爲在線狀態?

<?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類,並且將在應用程序中走得更遠。我有我的應用程序中的註冊人員的顯示列表視圖。

我怎麼知道現在有多少人使用我的應用程序?在應用程序中登錄的人在列表視圖中顯示爲綠色圖像,而其他人將顯示爲紅色圖像。

我該如何做到這一點?

+0

你想達到什麼目的?某種聊天客戶端?你想要誰在線或不在線的實時更新? –

+0

謝謝你的時間,其實我想這樣顯示誰在同一時間登錄在同一時間和紅色圖像誰沒有在同一時間使用我的應用程序的綠色圖像。 – himAndroid

+0

,你需要它現場更新嗎?我的意思是,如果您在用戶註銷時需要將其從綠色更改爲紅色,或者您需要更新,僅在用戶登錄 –

回答

2

除了@GlaciesofPacis回答您可以執行下列操作之一:

  1. 在間隔檢查發送請求的服務器誰在線或不在線。
  2. 您可以使用客戶端 - 服務器機制 - 它更復雜但更高效和優雅 - 並且在某些客戶端關閉或打開時使服務器推送到所有在線客戶端。

我真的不知道你的程序是應該做的,但選擇2號 - 我的意見 - 值得的辛勤工作..

鏈接:

  1. intro to socket servers in php
  2. intro to socket servers in java
+0

是的,我的答案將幫助實現它,但是你的數據將保持最新(尤其是客戶端隨機斷開,超時等) –

+0

你能給我任何示例教程的任何鏈接嗎? – himAndroid

+0

我已經爲套接字服務器添加了2個鏈接(我建議的第二個選項)..我真的推薦你使用java套接字服務器,因爲java是更強大的語言,特別是當你需要編寫一個快速和大型的服務器時採用多處理。儘管你可能想在開始時嘗試使用php服務器,因爲它更容易理解。 –

1

嘗試向用戶表添加有關登錄狀態的列(tinyint(1),因爲它是MySQL表)。它將填充爲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; 
+0

謝謝。有關於它的任何教程? – himAndroid

+1

我建議你看看Asaf的大部分實現的答案。我的答案主要是如何將其設置到數據庫中,然後如何使用列來顯示結果。 –

相關問題