a remplacer parCode:$error = $e->message;
Code:$error = $e->getMessage()
Version imprimable
a remplacer parCode:$error = $e->message;
Code:$error = $e->getMessage()
apres plusieur test je peut dire que ca fonctionne pas mal
le seul truc c'est si je met
ca me retourne une true alors que c'est un champs qui n'est pas obligatoireCode:
1
2 $verif_rue_maccess = Mols_Verif_Form('#^[a-z0-9 ]+$#i', false, $rue_maccess, $rue_maccess); $erreur .= $verif_rue_maccess;
et pour les champs password
quoi que je fasseCode:
1
2
3
4
5
6
7 $verif_pwd_maccess = Mols_Verif_Form('#^[a-z0-9]+$#i', true, $pwd_maccess, $pwd_maccess); $erreur .= $verif_pwd_maccess; echo $verif_pwd_maccess; $verif_confirmation_pwd_maccess = Mols_Verif_Form('#^[a-z0-9]+$#i', true, $confirmation_pwd_maccess, $confirmation_pwd_maccess); $erreur .= $verif_confirmation_pwd_maccess;
ex : mon*mot-depasse/
ba ca me retourne la valeur comme si il n'y avais eu aucun test.
Merci encore bcp ..
Il nous manque la version actuelle de ta fonction.
Cela me dérange un peu de faire un try d'un throw explicite... Je n'en vois pas l'intérêt :/
Tu peux avoir le même résultat (gestion d'erreurs) avec un if/else classique.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 function Mols_Verif_Form($regex, $forced, $content, $error=NULL) { // Par défaut la valeur de retour est le contenu lui même $return = $content; // On va essayer plusieurs tests. try { if( empty($content) && $forced ) throw new Exception('Variable Vide'); if( ! preg_match($regex, $content) ) throw new Exception('Ne correspond pas'); } // Si on capture une erreur catch(Exception $e) { // La valeur de retour sera alors TRUE $return = TRUE; $error = $e->getMessage(); } return $return; }
Note que le paramètre $error n'est pas en entrée-sortie donc tu n'auras jamais de retour à ce niveau.
Si tu as un gestionnaire d'exceptions, alors il est possible que tu ne voies pas de problème en effet.
j'ai mis un try catch d'un throw explicite pour eviter d'avoir 3 ou 4 niveau de if ou d'etre obligé de faire 50 return dans une fonction.
Une fonction possède 1 entrée et 1 sortie.
Pour ce qui est du "$error", je te rappel mon cher Responsable PHP que php5 passe les parametres en référence et non en copie (contrairement à php4) donc $error est en entrée autant qu'en sortie.
Pour ce qui est du "variable forcée", remplace
parCode:if( ! preg_match($regex, $content) )
Tu dit que pour le mot de passe par exemple, il ne te fait aucune vérification ? avec la regexCode:if( ! preg_match($regex, $content) && $forced )
et en mot de passeCode:#[a-z]+#
il te retourne pas d'erreur ?Code:toto674959-_-/
Et désolé pour le $e->message, je sais pas ce que j'ai parfois j'enchaine les boulettes ^^
Pour mon cher Yogui, compare ces 2 codes et dit moi lequel est le plus propre à ton avis
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 if( !empty($variable) ) { if( ! strpos('@', $variable) ) { if( preg_match('#^[a-z0-9]+$#i', $variable) ) { if( !empty($tableau[$variable) ) { echo($tableau[$variable]); } else { echo('erreur indice tableau invalide'); } } else { echo('erreur alphanumérique non respecté'); } } else { echo('erreur arobase'); } } else { echo('erreur variable vide'); }
Pour ma part je trouve le premier un peu trop... paysage de montagne... Je préfaire la plaine du second...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 try { if( empty($variable) ) { throw new Exception('erreur variable vide'); } if( strpos('@', $variable) ) { throw new Exception('erreur arobase'); } if( !preg_match('#^[a-z0-9]+$#i', $variable) ) { throw new Exception('erreur alphanumérique non respecté'); } if( empty($tableau[$variable) ) { throw new Exception('erreur indice tableau invalide'); } echo($tableau[$variable]); } catch(Exception $e) { echo( $e->getMessage() ) }
Regardes ce code :Citation:
Pour ce qui est du "$error", je te rappel que php5 passe les parametres en référence et non en copie (contrairement à php4) donc $error est en entrée autant qu'en sortie.
ca donneCode:
1
2
3
4
5
6
7
8
9
10
11 <?php function test($inparam) { $inparam = 4; } $test = 2; echo "Test avant : $test <br/>"; test($test); echo "Test apres : $test"; ?>
Citation:
Test avant : 2
Test apres : 2
Les objets sont passés en référence depuis PHP5, mais pas toutes les variables... Merci pour la démo koopajah :ccool:
Sinon en effet, c'est intéressant comme technique mais si le développeur a mis en place une gestion automatique des exceptions, ton système tombe à l'eau.
Je comprends pas pourquoi la? Le gestionnaire qui catche l'exception c'est de toute facon le tout premier catch() rencontré, donc quel que soit le système d'exception placé a plus haut niveau ca n'interferera pas du tout avec ces exceptions là.
D'ailleurs Korko Fain tu pourrais meme te faire ta propre classe d'exception qui serait capable de stocker le pattern utilisé a ce moment la, la chaine surlaquelle le pattern était appliqué, faire des logs, etc etc. Ca te permettrait en plus de ne catcher QUE les exceptions que tu as définie sans toucher aux autres (ce dont parle peut etre Yogui?)
Oui non rien, je me suis embrouillé tout seul.
ca fonctionne presque nikel
sauf que lorsque je met
fCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 unction Mols_Verif_Form($regex, $forced, $content, $error=NULL) { // Par défaut la valeur de retour est le contenu lui même $return = $content; // On va essayer plusieurs tests. try { if( empty($content) && $forced ) throw new Exception('Variable Vide'); if( ! preg_match($regex, $content) && $forced ) throw new Exception('Ne correspond pas'); } // Si on capture une erreur catch(Exception $e) { // La valeur de retour sera alors TRUE $return = TRUE; $error = $e->getMessage(); } return $return; }
et que $prenom_maccess = 'dsfsdfdsàfds-/dsf';Code:
1
2 $verif_prenom_maccess = Mols_Verif_Form('#^[a-z]+$#i', false, $prenom_maccess, $prenom_maccess); $erreur .= $verif_prenom_maccess;
ca ne me retroune pas d'erreur
Dsl et encore merci
Sinon vous m'avez l'air d'etre des bon ouf, j'ai du mal a tout comprendre ce que vous avez mis mais bon
en tous cas mille merci
tu as mis forced à false ^^
Oui bon ok juste les objets alors ^^
Bon alors juste devant ça :
Mais alors juste devant tu rajoute unCode:$error=NULL
&
Ce qui te donne
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 function Mols_Verif_Form($regex, $forced, $content, &$error=NULL) { // Par défaut la valeur de retour est le contenu lui même $return = $content; // On va essayer plusieurs tests. try { if( empty($content) && $forced ) throw new Exception('Variable Vide'); if( ! preg_match($regex, $content) && $forced ) throw new Exception('Ne correspond pas'); } // Si on capture une erreur catch(Exception $e) { // La valeur de retour sera alors TRUE $return = TRUE; $error = $e->getMessage(); } return $return; }
ca ne change rien :-//
il passe a l'as en faisant $prenom = 'fdsfdsé"')à';
en ete a false
sinon en true y'a pas de prob
Merci les gars pour votre aide