Formulaire inscription ne renvoi pas erreur

Fermé
Patrick - 26 juil. 2018 à 16:47
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 30 juil. 2018 à 16:00
Bonjour,

Je suis débutant en programmation sur android studio.
Lorsque je fait une erreur je ne reçoit aucune erreur a part celle de "une erreur s'est produite.....réessayer".
Même en faisant exprès une erreur dans le prenom.....
Et sans erreur l'inscription ne se valide pas non plus mais toujours la même erreur 'une erreur s'est produite... réessayer".

Pouvez vous m'aider, s'il vous plait ? c'est urgent ....

Voila mon register activity:

package fr.xxxx.xxxx;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.android.volley.RequestQueue;

import java.util.Map;

import fr.xxxx.xxxx.myrequest.MyRequest;

public class RegisterActivity extends AppCompatActivity {

    private Button btn_send;
    private EditText et_prenom, et_nom, et_email;

    private ProgressBar pb_loader;
    private RequestQueue queue;
    private MyRequest request;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        btn_send = (Button) findViewById(R.id.btn_send);
        pb_loader = (ProgressBar) findViewById(R.id.pb_loader);
        et_prenom = (EditText) findViewById(R.id.et_prenom);
        et_nom = (EditText) findViewById(R.id.et_nom);
        et_email = (EditText) findViewById(R.id.et_email);

        queue = VolleySingleton.getInstance(this).getRequestQueue();
        request = new MyRequest(this, queue);

        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pb_loader.setVisibility(View.VISIBLE);
                String prenom = et_prenom.getText().toString().trim();
                String nom = et_nom.getText().toString().trim();
                String email = et_email.getText().toString().trim();
                if(prenom.length() > 0 && nom.length() > 0 && email.length() > 0){

                request.register(prenom, nom, email, new MyRequest.RegisterCallback() {
                    @Override
                    public void onSuccess(String message) {
                        pb_loader.setVisibility(View.GONE);
                        Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                        intent.putExtra("REGISTER", message);
                        startActivity(intent);
                        finish();


                    }

                    @Override
                    public void inputErrors(Map<String, String> errors) {

                        pb_loader.setVisibility(View.GONE);
                        if(errors.get("prenom") != null){
                            et_prenom.setError(errors.get("prenom"));

                        }
                        if(errors.get("nom") != null){
                            et_prenom.setError(errors.get("prenom"));

                        }
                        if(errors.get("email") != null){
                            et_prenom.setError(errors.get("prenom"));

                        }

                    }

                    @Override
                    public void onError(String message) {
                        pb_loader.setVisibility(View.GONE);
                        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();

                    }
                });
            }else{
                    Toast.makeText(getApplicationContext(), "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}




Voila mon main activity:
package fr.xxxx.xxxx;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button  btn_login, btn_register;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = getIntent();
        if(intent.hasExtra("REGISTER")){
            Toast.makeText(this,intent.getStringExtra("REGISTER"), Toast.LENGTH_SHORT).show();
        }

        btn_login = (Button) findViewById(R.id.btn_login);
        btn_register = (Button) findViewById(R.id.btn_register);

        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), RegisterActivity.class);
                startActivity(intent);
            }
        });




     }
}


VOILA mon layout:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_vertical"

    tools:context=".RegisterActivity">

    <TextView
        android:text="@string/register_title"
        android:textSize="20sp"
        android:layout_marginBottom="40dp"
        android:layout_width="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_height="wrap_content"  />


<LinearLayout

    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <EditText
        android:id="@+id/et_prenom"
        android:inputType="text"
        android:singleLine="true"
        android:imeOptions="actionNext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/prenom"  />

</LinearLayout>

    <LinearLayout

        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <EditText
            android:id="@+id/et_nom"
            android:inputType="text"
            android:singleLine="true"
            android:imeOptions="actionNext"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="@string/nom"  />

    </LinearLayout>

    <LinearLayout

        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <EditText
            android:id="@+id/et_email"
            android:inputType="textEmailAddress"
            android:singleLine="true"
            android:imeOptions="actionDone"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email"  />

    </LinearLayout>


    <Button
        android:id="@+id/btn_send"
        android:layout_marginTop="20dp"
        android:layout_gravity="center_horizontal"
        android:text="@string/suivant"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />

    <ProgressBar
        android:id="@+id/pb_loader"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:visibility="invisible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />

</LinearLayout>


VOILA mon REQUEST.JAVA :

package fr.xxxx.xxxx.myrequest;

import android.content.Context;


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 register(final String prenom, final String nom, final String email, final RegisterCallback callback){


        String url = "http://192.xxx.x.xxx/Users/xxxx/Appli ga/xxxx/phpf/register.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){
                        callback.onSuccess("Vous etes bien inscrit");
                        //inscription bien déroulée



                    }else{

                        JSONObject messages = json.getJSONObject("message");
                        if(messages.has("prenom")){
                            errors.put("prenom", messages.getString("prenom"));

                        }
                        if(messages.has("nom")){
                            errors.put("nom", messages.getString("nom"));

                        }
                        if(messages.has("email")){
                            errors.put("email", messages.getString("email"));

                        }

                        callback.inputErrors(errors);



                    }
                } 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... Réessayer");
                }

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String, String> map = new HashMap<>();
                map.put("prenom", prenom);
                map.put("nom", nom);
                map.put("email", email);

                return map;
            }
        };

        queue.add(request);
    }

    public interface RegisterCallback{
        void onSuccess(String message);
        void inputErrors(Map<String, String> errors);
        void onError(String message);
    }

}


et voila mon PHP:

<?php

//Connexion à la base de données


try{

$bdd = new PDO('mysql:host=localhost;dbname=xxx;charset=utf8', 'root', ' ');

$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

} catch(PDOException $e) {
	die('Erreur : ' . $e->getMessage());
}


$results["error"] = false;
$results["message"] = [];	


if(isset($_POST)){

	if (!empty($_POST['prenom']) && !empty($_POST['nom']) && !empty($_POST['email'])){


        $prenom = $_POST['prenom'];
        $nom = $_POST['nom'];
        $email = $_POST['email'];


    //verification prenom
    
    if(strlen($prenom) < 2 || !preg_match("/^[a-zA-Z -]+$/", $prenom) || strlen($prenom) > 100 ){
    	$results['error'] = true;
    	$results['message']["prenom"] = "Prenom invalide";
    }else{

    }    




    //verification nom de famille

     if(strlen($nom) < 2 || !preg_match("/^[a-zA-Z -]+$/", $nom) || strlen($nom) > 100 ){
    	$results['error'] = true;
    	$results['message']["nom"] = "NOM de famille invalide";
    }else{

    } 


    //verification email
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
    	$results["error"] = true;
    	$results['message']['email'] = "Email Invalide";
    }else{
     //verifier que email n'existe pas
    	$requete = $bdd->prepare("SELECT id FROM inscription WHERE email = :email");
    	$requete->execute([':email' => $email]);
    	$row = $requete->fetch();
    	if($row){
    		$results['error'] = true;
    		$results['message']["email"] = "Email déjà existant";
    	}


    }



    if($results["error"] === false){



    //insertion
    	
    	$sql = $bdd->prepare("INSERT INTO inscription(prenom, nom, email) VALUES(:prenom, :nom, :email)");

    		$sql->execute([":prenom" => $prenom, ":nom" => $nom, ":email" =>$email]);

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



}


?>


Et voila,
J'ai tout mis. Aidez moi svp

Cordialement
A voir également:

4 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
27 juil. 2018 à 09:17
Bonjour,

J'ai tout mis. Aidez moi svp
Certes....mais as-tu ciblé le problème ? Est-ce que cela vient de ton PHP par exemple ?
Tu dis que tu n'as pas autre chose que "une erreur s'est produite.....réessayer" mais d'où vient ce message ? As-tu regarder la console d'Android Studio ?
0
Justement il y a aucun problème qui est signaler sur la console.
Et l'erreur "une s'est produite...réessayer.", c'est mon erreur que j'ai programer lorsqu'il y a un soucis lors de la connexion. Si tu regarde bien j'ai mit une autre erreur aussi lorsque par exemple la wifi n'est pas connecté par exemple et ça aussi donctionne bien. Aussi lorsque les champs sont vide ou a moitier remplit ça dit "veuillez remplir tout les champs" .. tout cela comme prévu.
Mais les erreurs pour dire que le prenom, nom ou email n'est pas valide ça ne fonctionne pas. Et lorque je fait aucune erreur l'ins ription ne se realise pas.
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
27 juil. 2018 à 13:14
As-tu regardé côté serveur ce que tu reçois ? Ce que tu renvoies ?
Avec Studio, tu peux mettre des points d'arrêt et tracer ton app en pas-à-pas.
0
Non pas du tout. Je ne sais pas comment faire précisement cette tâche. Peut tu m'expliquer, stp?
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
27 juil. 2018 à 16:45
Au lieu d'utiliser la commande "Run", tu peux utiliser la commande "Debug".
De plus, dans l'éditeur de code, tu peux cliquer dans la marge de gauche (celle avec les numéros de ligne) pour placer tes point d'arrêts. Lors de l'exécution en Debug, ton app s'arrêtera à chaque points d'arrêt rencontré, te permettant de vérifier les différentes variables à ce moment là
0
D'accord merci.
J'essaye tout ça et je tiens au courant d'ici 30 min.
0
Dans le coter Debug maintenant c'est écrit:
Dans "debugger" c'est écrit " ! Connected to the target VM, adress 'localhost:8600', transport 'stocket'

et Dans Console j'ai 2 erreur en rouge:
- E/Zygote: v2
-E/Zygote: accessInfo : 0

Tu comprend ce que ca veux dire ?
0
J'ai fait le debuging mais je ne comprend pas du tout
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
30 juil. 2018 à 16:00
            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... Réessayer");
                }
            }

Le message d'erreur que tu obtiens est bien celui de la ligne 5 ? Si oui, il faut mettre un point d'arrêt et/ou afficher plus de détail sur les paramètres de
error
. Je ne peux rien faire de plus, désolé.
0