Comment afficher erreurs pour une date naissances

Fermé
oliviermeene - 7 août 2018 à 19:18
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 - 8 août 2018 à 14:46
Bonjour,

Je suis débutant en programmation. J'ai élaborer DatePickerDialog pour une demande de date de naissance dans un formulaire simple avec la connexion a la base de données et analyse des erreurs sur php et les autres fichier pour renvoyer les erreur en JAVA SUR ANDROID STUDIO.

Mais la seul érreur que je reçoi, peux importe l'erreur que je fait, est celui que j'ai mit dans le inputErrors de la page RegisterActivitydeux qui est " La date d'anniversaire n'est pas valide".

Est-ce que vous pouvez m'aider, svp

Ca fait pas mal de temps que je suis deçu.

Merci d'avance

Voila mon fichier 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=".RegisterActivitydeux">


    <TextView
        android:text="@string/register2_title"

        android:textSize="20sp"
        android:layout_marginBottom="40dp"
        android:layout_width="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_height="wrap_content"  />




        <Button

        android:text="Sélectionner"

        android:id="@+id/tvDate"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />




    <Button
        android:id="@+id/btn_send"
        android:layout_marginTop="20dp"
        android:layout_gravity="center_horizontal"
        android:text="@string/Inscription"
        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>



Mainteneant mon fichier 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["date_n"])){

		$date_n = $_POST["date_n"];

		

		//verification de la date de naissance

		if(!preg_match('`^([0-9]{2})/([0-9]{2})/([0-9]{4})$`', $date_n)){
			$results["error"] = true;
			$results["message"] ["date_n"]= "Date d'anniversaire invalide";

		}else{

			//verification age

			// age aujourd'hui
			$Dateoj = new DateTime();

			// date - ans
			$Datemoins = $Dateoj->sub(new DateInterval('P10Y'));

			//convertion date en format date time

			$date_n = DateTime::createFromFormat('j-m-Y', $_POST["date_n"]);

			if($date_n >= $Datemoins)
			{

				//a  moins 10 ans
				$results['error'] = true;
				$results['message'] = "Votre age nécessite une autorisation parental";

			}

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

				//insertion

				$sql = $bdd->prepare("INSERT INTO inscriptiondeux(date_n) VALUES(:date_n)");

				$ql->execute([":date_n" => $date_n]);

				if(!sql){
					$results["error"] = true;
					$results["message"] = "Erreur lors de l'inscription";
				}

			}
				
		}




	}else{
		$results["error"] = true;
		$results["message"] = "Veuillez indiquer votre date d'anniversaire";

	}

	echo json_encode($results);

	



}



?>



mon fichier registeractivitydeux

package fr.xxx.xxx;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.RequestQueue;

import java.util.Calendar;
import java.util.Map;

import fr.sssipe.sssipe.myrequest.MyRequestdeux;

public class RegisterActivitydeux extends AppCompatActivity {

    private static final String TAG = "RegisterActivitydeux";

    private Button btn_send;
    private Button tvDate;
    private ProgressBar pb_loader;

    private TextView mDisplayDate;
    private DatePickerDialog.OnDateSetListener mDateSetListener;

    private RequestQueue queue;
    private MyRequestdeux request;




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


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

          mDisplayDate = (Button) findViewById(R.id.tvDate);

         mDisplayDate.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick (View view) {
                 Calendar cal = Calendar.getInstance();
                 int year = cal.get(Calendar.YEAR);
                 int month = cal.get(Calendar.MONTH);
                 int day = cal.get(Calendar.DAY_OF_MONTH);

                 DatePickerDialog dialog = new DatePickerDialog(
                         RegisterActivitydeux.this,
                         android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                         mDateSetListener,
                         year,month,day
                 );
                 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                 dialog.show();

             }
         });

         mDateSetListener = new DatePickerDialog.OnDateSetListener() {
             @Override
             public void onDateSet(DatePicker datePicker, int year, int month, int day) {
                 month = month + 1;
                 Log.d(TAG, "onDateSet: mm/dd/yyyy: " + day + "/" + month + "/" + year);

                 String date = day + "/" + month + "/" + year;
                 mDisplayDate.setText(date);

             }
         };

         btn_send = (Button) findViewById(R.id.btn_send);
         tvDate = (Button) findViewById(R.id.tvDate);
         pb_loader = (ProgressBar) findViewById(R.id.pb_loader);

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


         btn_send.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 pb_loader.setVisibility(View.VISIBLE);
                 String mDisplayDate = tvDate.getText().toString().trim();
                 request.registerdate(mDisplayDate, new MyRequestdeux.RegisterCallback() {
                     @Override
                     public void onSuccess(String message) {
                         pb_loader.setVisibility(View.GONE);
                         Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                         intent.putExtra("REGISTERDATE", message);
                         startActivity(intent);



                     }

                     @Override
                     public void inputErrors(Map<String, String> errors) {
                         pb_loader.setVisibility(View.GONE);
                         Toast.makeText(getApplicationContext(), "La date d'anniversaire n'est pas valide", Toast.LENGTH_SHORT).show();


                     }

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

                     }
                 });
             }
         });

    }
}


et enfin mon fichier myrequestdeux

package fr.xxx.xxx.myrequest;

import android.content.Context;
import android.util.Log;
import android.widget.Button;

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 MyRequestdeux {

    private Context context;
    private RequestQueue queue;

    public MyRequestdeux(Context context, RequestQueue queue) {
        this.context = context;
        this.queue = queue;
    }

    public void registerdate(final String mDisplayDate, final RegisterCallback callback){

        String url = "http://192.xxx.x.xx/phps/registerdate.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){
                        //inscription date bien deroulé
                        callback.onSuccess("Continuer");

                    }else{

                        JSONObject messages = json.getJSONObject("message");
                        if(messages.has("date_n")){
                            errors.put("date_n", messages.getString("date_n"));
                        }
                        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("date_n", mDisplayDate);


                return map;
            }
        };

        queue.add(request);

    }

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

2 réponses

BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
8 août 2018 à 09:19
Bonjour,

Est-ce que la date est bien envoyée à ton serveur ? Est-ce qu'elle est bien reçue ?

0
Bonjour,

Merci pour ta réponse.
Donc j'ai fait les vérifications pr la page php elle engendre bien les erreurs.
Par contre, la date ne s'enregistre pas dans la base de donnée.

Peut être que j'ai fait une erreurs dans les attribut ?
le DatePickerDialog est bien un "BUTTON" DANS LE LAYOUT.
Mais après avoir rentrer la date elle renvoie bien une date sous forme de string hein ? enfin je croit peut être que je me suis trompé dans les appels ?
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
8 août 2018 à 10:36
Regardes la doc de DatePickerDialog pour plus de détails, il y a un guide qui t'explique comment l'utiliser
0
D'accord merci. Mais toujours les erreur.

Après verification: quand je désactive l'insert en base de donnée quand je met une bonne date ça se redirige vers la MainActivity comme prévu.
Quand je fait une erreur ça renvoie rien .

Et quand je remet l'insert en base de données ça remet tout le temps l'erreur sauf quand c'est une bonne date ça fait rien;

Après étude je pense deja qu'il y a une erreur dans la RegisterActivitydeux a la ligne 115 quand j'ai mit "Taoste.mkeText(getApplicationContext(), "La date d'anniversaiire n'est pas valide" .....

Je voulais que en cas d'erreur ça envoie l'erreur correspond mentionner sur la page php ou autre ...
Comment doit-je le faire, svp ?
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
8 août 2018 à 14:46
Tu peux sûrement utiliser le paramètre
error
, non?
Je ne sais pas ce qu'il te renvoie mais tu dois avoir moyen de trouver quelque chose d'affichage dedans
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 8 août 2018 à 10:07
Bonjour,

Petites corrections au niveau de ton code php
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//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 = array();
$results["error"] = false;
$results["message"] = [];


//récupération propre des variables avant de les utiliser
$date_n = !empty($_POST["date_n"]) ? $_POST["date_n"] : NULL ;



 if($date_n ){

  //verification de la date de naissance

  if(!preg_match('`^([0-9]{2})/([0-9]{2})/([0-9]{4})$`', $date_n)){
   $results["error"] = true;
   $results["message"]["date_n"]= "Date d'anniversaire invalide";
      
  }else{

   //verification age
   // age aujourd'hui
   $Dateoj = new DateTime();
   // date - ans
   $Datemoins = $Dateoj->sub(new DateInterval('P10Y'));

   //convertion date en format date time
   $date_n_dt = DateTime::createFromFormat('j-m-Y', $date_n);

   if($date_n_dt >= $Datemoins){
    //a  moins 10 ans
    $results['error'] = true;
    $results['message'] = "Votre age nécessite une autorisation parental";

   }

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

    $sql = "INSERT INTO inscriptiondeux(date_n) VALUES(:date_n)";
    $datas = array(":date_n" => $date_n_dt);
        //Execution de la requete ( TOUJOURS  le faire dans un TRY/CATCH !! )
        try{
          $requete = $bdd->prepare($sql) ;
          $requete->execute($datas) ;
        }catch(Exception $e){
          $results["error"] = true;
   $results["message"] = "Erreur lors de l'inscription " ;
          $result['debug'] = $e->getMessage();
        }
   }
  }
 }else{
  $results["error"] = true;
  $results["message"] = "Veuillez indiquer votre date d'anniversaire";
    $result['debug'] = print_r($_POST,true);
 }

echo json_encode($results);
exit();


Peux tu voir ce que ça donne....
Surtout le $result['debug'] si ça ne fonctionne toujours pas... voir si ça nous affiche les erreurs...

0