Android、php、MySQL 和 phpMyAdmin

Android, php, MySQL, and phpMyAdmin

希望你们能有所启发。我正在开发一个 Android Capstone 项目,该项目通过 php 和 phpMyAdmin 连接到 MySQL 数据库。我试图将三个参数(childId、date1 和 date5)从 Android 传递到 php 脚本,但它不起作用。 Logcat 只是在我尝试打印结果时显示错误。我认为问题出在我的 php 脚本中,因为如果我只传递 2 个参数(childId 和 date1),一切正常。任何帮助是极大的赞赏。这是我的 code.php 第一个:

<?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;
}

提前致谢。

您对单个 '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");