2 votes

Android, php, MySQL et phpMyAdmin

J'espère que vous pourrez m'éclairer. Je travaille sur un projet Android Capstone qui se connecte à une base de données MySQL via php et phpMyAdmin. J'essaie de passer trois paramètres (childId, date1 et date5) depuis Android vers le script php script et ça ne marche pas. Logcat affiche simplement Error lorsque j'essaie d'imprimer le résultat. Je pense que le problème se trouve dans mon php script car tout fonctionne si je ne passe que 2 paramètres (childId et date1). Toute aide est grandement appréciée. Voici d'abord mon 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();
?>

Et voici ma connexion depuis 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;
}

Merci d'avance.

1voto

YvesLeBorg Points 5816

Vous encodez deux fois un seul paramètre "date" (et le lisez deux fois en php). Corrigez votre php et votre java pour avoir les clés de paramètre appropriées date1 et date5.

donc, dans php script :

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

et dans java , changez la ligne en :

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");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X