Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1707 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème vérification format champs

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème vérification format champs

n°1884458
D_AmOn
Posté le 14-05-2009 à 10:16:27  profilanswer
 

Bonjour,
 
Je viens vous demander votre aide, ayant quelques problèmes dans mon formulaire.
 
1. D'abord, j'ai fais une liste de sélection de plusieurs pays. Or, cette liste est très longue !
 
Je ne me vois pas faire :  
 
           if(eregi("pays",$champ))
           {
              if(!ereg("(France|Espagne|Italie|Grèce|Allemagne|Lituanie|Turquie|Finlande|...|...)",$valeur))
              {
                $errors[]="$valeur n'est pas un pays valide.";
              }
           }
... pour 50 pays ! Auriez-vous une solution svp ?
 
 
2. Ensuite, l'internaute doit rentrer sa date de naissance. J'ai testé le code suivant, en indiquant une date invalide, mais après génération du script, il ne m'indique aucune erreur ! Je ne comprends pas....  
 
           if(eregi("dateNaissance",$champ))
           {
              if(!ereg("^([0-9]{2})/([0-9]{2})/([0-9]{4})$",$valeur, $date) and checkdate( $date[2], $date[1], $date[3] ) and $date[3] >= 1900)
              {
                 $errors[] = "$valeur n'est pas une date valide.";
              }
           }
 
           Exemple : dateNaissance = 53-487198.
                          resultat = RIEN !
 
 
3. Enfin, j'ai fait exactement le même test que précédemment, mais cette fois si avec le champ "prenom" et le champ "nom", en indiquant un prénom et un nom invalides. Après génération, PHP m'indique bien une erreur au niveau du prénom, mais pas au niveau du nom ! Voici mon code :
 
     if(eregi("prenom",$champ) and eregi("nom",$champ))
           {
              if (!ereg("^[A-Za-z' -]{1,50}$",$valeur))
              {
                 $errors[] = "$valeur n'est pas valide.";
              }
           }
 
           Exemple : - prenom = Mathilde95'(*  
                            resultat = Mathilde95'(* n'est pas valide.
                         - nom = Durant78- _£  
                           resultat = RIEN !
                       
 
Je vous remercie d'avance pour les réponses que vous m'apporterez.

mood
Publicité
Posté le 14-05-2009 à 10:16:27  profilanswer
 

n°1884462
FlorentG
Unité de Masse
Posté le 14-05-2009 à 10:34:57  profilanswer
 

Laisse tomber les regexp dans les trois cas :D

 

Pour la liste des pays, j'imagine que tu l'as dans un tableau, ou quelque part ? Vaut mieux utiliser un tableau et in_array.

 

Pour la date de naissance, c'est pas cool de checker la taille des jours mois et années. Y'en a qui vont mettre juste deux chiffres pour l'année, il vaut mieux le gérer que de balancer une erreur.

 

Pour le nom et prenom, vaut mieux juste faire un trim et vérifier la longueur, pas les caractères dedans (surtout que ton truc là, je ne sais pas s'il gère correctement les caractères accentués).


Message édité par FlorentG le 14-05-2009 à 10:35:12

---------------
last.fmflickr
n°1884464
D_AmOn
Posté le 14-05-2009 à 10:41:37  profilanswer
 

Je te remercie pour ta réponse.
 
Pour la liste des pays, je fais appel a eux grâce à une fonction.
 
Sinon, je préfère travailler avec des regex, je début avec PHP je n'ai pas encore vu d'autres possibilités.
 
Je veux bien que tu me traduises tout ce que tu m'as dit en "code" lool

n°1884465
gelatine_v​elue
Posté le 14-05-2009 à 10:43:25  profilanswer
 

D_AmOn a écrit :

Bonjour,
 
Je viens vous demander votre aide, ayant quelques problèmes dans mon formulaire.
 
1. D'abord, j'ai fais une liste de sélection de plusieurs pays. Or, cette liste est très longue !
 
Je ne me vois pas faire :  
 
           if(eregi("pays",$champ))
           {
              if(!ereg("(France|Espagne|Italie|Grèce|Allemagne|Lituanie|Turquie|Finlande|...|...)",$valeur))
              {
                $errors[]="$valeur n'est pas un pays valide.";
              }
           }
... pour 50 pays ! Auriez-vous une solution svp ?
 


 
Fastoche. Mettre les noms des pays dans une liste et faire une boucle sur les pays en mettant un booléen à true si ça concorde. Si aucun concorde (booleen a false apres la boucle), erreur.
 

Citation :


2. Ensuite, l'internaute doit rentrer sa date de naissance. J'ai testé le code suivant, en indiquant une date invalide, mais après génération du script, il ne m'indique aucune erreur ! Je ne comprends pas....  
 
           if(eregi("dateNaissance",$champ))
           {
              if(!ereg("^([0-9]{2})/([0-9]{2})/([0-9]{4})$",$valeur, $date) and checkdate( $date[2], $date[1], $date[3] ) and $date[3] >= 1900)
              {
                 $errors[] = "$valeur n'est pas une date valide.";
              }
           }
 
           Exemple : dateNaissance = 53-487198.
                          resultat = RIEN !


 
J'en sais rien. As-tu vérifié ce qu'il y a dans $date et dans $valeur?
Le code suivant est correct et peut t'éclairer:

Code :
  1. if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
  2.     echo "$regs[3].$regs[2].$regs[1]";
  3. } else {
  4.     echo "Format de date invalide : $date";
  5. }


 
Ne serait-ce pas ereg et non pas !ereg?
 

Citation :


3. Enfin, j'ai fait exactement le même test que précédemment, mais cette fois si avec le champ "prenom" et le champ "nom", en indiquant un prénom et un nom invalides. Après génération, PHP m'indique bien une erreur au niveau du prénom, mais pas au niveau du nom ! Voici mon code :
 
     if(eregi("prenom",$champ) and eregi("nom",$champ))
           {
              if (!ereg("^[A-Za-z' -]{1,50}$",$valeur))
              {
                 $errors[] = "$valeur n'est pas valide.";
              }
           }
 
           Exemple : - prenom = Mathilde95'(*  
                            resultat = Mathilde95'(* n'est pas valide.
                         - nom = Durant78- _£  
                           resultat = RIEN !
                       
 
Je vous remercie d'avance pour les réponses que vous m'apporterez.


 
Je ne vois qu'une explication: $valeur est bien renseigné dans un cas  et pas dans l'autre. Et ne serait-ce pas ereg et non pas !ereg?

n°1884466
FlorentG
Unité de Masse
Posté le 14-05-2009 à 10:44:19  profilanswer
 

Déjà rien que le fait que t'appelle eregi pour le nom du champ [:pingouino] Déjà eregi c'est plus lent que preg_match, ensuite c'est un peu "overkill", suffit de faire :

Code :
  1. if($champ == 'pays')


Donc dégage eregi, et utilise PCRE (preg_match). Et n'en utilise pas pour de simple comparaisons de chaînes.
 


---------------
last.fmflickr
n°1884469
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 14-05-2009 à 10:45:46  profilanswer
 

la fonction in_array est beaucoup plus simple que la fonction regex, mais beaucoup moins puissante c'est sur aussi
in_array($mavaleur chercher,$montableau);


Message édité par infoman64 le 14-05-2009 à 10:47:25
n°1884492
D_AmOn
Posté le 14-05-2009 à 11:16:47  profilanswer
 

Merci pour vos réponses ; je vais tester tout ça et je reviens !

n°1885278
D_AmOn
Posté le 16-05-2009 à 18:10:01  profilanswer
 

gelatine_velue a écrit :


 
Fastoche. Mettre les noms des pays dans une liste et faire une boucle sur les pays en mettant un booléen à true si ça concorde. Si aucun concorde (booleen a false apres la boucle), erreur.
 

Citation :


2. Ensuite, l'internaute doit rentrer sa date de naissance. J'ai testé le code suivant, en indiquant une date invalide, mais après génération du script, il ne m'indique aucune erreur ! Je ne comprends pas....  
 
           if(eregi("dateNaissance",$champ))
           {
              if(!ereg("^([0-9]{2})/([0-9]{2})/([0-9]{4})$",$valeur, $date) and checkdate( $date[2], $date[1], $date[3] ) and $date[3] >= 1900)
              {
                 $errors[] = "$valeur n'est pas une date valide.";
              }
           }
 
           Exemple : dateNaissance = 53-487198.
                          resultat = RIEN !


 
J'en sais rien. As-tu vérifié ce qu'il y a dans $date et dans $valeur?
Le code suivant est correct et peut t'éclairer:

Code :
  1. if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
  2.     echo "$regs[3].$regs[2].$regs[1]";
  3. } else {
  4.     echo "Format de date invalide : $date";
  5. }


 
Ne serait-ce pas ereg et non pas !ereg?
 

Citation :


3. Enfin, j'ai fait exactement le même test que précédemment, mais cette fois si avec le champ "prenom" et le champ "nom", en indiquant un prénom et un nom invalides. Après génération, PHP m'indique bien une erreur au niveau du prénom, mais pas au niveau du nom ! Voici mon code :
 
     if(eregi("prenom",$champ) and eregi("nom",$champ))
           {
              if (!ereg("^[A-Za-z' -]{1,50}$",$valeur))
              {
                 $errors[] = "$valeur n'est pas valide.";
              }
           }
 
           Exemple : - prenom = Mathilde95'(*  
                            resultat = Mathilde95'(* n'est pas valide.
                         - nom = Durant78- _£  
                           resultat = RIEN !
                       
 
Je vous remercie d'avance pour les réponses que vous m'apporterez.


 
Je ne vois qu'une explication: $valeur est bien renseigné dans un cas  et pas dans l'autre. Et ne serait-ce pas ereg et non pas !ereg?


 
 
 
Pour mon problème sur les pays, pourrais-tu me faire un exemple de boucle ?

n°1885678
gelatine_v​elue
Posté le 18-05-2009 à 14:19:10  profilanswer
 

Code :
  1. $pays_trouve=false;
  2.      if(eregi("pays",$champ))
  3.     {
  4.        foreach ($liste_pays as $key=>$pays)
  5.        {
  6.      
  7.               if($pays == $valeur)
  8.               {
  9.                   $pays_trouve=true;
  10.               }
  11.        }
  12.     }
  13. if ($pays_trouve)
  14. // C'est ok
  15. else
  16. //Erreur


Message édité par gelatine_velue le 18-05-2009 à 14:19:48
n°1885701
macgawel
Posté le 18-05-2009 à 15:05:53  profilanswer
 

Pour les pays, je ne vois pas trop l'utilité d'une boucle...
1. Dans ton formulaire tu dois avoir une liste de choix avec les pays.
2. Tu récupères le champ pays, tu le sécurises, tu le formates bien (tout en minuscules, tout en majuscules, Majuscule sur la première lettre, ...)
3. Tu utlises les fonctions de PHP :

Code :
  1. /*TPays => Array contenant la liste des pays, $pays la variable Pays envoyée par le formulaire et traitée...
  2. in_array ($pays, $TPays) renvoie True si $pays est dans le tableau $TPays
  3. On pourrait aussi utiliser array_search ($pays, $TPays)
  4.   qui renvoie l'index de $pays s'il est dans $TPays, false sinon....
  5. */
  6. if ( !in_array ( $pays, $TPays )) {
  7.   //Traitement de l'erreur
  8.   echo "Pays inexistant";
  9. }
  10. else (


Pour les noms/prénoms, il faudrait tenir compte des accents, espaces et autres signes... j'aurais plutôt tendance à limiter les vérifications à la taille, et à sécuriser l'input...
 
Pour la date, tu as le choix :
1. Utiliser un "calendrier" en javascript (voir sur google). Dans ce cas, tu connais le format théorique de la date. Il te suffit de tester ce que tu récupères...
Par exemple, tu sais que tu récupères une date au format jj/mm/aaaa, il te suffit de faire :

Code :
  1. $Tdate = explode ('/', $madate);
  2. // checkdate est la fonction de base : elle te permet de vérifier que tu as bien une date
  3. // si tu fais des vérifications supplémentaires, tu pourrais le remplacer par une autre fonction..
  4. if (!checkdate($Tdate[1], $Tdate[0], $Tdate[2)) {
  5. // Gestion de l'erreur
  6. }
  7. else {
  8. // Eventuellement des tests supplémentaires...
  9. }


2. Prévoir trois champs : jour, mois et année.
- Tu récupères les trois valeur.
- Tu vérifies qu'elles sont bien numériques.
- Tu vérifies que ça forme une date valide.
 
3. Laisser l'utlisateur saisir ce qu'il veut.
Plus délicat : dans ce cas tu dois accepter JJ/MM/AA ou JJ-MM-AAAA (sans compter les risques de problèmes si tu as des anglo-saxons qui saisissent les dates au format MM/JJ/AAAA).
Le principe reste plu ou moins le même, en plus compliqué... Récupérer la valeur, vérifier que le format correspond à une date (trois nombres séparés par un séparateur), et ensuite vérifier qu'il s'agit d'une date.

mood
Publicité
Posté le 18-05-2009 à 15:05:53  profilanswer
 

n°1888366
D_AmOn
Posté le 27-05-2009 à 09:48:11  profilanswer
 

Désolé de ne répondre que maintenant, j'étais en vacances ^^
 
Je vais regarder tout ça, et je te dirai si j'ai réglé mon problème ou pas.

n°1889659
D_AmOn
Posté le 29-05-2009 à 19:03:47  profilanswer
 

Merci pour toutes vos réponses, ça m'a beaucoup aidé, j'ai réglé mes problèmes !!
 
Encore une fois merci !!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème vérification format champs

 

Sujets relatifs
probleme d'envoi de messageProbleme de type avec OCaml
[VB.Net Express 2008] Problème debugger[VBA] Problème double macro
Problème balise objectProblème service pilot
[VBA] Collage format dateProblème avec le système de Don Paypal
Lenteur formulaire avec de nombreux champsProblème d'importation de bdd
Plus de sujets relatifs à : Problème vérification format champs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR