DevilBoy
DevilBoy

Reputation: 11

How to create a StringRequest that does POST to initialize the parameters in php script and GET when taking the JSON returned

So I have a php script that search data in a mysql database, but for the search I would like to put parameters. Parameters that comes from the android app through POST

<?php 
$parametre=$_POST['parametre'];
$ordre=$_POST['ordre'];
$donneecherchee=$_POST['donneerecherchee'];
$auteur=$_POST['auteur'];
$recenseur=$_POST['recenseur'];

//database constants
define('DB_HOST', 'xxx.xxx.xxx.xxx');
define('DB_USER', 'xxxx');
define('DB_PASS', 'xxxxxxxx');
define('DB_NAME', 'xxxxxxx');
// Connect to the MySQL database

//connecting to database and getting the connection object
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

//Checking if any error occured while connecting
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
die();
}

if ($parametre != null && $ordre != null && $auteur != null && $donneecherchee != null) {
    // echo(" Les paramatres sont:".$parametre.",".$ordre.",".$auteur.",".$donneecherchee.",".$recenseur);
    if ($auteur == "Mes recensements") {
        $queryused = "SELECT id, nom, dateprise, cin, observation, recenseur, usedurl FROM tsena WHERE " . $parametre . " = '" . $donneecherchee . "' AND recenseur = '" . $recenseur . "' ORDER BY id " . $ordre.";";
        $executedquery = $conn->prepare($queryused);
        $executedquery->execute();

        $executedquery->bind_result($id, $nom, $dateprise, $cin, $observation, $recenseur, $usedurl);

        $tsena = array();

        // traversing through all the result
        while ($executedquery->fetch()) {
            $temp = array();
            $temp['id'] = $id;
            $temp['nom'] = $nom;
            $temp['dateprise'] = $dateprise;
            $temp['cin'] = $cin;
            $temp['observation'] = $observation;
            $temp['recenseur'] = $recenseur;
            $temp['usedurl'] = $usedurl;
            array_push($tsena, $temp);
        }
        // echo the result as JSON
        echo json_encode($tsena);
    } else {
        $queryused2 = "SELECT * FROM tsena WHERE " . $parametre . " = '" . $donneecherchee . "' ORDER BY id " . $ordre .";";
        $executedquery2 = $conn->prepare($queryused2);
        $executedquery2->execute();

        $executedquery2->bind_result($id, $nom, $dateprise, $cin, $observation, $recenseur, $usedurl);

        $tsena2 = array();

        // traversing through all the result
        while ($executedquery2->fetch()) {
            $temp = array();
            $temp['id'] = $id;
            $temp['nom'] = $nom;
            $temp['dateprise'] = $dateprise;
            $temp['cin'] = $cin;
            $temp['observation'] = $observation;
            $temp['recenseur'] = $recenseur;
            $temp['usedurl'] = $usedurl;
            array_push($tsena2, $temp);
        }

        // echo the result as JSON
        echo json_encode($tsena2);
    }
}else{
    $data = [
        "id" => 0,
        "nom" => "Aucun",
        "dateprise" => "Aucune date",
        "cin" => "Aucun CIN",
        "observation" => "Aucune observation",
        "recenseur" => "Aucun recenseur",
        "usedurl" => "Aucune image"
    ];
    // Output the JSON data
    echo json_encode([$data]);
}

?>

I would like to get the json returned and display them in my app but it will require me to create another StringRequest with GET, doing so will create a script with empty parameters.

Here is what the Android part look like:

`private void loadProducts(String parametre, String ordre, String donneerecherchee,String auteur,String recenseur) { StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_tsena, new Response.Listener() { @Override public void onResponse(String response) { try { JSONArray array = new JSONArray(response); System.out.println("Reponse du serveur:"+response);

                        //traversing through all the object
                        for (int i = 0; i < array.length(); i++) {

                            JSONObject product = array.getJSONObject(i);

                            //adding the product to product list
                            tsenaList.add(new Tsena(
                                    product.getInt("id"),
                                    product.getString("nom"),
                                    product.getString("cin"),
                                    product.getString("dateprise"),
                                    product.getString("observation"),
                                    product.getString("recenseur")
                            ));
                        }

                        //creating adapter object and setting it to recyclerview
                        TsenaAdapter adapter = new TsenaAdapter(ConsultTsena.this, tsenaList);
                        recyclerView.setAdapter(adapter);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(ConsultTsena.this,"Erreur de load:"+error,Toast.LENGTH_LONG).show();
                    Log.e("Volley Erreur", error.toString());
                }
            }){
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            params.put("parametre", parametre);
            params.put("ordre", ordre);
            params.put("donneerecherchee",donneerecherchee);
            params.put("auteur",auteur);
            return params;  // Set the parameters for the request
        }
    };

    //adding our stringrequest to queue
    Volley.newRequestQueue(this).add(stringRequest);
}`

What can I do?

I tested:

What I have in my logcat is an empty json [], which should not be case, as I executed the query in Powershell and it returned something.

Upvotes: 1

Views: 26

Answers (1)

DevilBoy
DevilBoy

Reputation: 11

Sorry for bothering you all, to solve the problem I just put the parameters as GET and I shoot them trough the url string in the android part. It sure works but is not very secure

Upvotes: 0

Related Questions