cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 18 févr. 2008 à 22:02
(empty($_POST[$value]) && $_POST[$value] != '0')
Ici tu regarde si il y a quelque chose dans le POST, et ensuite si il est pas égale au string '0', pourquoi faire ?
En plus tu vérifie pas si isset, ça va vite générer des notices pour ceux qui développe strict (comme tous les devs devraient faire)
# if(empty($_POST[$value]) && $_POST[$value] != '0'){// si la valeur de poste est vide alors on l'ajoute aux erreurs
# $errors[] = $value;
# }
Remplacer par
# if(!isset($_POST[$value]) || trim($_POST[$value]) === ''){// si la valeur de poste est vide alors on l'ajoute aux erreurs
# $errors[] = $value;
# }
Me semble beaucoup plus juste...
Ce qui va vérifier si elle est setter, si c'est pas le cas on arrête la et on ajoute une erreur, sinon on voit si elle contient quelque chose, si c'est pas le cas on ajoute une erreur...
bref je vois pas trop l'utilité d'un tel code, mais bon tant qu'à le faire, aussi bien le faire correctement...
cs_choy
Messages postés30Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention18 juillet 2019 18 févr. 2008 à 14:07
Oui, mais là tu part du principe que j'attend forcément quelque chose de mes champs, qu'un tel soit email, un autre nombre, un autre url... mais dans le cas de champs obligatoire mais pas forcément spéciaux ça devient utile de tester si elle est remplie ou non et seulement ça.
cs_Tartuffe
Messages postés39Date d'inscriptionjeudi 27 mai 2004StatutMembreDernière intervention18 février 20083 18 févr. 2008 à 13:50
... c'est bien ce que je disais ^^
Ne cherche pas à savoir s'il est rempli ou non, cherche tout de suite à savoir s'il contient les valeurs attendues, ca t'évitera les pbs comme ca : "je teste si la var est empty puis si elle est différente de zéro car zéro".
Après plus de souci. Et pour "Ca évite de se retaper les if(empty()) de chaque champs...", rien ne t'empêche de faire un fonction de test, avec les param Min et Max, et hop !
cs_choy
Messages postés30Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention18 juillet 2019 18 févr. 2008 à 13:44
Tartuffe> Attention, il ne s'agissait pas ici d'un script pour s'assurer que les valeurs entrées correspondent à celles souhaitées (par ex. qu'un champs âge soit bien composé de chiffres uniquement) mais juste de savoir si elles sont remplies.
Ca a une utilités limités certes mais c'est une opération qui revient souvent. Ca évite de se retaper les if(empty()) de chaque champs quand on crée un nouveau script, là il suffit de remplir le tableau.
Yoman64> Je comprend pas tout, je teste si la var est empty puis si elle est différente de zéro car zéro est considéré comme empty alors que ça peut être une valeur valide (merci à codefalse et malalam). Donc un string vide n'est pas égal à un string '0' mais empty renverra true pour les deux alors il faut faire la différence.
Sinon j'ai beaucoup vu de script pour vérifier qu'un mail était un mail, qu'une date est bien une date... beaucoup sont bancales, beaucoup sont inadaptable, et je n'en ai pas vu dont le but est la vérification du remplissage.
cs_Tartuffe
Messages postés39Date d'inscriptionjeudi 27 mai 2004StatutMembreDernière intervention18 février 20083 18 févr. 2008 à 09:40
LE problème de vérification des formulaires, c'est qu'il ne peut pas être automatisé avec seulement un test ISSET, car rapidement il est SET (d'autant si tu testes les valeurs retour et que tu ré-affiches dans les champs les valeurs envoyées, même les fausses avec un message d'erreur à l'utilisateur...).
Le test doit être fait sur la valeur, qui elle est 'unique' pour chaque champ puisqu'elle doit être ET significative ET stockable (en BdD)...
C'est donc un ISSET + TESTS aux limites (a minima sur TRIM($_post['monchamp']) pour éviter les malins qui mettent des espaces...) qui eux restent propriétaire de l'application.
Explication par l'exemple :
- les enfants de malalan, c'est >-1 et <10 (de 0 à 9) (et 9 c'est vraiment beaucoup, mais aux limites, ca existe...)
- un titre, c'est inférieur au MAX de bdD, mais pour être significatif tu peux vouloir lui imposer un mini, donc c'est >5 et inférieur à 126 (max BdD =125)
- un choix de liste déroulant (0= sélectionnez), c'est >0 et <(X+1) (le dernier choix !).
- un texte libre (area) comme le titre, mais avec un signifiant plus important (>10...)
Bref, les vérif de formulaire ca me fait rire, car c'est forcément un truc perso qui colle à l'appli, donc aux spécif, donc au 'métier' pour laquelle (et lesquels) elle a (et ils ont) été réalisé.
CE N'EST PAS GENERALISABLE !
Maintenant tu peux appliquer 2 politiques :
- l'exploitant / chercheur : mieux vaut ne rien avoir en bdd qu'une info non-exploitable !
- commerciale : on prends tout et les exploitants se démerderont...
Les tests et les variables obligatoires pour enregistrement seront fait en conséquence, bref, selon l'appli, les spéc, la demande, le métier, la demande initiale qui fait que tu réalises un formulaire , koi ^^
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 17 févr. 2008 à 20:36
Tu n'as jamais vu de code de ce genre ? tu n'As pas d'u chercher bien loin ;) http://www.phpcs.com/recherche.aspx?r=verifier+formulaire et comme dit plus haut vraiment étrange de comparer si !'0' .. O.o je vois mal comment un string vide peut être égale à un string '0' mais bon je me trompe peut être mais $_POST[''] '' est plus juste...
cs_morpheus57
Messages postés121Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention30 décembre 2010 17 févr. 2008 à 16:18
Oui ou alors
if (isset($_POST['value']) && trim($_POST['value'])!='')
divx78340
Messages postés11Date d'inscriptionjeudi 14 février 2008StatutMembreDernière intervention15 février 2008 15 févr. 2008 à 20:47
Normalement oui
cs_choy
Messages postés30Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention18 juillet 2019 15 févr. 2008 à 19:00
aaah ok ok, autant pour moi en effet je pensai à l'autre test. Faut m'excuser, ma semaine de taff m'est montée à la tête ^^.
oki, je vois bien le probleme, alors comment le régler ?
un if(empty($_POST['value']) && $_POST['value'] != '0') devrait faire l'affaire nan ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 15 févr. 2008 à 18:51
Je crois que tu n'as pas compris la remarque de codefalse : si je saisis 0 dans un champ de formulaire, ce doit être considéré comme une valeur, et justement pas comme un champ vide.
Exemple : Combien avez-vous d'enfants (réponse obligatoire). Ton code va prétendre que je n'ai pas répondu si je mets que j'ai 0 enfant.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 15 févr. 2008 à 18:50
Hello,
"lol alors je changerai ça dans un souci de propreté ^^ mais ça marche ici :p"
Hmm..nous sommes sur des données de formulaire, donc des chaînes.
or empty('0') renverra true avec toute version de php >= 4
Alors à moins que tu bosses avec une version de PHP3...je vois mal comment ça peut renvoyer false chez toi?
Pour ta question, ce ne sera soit la deuxième, soit if(!empty($errors)) {}
cs_choy
Messages postés30Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention18 juillet 2019 15 févr. 2008 à 18:44
bah en fait j'aime bien ton lien ^^ :
Retourne FALSE si var a une valeur non-vide et différente de zéro.
Ce qui suit est considéré comme étant vide :
"" (une chaîne vide)
0 (0 en tant qu'entier) <---------- :D
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
var $var; (une variable déclarée, mais sans valeur dans une classe)
cs_choy
Messages postés30Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention18 juillet 2019 15 févr. 2008 à 18:33
lol alors je changerai ça dans un souci de propreté ^^ mais ça marche ici :p
Alors question, vaut il mieux que je fasse un if(count(array)>0) ou alors que je saute la déclaration de l'array et que je fasse un if(isset(array)) ?
les deux marchent mais est-ce bien propre ?
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 15 févr. 2008 à 18:09
php.net/empty
c'est la doc qui le dit :p
cs_choy
Messages postés30Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention18 juillet 2019 15 févr. 2008 à 16:45
As tu testé ? car je sais qu'en actionscript ça renvoi false donc j'ai testé avec php et chez moi (MAMP sur leopard) ça marche.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 15 févr. 2008 à 15:35
Une remarque : 0 n'est pas vide, or empty (0) retourne true :p
18 févr. 2008 à 22:02
Ici tu regarde si il y a quelque chose dans le POST, et ensuite si il est pas égale au string '0', pourquoi faire ?
En plus tu vérifie pas si isset, ça va vite générer des notices pour ceux qui développe strict (comme tous les devs devraient faire)
# if(empty($_POST[$value]) && $_POST[$value] != '0'){// si la valeur de poste est vide alors on l'ajoute aux erreurs
# $errors[] = $value;
# }
Remplacer par
# if(!isset($_POST[$value]) || trim($_POST[$value]) === ''){// si la valeur de poste est vide alors on l'ajoute aux erreurs
# $errors[] = $value;
# }
Me semble beaucoup plus juste...
Ce qui va vérifier si elle est setter, si c'est pas le cas on arrête la et on ajoute une erreur, sinon on voit si elle contient quelque chose, si c'est pas le cas on ajoute une erreur...
bref je vois pas trop l'utilité d'un tel code, mais bon tant qu'à le faire, aussi bien le faire correctement...
18 févr. 2008 à 14:07
18 févr. 2008 à 13:50
Ne cherche pas à savoir s'il est rempli ou non, cherche tout de suite à savoir s'il contient les valeurs attendues, ca t'évitera les pbs comme ca : "je teste si la var est empty puis si elle est différente de zéro car zéro".
Après plus de souci. Et pour "Ca évite de se retaper les if(empty()) de chaque champs...", rien ne t'empêche de faire un fonction de test, avec les param Min et Max, et hop !
18 févr. 2008 à 13:44
Ca a une utilités limités certes mais c'est une opération qui revient souvent. Ca évite de se retaper les if(empty()) de chaque champs quand on crée un nouveau script, là il suffit de remplir le tableau.
Yoman64> Je comprend pas tout, je teste si la var est empty puis si elle est différente de zéro car zéro est considéré comme empty alors que ça peut être une valeur valide (merci à codefalse et malalam). Donc un string vide n'est pas égal à un string '0' mais empty renverra true pour les deux alors il faut faire la différence.
Sinon j'ai beaucoup vu de script pour vérifier qu'un mail était un mail, qu'une date est bien une date... beaucoup sont bancales, beaucoup sont inadaptable, et je n'en ai pas vu dont le but est la vérification du remplissage.
18 févr. 2008 à 09:40
Le test doit être fait sur la valeur, qui elle est 'unique' pour chaque champ puisqu'elle doit être ET significative ET stockable (en BdD)...
C'est donc un ISSET + TESTS aux limites (a minima sur TRIM($_post['monchamp']) pour éviter les malins qui mettent des espaces...) qui eux restent propriétaire de l'application.
Explication par l'exemple :
- les enfants de malalan, c'est >-1 et <10 (de 0 à 9) (et 9 c'est vraiment beaucoup, mais aux limites, ca existe...)
- un titre, c'est inférieur au MAX de bdD, mais pour être significatif tu peux vouloir lui imposer un mini, donc c'est >5 et inférieur à 126 (max BdD =125)
- un choix de liste déroulant (0= sélectionnez), c'est >0 et <(X+1) (le dernier choix !).
- un texte libre (area) comme le titre, mais avec un signifiant plus important (>10...)
Bref, les vérif de formulaire ca me fait rire, car c'est forcément un truc perso qui colle à l'appli, donc aux spécif, donc au 'métier' pour laquelle (et lesquels) elle a (et ils ont) été réalisé.
CE N'EST PAS GENERALISABLE !
Maintenant tu peux appliquer 2 politiques :
- l'exploitant / chercheur : mieux vaut ne rien avoir en bdd qu'une info non-exploitable !
- commerciale : on prends tout et les exploitants se démerderont...
Les tests et les variables obligatoires pour enregistrement seront fait en conséquence, bref, selon l'appli, les spéc, la demande, le métier, la demande initiale qui fait que tu réalises un formulaire , koi ^^
17 févr. 2008 à 20:36
et comme dit plus haut vraiment étrange de comparer si !'0' .. O.o je vois mal comment un string vide peut être égale à un string '0' mais bon je me trompe peut être mais $_POST[''] '' est plus juste...
17 févr. 2008 à 16:18
if (isset($_POST['value']) && trim($_POST['value'])!='')
15 févr. 2008 à 20:47
15 févr. 2008 à 19:00
oki, je vois bien le probleme, alors comment le régler ?
un if(empty($_POST['value']) && $_POST['value'] != '0') devrait faire l'affaire nan ?
15 févr. 2008 à 18:51
Exemple : Combien avez-vous d'enfants (réponse obligatoire). Ton code va prétendre que je n'ai pas répondu si je mets que j'ai 0 enfant.
15 févr. 2008 à 18:50
"lol alors je changerai ça dans un souci de propreté ^^ mais ça marche ici :p"
Hmm..nous sommes sur des données de formulaire, donc des chaînes.
or empty('0') renverra true avec toute version de php >= 4
Alors à moins que tu bosses avec une version de PHP3...je vois mal comment ça peut renvoyer false chez toi?
Pour ta question, ce ne sera soit la deuxième, soit if(!empty($errors)) {}
15 févr. 2008 à 18:44
Retourne FALSE si var a une valeur non-vide et différente de zéro.
Ce qui suit est considéré comme étant vide :
"" (une chaîne vide)
0 (0 en tant qu'entier) <---------- :D
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
var $var; (une variable déclarée, mais sans valeur dans une classe)
15 févr. 2008 à 18:33
Alors question, vaut il mieux que je fasse un if(count(array)>0) ou alors que je saute la déclaration de l'array et que je fasse un if(isset(array)) ?
les deux marchent mais est-ce bien propre ?
15 févr. 2008 à 18:09
c'est la doc qui le dit :p
15 févr. 2008 à 16:45
15 févr. 2008 à 15:35