Bonjour,
Je fais (de nouveau) appel à vous car j’ai du mal à faire fonctionner la connexion entre mon application Android et ma base de données.
Alors petit résumé: J’ai une base de données SQL sur un serveur et une application Android sur mon téléphone. Mon téléphone fait appel à des scripts PHP sur mon serveur, qui eux font la liaison avec la BDD.
Pour l’exemple, j’ai une table "Utilisateur" avec trois tuples: login, password et mail. J’arrive à récupérer les données de la table utilisateur, et j’arrive aussi à insérer un utilisateur.
Mon problème est le suivant: Je n’arrive pas à utiliser la méthode POST, et je suis donc contraint d’utiliser la méthode GET (en faisant passer les paramètres via l’URL donc), ce qui n’est pas terrible pour les mots de passe; d’autant plus que j’aurais surement besoin de faire passer des variables plus grosses et plus nombreuses par la suite.
Je vous mets le code me permettant d’effectuer une inscription (=de rentrer une nouvelle ligne dans la table utilisateur). Ce qui est en commentaire dans la méthode post(), c’est la requête GET qui fonctionne, ce qui est en dessous est ce que j’ai essayé de faire avec la méthode POST, mais qui ne fonctionne pas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | public class Inscription extends AppCompatActivity { Utilisateur u = new Utilisateur(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.inscription); Button connexion = (Button) findViewById(R.id.buttonInscription); connexion.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { EditText inputLogin = (EditText) findViewById(R.id.editTextLogin); EditText inputMdp = (EditText) findViewById(R.id.editText3Mdp); EditText inputEmail = (EditText) findViewById(R.id.editTextMail); //Log.v("Login input: ", u.toString()); // Utilisateur u = new Utilisateur(); u.setLogin(inputLogin.getText().toString()); u.setMdp(inputMdp.getText().toString()); u.setMail(inputEmail.getText().toString()); //Log.v("User onCreate: ", u.toString()); new InscriptionServeur().execute(); //Intent intent = new Intent(Inscription.this, Inscription.class); //startActivity(intent); } }); } class InscriptionServeur extends AsyncTask<String, String, String> { private final String url = "http://xxx.xxx.xxx.xxx/xxxx/scriptInscription.php"; private final OkHttpClient client = new OkHttpClient(); private Gson gson = new Gson(); private String c; protected String doInBackground(String... args) { try { post(url); } catch (IOException e) { e.printStackTrace(); } return ""; } public String post(String url) throws IOException { // GET qui fonctionne /* url+="?login=" + u.getLogin() + "&mdp=" + u.getMdp() + "&mail=" + u.getMail(); Log.v("********TEST*********: " , url); Request request = new Request.Builder().url(url).build(); // Execute the request. Response response = null; response = client.newCall(request).execute();*/ //Début POST qui ne fonctionne pas c=gson.toJson(u); MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8"); Request myGetRequest = new Request.Builder() .url(url) .post(RequestBody.create(JSON_TYPE, c)) .build(); client.newCall(myGetRequest).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // Context context = getApplicationContext(); Log.v("fail", "fail"); //Toast.makeText(context, "FAIL", Toast.LENGTH_LONG); } @Override public void onResponse(Call call, Response response) throws IOException { // Context context = getApplicationContext(); Log.v("success", "success"); // Toast.makeText(context, "PASS", Toast.LENGTH_LONG); } }); return null; } } } |
Dans mon script PHP, j’ai une condition qui vérifie d’une part que toutes les variables ont bien un valeur (avec isset), et d’autre part que l’insertion a bien fonctionné. Lorsque j’utilise la méthode GET, tout se passe bien, mais lorsque j’utilise POST, le script échoue au premier if (avec les issets, en me disant que tous les champs ne sont pas remplis)
Merci par avance pour vos réponses !