2015-11-10 49 views
0

我想從mysql數據庫中獲取所有名稱和姓氏的列表,但僅限於用戶訪問該服務的某個用戶名和密碼。 我試着用下面的代碼,但似乎不工作。其實我得到的JSONArray是EMPTY。 這裏我的java代碼和PHP代碼(這是在服務器上)。 如果我不通過用戶名和密碼進行過濾,整個代碼工作得很好,所以實際上我收到了列表。但是,當我嘗試按用戶名和密碼進行過濾時,JsonArray爲空。 請任何線索我會感激!如何從一個mysql數據庫中獲取特定元素作爲Json

public class ApiConnector { 
    public JSONArray GetAllCustomers(User user){ 
    String url = "http://giacomoci.co.uk/FetchallDataList.php"; 

    ArrayList<NameValuePair> dataToSend = new ArrayList<>(); 
    dataToSend.add(new BasicNameValuePair("username", user.username)); 
    dataToSend.add(new BasicNameValuePair("password", user.password)); 


    HttpParams httpRequestParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT); 
    HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT); 

    DefaultHttpClient httpClient = new DefaultHttpClient(httpRequestParams); 
    HttpPost post = new HttpPost(url); 

    JSONArray jsonArray = null; 

    try { 


     //DefaultHttpClient httpClient = new DefaultHttpClient(); 
     //HttpGet httpGet = new HttpGet(url); 
     post.setEntity(new UrlEncodedFormEntity(dataToSend)); 


     HttpResponse httpResponse = httpClient.execute(post); 

     HttpEntity httpEntity = httpResponse.getEntity(); 

     if(httpEntity != null){ 

      try { 

       String entityResponse = EntityUtils.toString(httpEntity); 
       Log.e("Entity Response : ", entityResponse); 

       jsonArray = new JSONArray(entityResponse); 
      }catch (JSONException e){ 
       e.printStackTrace(); 
      }catch (IOException e){ 
       e.printStackTrace(); 
      } 
     } 
    } catch (ClientProtocolException e){ 
     e.printStackTrace(); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 

    return jsonArray; 
} 
    } 

在這裏,我的PHP代碼

$username = $_POST["username"]; 
$password = $_POST["password"]; 


$statement = mysqli_prepare($con, "SELECT name, surname FROM Contacts WHERE username = ? AND password = ?"); 
mysqli_stmt_bind_param($statement, "ss", $username, $password); 

$user[] = array(); 

while($row = mysqli_fetch_assoc($statement)){ 

    $user[] = $row; 

} 


echo json_encode($user); 

mysqli_close($con); 

所以,如果我刪除 「其中,username =?AND PASSWORD =?」和下面的一切都很順利,但我得到所有用戶名和密碼的名字和姓氏,因爲我不想。這段代碼有什麼問題?

+1

你真的應該使用PHP的[內置函數(http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼的安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 –

+0

單獨訪問URL會生成一個JSON字符串,因此如果將POST值傳遞給它不會產生JSON字符串,那麼您應該嘗試使用MySQL Workbench直接對MySQL數據庫運行SQL。 – MonkeyZeus

+0

如果密碼是編碼的(實際上應該是這樣),那麼您的簡單腳本將找不到您正在查找的記錄。檢查你在數據庫中的數據。如果密碼被編碼,你需要找到它的編碼類型,並找出如何在你的php代碼中應用相同的編碼來比較密碼值。 – ggg

回答

0
$username = $_POST["username"]; 
$password = $_POST["password"]; 

取代那些_POST_GET

$username = $_GET["username"]; 
$password = $_GET["password"]; 
+0

感謝您的線索!我只是測試它,但不幸的是結果是一樣的。我回來的Json是空的,所以過濾器沒有效果 –

+0

任何其他線索? –

+0

通常我爲了調試目的而嘗試的是以下步驟(請注意,我對android也很陌生,所以這些可能不是最優雅的解決方案): 1.檢查它是否在數據庫中正常工作, (select)語句在你的MySQL程序中,看它是否返回任何東西。 2.檢查PHP腳本是否在您的瀏覽器中返回任何內容,因此請將.php腳本放在您的服務器上並從瀏覽器(通過輸入URL)訪問它。確保回顯結果(這將是你的情況:echo json_encode($ user);),看看是否有效。 3.使用Log.d()登錄android; –

相關問題