2011-06-22 65 views
-1

我在PHP中遇到問題。我試圖從Android傳遞用戶名/密碼並通過PHP檢查MySQL中的值。雖然使用json_decodejson_encode,json_decode有效,但json_encode不起作用。但是,當我刪除json_decodejson_encode的作品,但我希望他們都在我的程序中工作。如何在PHP中使用json_decode/json_encode?

這裏是我的代碼:

$a = $_POST['userpwd_value']; //Accesing the value from Android. 

$b = json_decode($a); //Decoding android value using JSON. 

$username = $b->{'username'}; //Assigning username from android to a variable. 
$password = $b->{'password'}; //Assigning password from android to a variable. 

echo $username.$password; 

$check = mysql_query("select username,password from user where id=1"); 
$row = mysql_fetch_assoc($check); 

//if($row['username']==$username && $row['password']==$password) 
    $output[]=$row; 
//else 
    //$output[]=array("value"=>"false"); 
print(json_encode($output)); 

問題出在哪裏?

+0

您是否嘗試使用print_r(json_encode($ output))來查看輸出是什麼 – Adnan

+0

您是否確定$ row包含您期望它包含的內容?也許這就是爲什麼json_encode沒有返回期望值。 – Crashspeeder

+0

那麼你從你的代碼中刪除了'echo $ username。$ password'? –

回答

3

json_encode失敗,如果變量內容不正確UTF-8排序。如果你的數據庫使用另一個字符集,這些變量包含特殊字符,那麼你應該在那裏得到一個錯誤。 (提高error_reporting水平或檢查json_last_error找出)

與您的特定代碼的另一個問題是,你的第一輸出別的東西:

echo $username.$password; 

這將無效JSON輸出作爲一個整體。如果你有領先垃圾,你的瀏覽器將不會正確解碼返回的變量。也不要忘記使用header("Content-Type: application/json");


$b=json_decode($_POST['userpwd_value']); 
    $username=$b->{'username'}; 
    $password=$b->{'password'}; 

    $check = mysql_query("select username,password from user where id=1"); 
    $row = mysql_fetch_assoc($check); 
    $row = array_map("utf8_encode", $row); 

    if ($row['username']==$username && $row['password']==$password) { 
     $output[] = $row; 
    } else { 
     $output[] = array("value"=>"false"); 
    } 
    header("Content-Type: application/json"); 
    print(json_encode($output)); 
+0

@mario:謝謝你的建議,但我可以理解你的第二個建議可以請你詳細說明 – ramesh

+0

在你的腳本的頂部添加'error_reporting(E_ALL);',在json_encode輸出之後添加'var_dump(json_last_error());'。 – mario

+0

不,它仍然無法工作。$ a = $ _ POST ['userpwd_value']; //取自android的價值 $ b = json_decode($ a); //使用JSON解碼android值 $ username = $ b - > {'username'}; //從android分配用戶名到變量 $ password = $ b - > {'password'}; //從android向變量分配密碼 echo $ username。$密碼; 當我刪除這個代碼json_encode將工作。 – ramesh

0

我認爲有可能是在JSON編碼的數據($a)另一個水平的結果向用戶發送適當的頭。你的echo語句是否顯示正確的用戶名和密碼?如果不是,請在 $b = json_decode($a);聲明後放置var_dump($b);

+0

啊它是顯示正確的用戶名和密碼從android – ramesh

0

將下面兩行替換爲以下內容。

你原線路:

$username=$b->{'username'}; 
    $password=$b->{'password'}; 

新線:

$username=$b->username; 
    $password=$b->password; 

更換後,檢查它是否是工作或沒有。

+0

@ramesh你可以粘貼你的代碼的文件?以上問題中的 –

+0

是該文件的代碼... – ramesh