2013-04-13 79 views
1

我的Logcat顯示我(正確)所有我想要返回的消息,但是當我要求代碼在另一個php頁面上顯示相同的東西時,它完全是怪人。爲什麼php頁面在LogCat中不顯示相同的內容?

請注意,此代碼是$ from =「r」和$ to =「」。

這裏是我的代碼:

<?php 

session_start(); 

/* connect to database */ 
$db = mysql_connect("localhost", "root", "root"); 

if (!$db) 
    die('could not connect'); 

mysql_select_db('androidp2p') 
    or die("could not select database"); 

/* variables */ 
$from = mysql_real_escape_string($_POST['from']); 
$to = mysql_real_escape_string($_POST['to']); 
$message = mysql_real_escape_string($_POST['message']); 

/* conditional code */ 
if (isset ($POST['to'])) 
{ 
    /* user wants to send a message */ 
    $query = "INSERT INTO messages (fromuser, touser, message) VALUES ('$from', '$to', '$message')"; 

    mysql_query($query) 
     or die("\n\ndatabase error!\n". mysql_error()); 

    echo "ok. Messages have been saved."; 
} 
else //if (!isset ($POST['to'])) 
{ 
    /* user wants to retrieve his messages */ 
    $query = "SELECT * FROM messages WHERE touser='$from'"; 

    /* echo test 1 */ 
    echo $query; 

    $result = mysql_query($query) 
     or die("\n\ndatabase error!\n". mysql_error()); 

    $mailbox = array(); 

    while($row = mysql_fetch_assoc($result)) 
    { 
    $mailbox[] = $row; 
    } 

    /* echo test 2 */ 
    echo "{ \"mailbox\":".json_encode($mailbox)." }"; 

    $name = "{ \"mailbox\":".json_encode($mailbox)." }"; 

    $_SESSION['myValue']=$name; 
} 

?> 

在第2頁(test.php的):

<?php 

session_start(); 

echo $_SESSION['myValue']; 

?> 

下面是在數據庫中的條目:

db

這是我的logCat:

I/RESPONSE(4591):SELECT * FROM messages where where touser ='r'

I/RESPONSE(4591):{「mailbox」:[{「id」:「117」,「fromuser」:「 qw「,」touser「:」r「,」message「:」zx「,」timestamp「:」2013-04-13 01:30:59「}]}

上面我想讓你看到touser是r。此條目(在數據庫中)是我想要返回的內容,即字段「touser」包含值「r」的所有條目。

現在,這是我的test.php頁:

{ 「郵箱」:[{ 「ID」: 「132」, 「FROMUSER」: 「R」, 「至用戶」: 「」,「消息「:」「,」timestamp「:」2013-04-13 15:45:03「},{」id「:」123「,」fromuser「:」r「,」touser「:」「,」message「 :「」,「timestamp」:「2013-04-13 13:41:23」},{「id」:「122」,「fromuser」:「r」,「touser」:「」,「message」: 「」,「timestamp」:「2013-04-13 13:30:53」},{「id」:「133」,「fromuser」:「」,「touser」:「」,「message」:「」 「時間戳」: 「2013年4月13日15時45分21秒」}]}

編輯:

正如你所看到的,它返回的所有TOUSER記錄T帽子是空白的(或空白)。我對這種行爲的解釋是,在代碼運行時,$ from變量實際上是'r'(這就是爲什麼它正確保存在logcat中),但是執行代碼之後目前在$ from中沒有值,所以它只是輸出$ from = null的結果。

php應該這樣做嗎?我認爲,當時執行和回顯的任何代碼都會在頁面上輸出,並保留在那裏,直到我重新運行代碼。對於如何解決這個問題,有任何的建議嗎?

EDITED

所有這一切的關鍵是使用JSONParser代碼我從here了,從數據庫中獲取特定行,並把它們放進了android的數據庫到特定的領域。我試過修改我的JSONParser代碼來使用BackgroundTask,比如this,你可以看看this

這是項目試圖實現的目標:第一個用戶可以發送消息到服務器數據庫,包含'from'(這將是user1的單元格編號),'to'(這將是目的地或user2的編號)和一條消息(這是他的位置)。第二用戶使用輪詢服務定期從數據庫中檢索他的消息,即數據庫中的所有條目將放在「到」字段中,並將這些條目存儲到手機的數據庫中(並自動從服務器的數據庫中刪除這些條目)。我想,除了從服務器數據庫中獲取特定條目的部分之外,一切基本上都在工作。

我決定使用JSONParsing,因爲它可以接收一組數據庫條目並從每個條目中創建一個字符串,從而更容易將其存儲在我的Android數據庫中。但這是它缺乏的地方..找到一種方式來檢索特定的分貝條目..我還沒有想出一個辦法做到這一點。任何幫助將我指向正確的方向?

+0

鑑於test.php結果中的所有'touser'都是空白的,所以感覺就像沒有'$ from'的值......你確定你正在POST你的腳本嗎? –

+0

@PhillSparks - Yeah $ from確實有一個值,從logcat中的這一行可以看出:I/RESPONSE(4591):SELECT * FROM messages where'touser ='r'...'r'是$從。 – Keegs

+0

@PhillSparks - 但另一方面,當我用'r'代替'$'時,在php代碼中:'$ query =「SELECT * FROM messages where'touser ='$ from'」;'then test.php輸出正確的東西。 – Keegs

回答

3

會話被設計爲每個訪問者都是唯一的,這是通過在cookie中記住會話來完成的。您的計算機將與您的Android有不同的會話。實際上,您的計算機上的每個瀏覽器都有不同的會話,除非他們有共享cookie的方式。此外,腳本請求(如Android代碼)不會自動記住Cookie並在請求之間發送,因此它們可能會爲每個請求啓動一個新會話,並丟失以前會話的信息。

有許多解決方案...

  1. 調整你的過程,這樣你就不需要保留這樣的消息 - 剛剛從刪除它們也許腳本返回的消息?或者讓第一個腳本返回消息並將第二個腳本傳遞給要刪除的消息ID。這最後一點也可能是「更安全」,因爲直到您知道應用程序已收到它,您纔會刪除任何內容。

  2. 找到一種方法記住cookie並將它們隨後的請求發送出去。 How do I make an http request using cookies on Android?可能對此有用。

  3. 從PHP獲取會話ID並將其與所有請求一起發送。您可以使用session_id()獲取並設置會話ID。

最後兩個是不是API的偉大實踐,爲我們的目標是API的是stateless,但他們可能會爲你工作。

+0

非常感謝您的解釋。我會進行調查,並且我將在今天實施其中一項,以便項目最終完成! – Keegs

0

是的,我看到的問題,這就是奇我還沒有碰到過這之前到來,但它似乎你可以添加一些SQL語句來糾正它...

SELECT * FROM messages WHERE touser='$from' AND WHERE touser IS NOT NULL 

我認爲這將阻止顯示空行。 IS NOT NULL應該是關鍵。

+0

錯誤消息:SELECT * FROM messages where touser =''AND WHERE touser is not NULL數據庫錯誤!你的SQL語法有錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以找到在第1行 – Keegs

+0

處仍存在錯誤的'WHERE touser IS NOT NULL'附近使用的正確語法? – Derple

+0

是的,和相同的錯誤。 – Keegs

相關問題