2016-08-05 68 views
2

希望你們可以擺脫一些光。我正在開發一個Android Capstone項目,該項目通過php和phpMyAdmin連接到MySQL數據庫。我試圖從Android傳遞三個參數(childId,date1和date5)到php腳本,它不工作。當我嘗試打印出結果時,Logcat顯示錯誤。我認爲這個問題是在我的PHP腳本,因爲如果我只傳遞2個參數(childId和date1),一切都可以工作。任何幫助是極大的讚賞。這是我第一次code.php:Android,php,MySQL和phpMyAdmin

<?php 
require "conn.php"; 

$response = array(); 

if($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$childId = $_POST["childId"]; 
$date1 = $_POST["date"]; 
$date5 = $_POST["date"]; 


$sql = "SELECT * FROM child_sessions WHERE childId like '$childId' AND date BETWEEN '$date1' AND '$date5'"; 


$result = $conn->query($sql); 

if($result->num_rows > 0) { 

    $response["child_sessions"] = array(); 

    while($row = mysqli_fetch_array($result)) { 
     $child_sessions = array(); 
     $child_sessions["date"] = $row["date"]; 
     $child_sessions["timeIn"] = $row["timeIn"]; 
     $child_sessions["timeOut"] = $row["timeOut"]; 
     $child_sessions["duration"] = $row["duration"]; 
     $child_sessions["childId"] = $row["childId"]; 
     $child_sessions["sessionCost"] = $row["sessionCost"];   
     array_push($response["child_sessions"], $child_sessions); 
    } 

    // success 
    $response["success"] = 1; 

    echo json_encode($response); 
} else { 
    echo "Error"; 
} 

$conn->close(); 
?> 

下面是從我的Android連接:

private String childSessions(String childId, String date1, String date5) { 

    InputStream inputStream = null; 
    String line = null; 

    Log.d(TAG, "childSessions: " + childId); 
    Log.d(TAG, "childSessions: " + date1); 
    Log.d(TAG, "childSessions: " + date5); 
    try { 
     String login_url = Constants.RETRIEVE_CHILD_SESSION_FOR_WEEK; 
     URL url = new URL(login_url); 
     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
     httpURLConnection.setRequestMethod(Constants.REQUEST_METHOD); 
     httpURLConnection.setDoOutput(true); 
     httpURLConnection.setDoInput(true); 
     OutputStream outputStream = httpURLConnection.getOutputStream(); 
     BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
     String post_data = URLEncoder.encode("childId", "UTF-8") + "=" + URLEncoder.encode(childId, "UTF-8") + "&"+ 
       URLEncoder.encode("date", "UTF-8") + "=" + URLEncoder.encode(date1, "UTF-8") + "&" + 
       URLEncoder.encode("date", "UTF-8") + "=" + URLEncoder.encode(date5, "UTF-8"); 
     bufferedWriter.write(post_data); 

     Log.d(TAG, "childSessions: " + post_data); 
     bufferedWriter.flush(); 
     bufferedWriter.close(); 
     outputStream.close(); 
     inputStream = httpURLConnection.getInputStream(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1")); 

     Log.d(TAG, "childSessions: " + bufferedReader); 

     String result = ""; 
     while ((line = bufferedReader.readLine()) != null) { 
      result += line; 
      Log.d(TAG, "childSessions: " + result); 
     } 
     bufferedReader.close(); 
     //result += System.getProperty("line.separator") + responseOutput.toString(); 

     inputStream.close(); 
     httpURLConnection.disconnect(); 
     return result; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

在此先感謝。

回答

1

您正在編碼一個'date'參數兩次(並在php中讀取兩次)。修復你的php和java以使用適當的參數鍵date1和date5。

所以,在PHP腳本:

$date1 = $_POST["date1"]; 
$date5 = $_POST["date5"]; 

,並在Java中,行更改爲:

String post_data = URLEncoder.encode("childId", "UTF-8") + "=" + URLEncoder.encode(childId, "UTF-8") + "&"+ 
      URLEncoder.encode("date1", "UTF-8") + "=" + URLEncoder.encode(date1, "UTF-8") + "&" + 
      URLEncoder.encode("date5", "UTF-8") + "=" + URLEncoder.encode(date5, "UTF-8");