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
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
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.