Problème vérification format champs - PHP - Programmation
Marsh Posté le 14-05-2009 à 10:34:57
Laisse tomber les regexp dans les trois cas
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).
Marsh Posté le 14-05-2009 à 10:41:37
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
Marsh Posté le 14-05-2009 à 10:43:25
D_AmOn a écrit : Bonjour, |
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 : |
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 :
|
Ne serait-ce pas ereg et non pas !ereg?
Citation : |
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?
Marsh Posté le 14-05-2009 à 10:44:19
Déjà rien que le fait que t'appelle eregi pour le nom du champ Déjà eregi c'est plus lent que preg_match, ensuite c'est un peu "overkill", suffit de faire :
Code :
|
Donc dégage eregi, et utilise PCRE (preg_match). Et n'en utilise pas pour de simple comparaisons de chaînes.
Marsh Posté le 14-05-2009 à 10:45:46
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);
Marsh Posté le 14-05-2009 à 11:16:47
Merci pour vos réponses ; je vais tester tout ça et je reviens !
Marsh Posté le 16-05-2009 à 18:10:01
gelatine_velue a écrit :
|
Pour mon problème sur les pays, pourrais-tu me faire un exemple de boucle ?
Marsh Posté le 18-05-2009 à 14:19:10
Code :
|
Marsh Posté le 18-05-2009 à 15:05:53
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 :
|
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 :
|
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.
Marsh Posté le 27-05-2009 à 09:48:11
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.
Marsh Posté le 29-05-2009 à 19:03:47
Merci pour toutes vos réponses, ça m'a beaucoup aidé, j'ai réglé mes problèmes !!
Encore une fois merci !!
Marsh Posté le 14-05-2009 à 10:16:27
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.