Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion Android Studio à MySQL avec PHP

    25 septembre 2018 à 19:05:16

    Bonjour à tous,

    J'ai une application qui comporte une page d'accueil, une page d'inscription et une page de connexion. Les données utilisateurs doivent être enregistrées sous MySQL (sous wampserver).

    Je rencontre deux problèmes: 

    1) Lorsque je créé un nouvel utilisateur, je n'ai aucun message d'erreur qui apparaît mais les données ne sont pas enregistrées sous mysql.

    J'ai créé volontairement des oublis et là les messages d'erreur type "veuillez remplir tous les champs" apparaissent

    2)lors de la connexion le mot de passe n'est pas reconnu alors qu'il est similaire à celui de la bd

    Voici ma page d'accueil

    package com.example.user.myandroidapp;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import com.example.user.myandroidapp.model.Utilisateur;
    import com.rengwuxian.materialedittext.MaterialEditText;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.ProtocolException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    
    public class Connexion extends AppCompatActivity {
    
    
        Button connexion;
        Button inscription;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_connexion);
    
            Intent intent = getIntent();
            if(intent.hasExtra("REGISTER")){
                Toast.makeText(Connexion.this, intent.getStringExtra("REGISTER"),Toast.LENGTH_SHORT).show();
            }
    
    
            connexion = (Button) findViewById(R.id.connexion);
            inscription = (Button)findViewById(R.id.inscription);
    
            connexion.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent login = new Intent(Connexion.this, LoginActivity.class);
                    startActivity(login);
                }
            });
    
            inscription.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent register = new Intent(Connexion.this, RegisterActivity.class);
                    startActivity(register);
                }
            });
    
        }
    }

    ma page pour s'inscrire

    package com.example.user.myandroidapp;
    
    import android.content.Intent;
    import android.support.design.widget.TextInputLayout;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.android.volley.RequestQueue;
    import com.example.user.myandroidapp.myrequest.MyRequest;
    
    import java.util.Map;
    
    public class RegisterActivity extends AppCompatActivity {
    
        TextInputLayout til_email;
        TextInputLayout til_nom;
        TextInputLayout til_mdp;
        TextInputLayout til_mdp2;
        Button inscription;
        private RequestQueue queue;
        private MyRequest request;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_register);
    
            til_email = (TextInputLayout)findViewById(R.id.til_email);
            til_nom = (TextInputLayout)findViewById(R.id.til_nom);
            til_mdp = (TextInputLayout)findViewById(R.id.til_mdp);
            til_mdp2 = (TextInputLayout)findViewById(R.id.til_mdp2);
            inscription = (Button)findViewById(R.id.inscription);
    
            queue = VolleySingleton.getInstance(this).getRequestQueue();
            request = new MyRequest(this, queue);
    
            inscription.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final String telephone = til_email.getEditText().getText().toString().trim();
                    String nom = til_nom.getEditText().getText().toString().trim();
                    String mot_de_passe = til_mdp.getEditText().getText().toString().trim();
                    String confirmation_mot_de_passe = til_mdp2.getEditText().getText().toString().trim();
                    if(telephone.length() >0 && nom.length() >0 && mot_de_passe.length()>0){
    
    
                        request.registrer(telephone, nom, mot_de_passe, confirmation_mot_de_passe, new MyRequest.RegisterCallback() {
                            @Override
                            public void onSucces(String message) {
                            Intent intent = new Intent (getApplicationContext(), Connexion.class);
                            intent.putExtra("REGISTER", message);
                            startActivity(intent);
                            finish();
                            }
    
                            @Override
                            public void inputErrors(Map<String, String> errors) {
                            if(errors.get("email") != null){
                                til_email.setError(errors.get("email"));
                            } else {
                                til_email.setErrorEnabled(false);
                            }
                                if(errors.get("nom") != null){
                                    til_nom.setError(errors.get("nom"));
                                } else {
                                    til_nom.setErrorEnabled(false);
                                }
                                if(errors.get("mot_de_passe") != null){
                                    til_mdp.setError(errors.get("mot_de_passe"));
                                } else {
                                    til_mdp.setErrorEnabled(false);
                                }
    
                            }
    
                            @Override
                            public void onError(String message) {
                                Toast.makeText(RegisterActivity.this, message, Toast.LENGTH_SHORT).show();
                            }
                        });
                    } else{
                        Toast.makeText(RegisterActivity.this, "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
    
    le fichier pour se connecter
    package com.example.user.myandroidapp;
    
    import android.support.design.widget.TextInputLayout;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.android.volley.RequestQueue;
    import com.example.user.myandroidapp.myrequest.MyRequest;
    
    public class LoginActivity extends AppCompatActivity {
    
    
        TextInputLayout til_nom;
        TextInputLayout til_mdp;
        Button connexion;
        private RequestQueue queue;
        private MyRequest request;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            til_nom = (TextInputLayout)findViewById(R.id.til_nom);
            til_mdp = (TextInputLayout)findViewById(R.id.til_mdp);
            connexion = (Button)findViewById(R.id.connexion);
    
    
            queue = VolleySingleton.getInstance(this).getRequestQueue();
            request = new MyRequest(this, queue);
    
            connexion.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String nom = til_nom.getEditText().getText().toString().trim();
                    String mdp = til_mdp.getEditText().getText().toString().trim();
                    if(nom.length() >0 && nom.length() >0 && mdp.length()>0) {
                        request.connection(nom, mdp, new MyRequest.LoginCallback() {
                            @Override
                            public void onSuccess(String id, String nom) {
                                Toast.makeText(LoginActivity.this, "Connexion effectuée", Toast.LENGTH_SHORT).show();
    
                            }
    
                            @Override
                            public void onError(String message) {
                                Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show();
                            }
                        });
                    } else {
                        Toast.makeText(LoginActivity.this, "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    
    }
     

    la classe pour le Singleton:

    package com.example.user.myandroidapp;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.support.v4.util.LruCache;
    
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.toolbox.ImageLoader;
    import com.android.volley.toolbox.Volley;
    
    public class VolleySingleton {
    
        private static VolleySingleton mInstance;
        private RequestQueue mRequestQueue;
        private ImageLoader mImageLoader;
        private static Context mCtx;
    
    
        private VolleySingleton(Context context) {
            mCtx = context;
            mRequestQueue = getRequestQueue();
            mImageLoader = new ImageLoader(mRequestQueue,
                    new ImageLoader.ImageCache() {
                        private final LruCache<String, Bitmap>
                                cache = new LruCache<String, Bitmap>(20);
                        @Override
                        public Bitmap getBitmap(String url) {
                            return cache.get(url);
                        }
                        @Override
                        public void putBitmap(String url, Bitmap bitmap) {
                            cache.put(url, bitmap);
                        }
                    });
        }
        public static synchronized VolleySingleton getInstance(Context context) {
            if (mInstance == null) {
                mInstance = new VolleySingleton(context);
            }
            return mInstance;
        }
        public RequestQueue getRequestQueue() {
            if (mRequestQueue == null) {
                // getApplicationContext() is key, it keeps you from leaking the
                // Activity or BroadcastReceiver if someone passes one in.
                mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
            }
            return mRequestQueue;
        }
        public <T> void addToRequestQueue(Request<T> req) {
            getRequestQueue().add(req);
        }
        public ImageLoader getImageLoader() {
            return mImageLoader;
        }
    
    }

    l'activité pour faire le lien avec le fichier php

    package com.example.user.myandroidapp.myrequest;
    
    import android.content.Context;
    import android.util.Log;
    
    import com.android.volley.AuthFailureError;
    import com.android.volley.NetworkError;
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.StringRequest;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class MyRequest {
    
        private Context context;
        private RequestQueue queue;
    
        public MyRequest(Context context, RequestQueue queue) {
            this.context = context;
            this.queue = queue;
        }
    
        public void registrer (final String email, final String nom, final String mot_de_passe, final String confirmation_mot_de_passe, final RegisterCallback registerCallback){
            String url = "http://192.168.1.40/MyAndroidApp/registrer.php";
            StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Map<String, String>errors = new HashMap<>();
    
                    try{
                        JSONObject json = new JSONObject(response);
                        Boolean error = json.getBoolean("error");
                        if(!error){
                            registerCallback.onSucces("Inscription réussie");
                        } else{
                            JSONObject messages = json.getJSONObject("message");
                            if(messages.has("email")){
                                errors.put("email", messages.getString("email"));
                            }
                            if(messages.has("nom")){
                                errors.put("nom", messages.getString("nom"));
                            }
                            if(messages.has("mot_de_passe")){
                                errors.put("mot_de_passe", messages.getString("mot_de_passe"));
                            }
                            registerCallback.inputErrors(errors);
                        }
                    } catch (JSONException e){
                        e.printStackTrace();
                    }
    
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                if( error instanceof NetworkError){
                    registerCallback.onError("Impossible de se connecter");
                }
                else if (error instanceof VolleyError){
                    registerCallback.onError("Une erreur s'est produite");
                }
                }
    
        }){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> map = new HashMap<>();
                    map.put("email", email);
                    map.put("nom", nom);
                    map.put("mot_de_passe", mot_de_passe);
                    map.put("confirmation_mot_de_passe", confirmation_mot_de_passe);
                    return map;
                }
            };
            queue.add(request);
        }
    
        public interface RegisterCallback{
            void onSucces(String message);
            void inputErrors (Map<String,String> errors);
            void onError(String message);
        }
    
        public void connection(final String nom, final String mot_de_passe, final LoginCallback callback){
            String url = "http://192.168.1.40/MyAndroidApp/login.php";
            StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                Log.d("APP", response);
                JSONObject json = null;
                try{
                    json = new JSONObject(response);
                    Boolean error = json.getBoolean("error");
    
                    if(!error){
                        String id = json.getString("id");
                        String nom = json.getString("pseudo");
                        callback.onSuccess(id, nom);
    
                    }else {
                        callback.onError(json.getString("message"));
                    }
                }catch (JSONException e){
                    e.printStackTrace();
                }
    
    
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if( error instanceof NetworkError){
                        callback.onError("Impossible de se connecter");
                    }
                    else if (error instanceof VolleyError){
                        callback.onError("Une erreur s'est produite");
                    }
                }
    
            }){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> map = new HashMap<>();
                    map.put("nom", nom);
                    map.put("mot_de_passe", mot_de_passe);
                    return map;
                }
            };
            queue.add(request);
        }
    
    
    
        public interface LoginCallback{
            void onSuccess (String id, String nom);
            void onError(String message);
        }
    
    }
    le fichier php pout s'inscrire:
    <?php
    
    $db = new PDO("mysql:host=localhost;dbname=my_app_android","root","");
    $results["error"] = false;
    $results["message"] = [];
    
    
    if(isset($_POST)){
       if(!empty($_POST['email'])&& !empty($_POST['nom']) && !empty($_POST['mot_de_passe']) && !empty($_POST['confirmation_mot_de_passe'])){
           
           $email = $_POST['email'];
           $nom = $_POST['nom'];
           $mot_de_passe = $_POST['mot_de_passe'];
           $confirmation_mot_de_passe = $_POST['confirmation_mot_de_passe'];
           
           // vérification nom
           if(strlen($nom) <2 || !preg_match("/^[a-zA-Z0-9_-]+$/", $nom) || strlen($nom) > 20){
            $results["error"] = true;
           $results["message"]['nom'] = "nom invalide";  
           }else{
               // vérifier que le nom n'existe pas
           }
           
            // vérification email
           if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
                $results["error"] = true;
           $results["message"]['email'] = "Email invalide";
           }else{
               $requete = $db->prepare("SELECT email FROM utilisateurs WHERE email = :email");
               $requete->execute([':email' => $email]);
               $row = $requete->fetch();
               if($row){
                  $results["error"] = true;
           $results["message"]['email'] = "Un compte existe déjà avec cet email";  
               }
           }
           
           //vérification mot de passe
           if($mot_de_passe !== $confirmation_mot_de_passe){
                $results["error"] = true;
           $results["message"]['mot_de_passe'] = "Les mots de passe doivent être identiques";
           }
           
           if($results["error"] === false){
               $mot_de_passe = password_hash($mot_de_passe, PASSWORD_BCRYPT);
               $sql = $db->prepare("INSERT INTO utilisateur(email, nom, mot_de_passe) VALUES (:email, :nom, :mot_de_passe)");
               $sql->execute([":email" => $email, ":nom" => $nom, ":mot_de_passe" => $mot_de_passe]);
               if(!$sql){
                    $results["error"] = true;
           $results["message"] = "Erreur lors de l'inscription";
               }
           }
       }else{
           $results["error"] = true;
           $results["message"] = "Veuillez remplir tous les champs"; 
       }
        
        echo json_encode($results);
    }
    
    ?>
    le fichier php pour se connecter
    <?php
    
    $db = new PDO("mysql:host=localhost;dbname=my_app_android","root","");
    
    $results["error"] = false;
    $results["message"] = [];
    
    if(!empty($_POST)){
        if(!empty($_POST['nom']) && !empty($_POST['mot_de_passe'])){
    
            $nom = $_POST['nom'];
            $mot_de_passe = $_POST['mot_de_passe'];
    
            $sql = $db->prepare("SELECT * FROM utilisateur WHERE nom = :nom");
            $sql->execute([":nom" => $nom]);
            $row = $sql->fetch(PDO::FETCH_OBJ);
            if($row){
                if(password_verify($mot_de_passe, $row->mot_de_passe)){
                    $results["error"] = false;
                    $results["id"]=$row->id;
                    $results["nom"]=$row->nom;
                }else{
                    $results["error"] = true;
                    $results["message"] = "nom ou mot de passe incorrect1";
    
                }
    
            } else{
                    $results["error"] = true;
                    $results["message"] = "nom ou mot de passe incorrect2";
    
                }
    
        } else{
            $results["error"] = true;
            $results["message"] = "Veuillez remplir tous les champs";
        }
        
        echo json_encode($results);
    }
    
    
    
    ?>

     Merci d'avance pour votre aide

    -
    Edité par Fanny Delaroque 25 septembre 2018 à 19:06:43

    • Partager sur Facebook
    • Partager sur Twitter

    Connexion Android Studio à MySQL avec PHP

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown