2013-08-21 66 views
0

我在學習android並嘗試使用PHP腳本和WAMP服務器編寫一些代碼來驗證用戶名和密碼。我不斷從我的PHP腳本獲取未定義的索引錯誤。據我所知,這意味着我的PHP腳本無法訪問URL中的數據。這是相關的代碼。任何幫助表示讚賞。HTTP Post不能在Android中使用PHP

//build url data to be sent to server 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("username",username)); 
     nameValuePairs.add(new BasicNameValuePair("password",password)); 

     String result = ""; 
     InputStream is = null; 
     //http post 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://10.0.2.2/PasswordCheck.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     }catch(Exception e){ 
      Log.e("Connection", "Error in http connection "+e.toString()); 
     } 

這裏是我的PHP腳本

<?php 
mysql_connect("localhost", "root", "") or die("could not connect to mysql"); 
mysql_select_db("drop-in") or die("database not found"); 

$username = $_POST["username"]; 
$suppliedPassword = $_POST["password"]; 
$databasePassword = ""; 
$output = "false"; 
$query = mysql_query("SELECT Password FROM users WHERE Username = '$username'") or die("query failed"); 
if(mysql_num_rows($query) > 0){ 
    $row = mysql_fetch_assoc($query); 
    $databasePassword = $row['password']; 
    if($databasePassword == $suppliedPassword) 
    { 
     $output = "true"; 
    } 
} 
    print($output); 
    mysql_close(); 
?> 

這裏服務器的答覆

http://imgur.com/sQStI2D

編輯的圖片:所以我想通了,即使PHP腳本所賜這些錯誤的$用戶名和$密碼變量包含我的Android應用程序試圖傳遞的值。然而,這些錯誤的存在仍然與我的代碼混亂,因爲錯誤表的HTML被髮回到Android應用程序的響應

回答

1

對我來說,它看起來像你的Android代碼不是發佈「用戶名」和「密碼」字段,這解釋了爲什麼PHP腳本找不到它們。

在您的代碼new ArrayList<NameValuePair>();中,arrayList的長度可能會丟失,通過查看此代碼sample:它看起來應該是new ArrayList<NameValuePair>(2);,您應該試試看看是否可以解決問題。

+0

ArrayList根據需要增長,所以這不是問題。不過謝謝。 –

0

原來這是一個簡單的拼寫錯誤。我在循環中使用了小寫字母'p',而不是大寫字母。奇怪的是,它造成了它所做的錯誤。

0

您可以嘗試json_decode()函數在PHP中:

嘗試創建自己的服務器上的文件,並把Android的請求的內容轉換成簡單的文本文件,你會得到陣列輸出。在那個文件中。

在下面的代碼PHP文件寫入你的服務器上

<?php 
$data=file_put_content(collect.txt, $_POST); 
// if you got to know object or array name from txt file use it. 
$array=json_decode($data, true) // for array output. 
print_r($array); 
?> 

,如果你不希望從文件中讀取,如果你知道數組名就可以直接使用,在JSON對象

<?php 

$array=json_decode($data) // remove true for use as an object output. 
print_r($array); 
?> 

一旦你得到你的數組賦值給新的變量,並做他們想做的任何事情。根據您的requiremnet更新數據庫或任何東西