Comment afficher erreurs pour une date naissances
oliviermeene
-
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
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:
Mainteneant mon fichier php
mon fichier registeractivitydeux
et enfin mon fichier myrequestdeux
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); } }
A voir également:
- Le format de la date de naissance est incorrect
- Télécharger le journal de votre naissance - Télécharger - Histoire & Religion
- Format epub - Guide
- Format factory - Télécharger - Conversion & Codecs
- Format dat - Guide
- Hp usb disk storage format tool - Télécharger - Stockage
2 réponses
Bonjour,
Petites corrections au niveau de ton code php
Peux tu voir ce que ça donne....
Surtout le $result['debug'] si ça ne fonctionne toujours pas... voir si ça nous affiche les erreurs...
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...
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 ?
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 ?
Je ne sais pas ce qu'il te renvoie mais tu dois avoir moyen de trouver quelque chose d'affichage dedans