problème erreurs formulaire

Eléphant du PHP | 100 Messages

12 mars 2012, 11:59

Bonjour,

J'ai fais un formulaire qui fonctionne mais pas comme je veux, je déclarer un tableau $errors = array() et ensuite je met toutes mes erreurs dedans sauf que quoi qu'il arrive si je fait un var_dump de $errors['mail']
alors que le champ est vide il y a rien dedans et du coup l'erreur s'affiche pas où je veux, je ne comprend pas pourquoi cela ne fonctionnne pas ?

Voilà le bout de code qui check (dans ce fichier j'inclu le fichier où il y a mes fonctions pour les erreurs ):

Code : Tout sélectionner

else if($action == 'inscription') { if(isset($_POST['inscription'])) { $errors = array(); if(isset($_POST['mail'])) { $errors['mail'] = errorEmail($_POST['mail']); var_dump($errors['mail']); $email = $_POST['mail']; } if(isset($_POST['login'])) { $errors['login'] = errorLogin($_POST['login']); $login = $_POST['login']; } if(isset($_POST['pass'])) { $errors['pass'] = errorPass($_POST['pass']); $pass = $_POST['pass']; } if(isset($_POST['passverif']) && isset($_POST['pass'])) { $errors['passverif'] = errorPassverif($_POST['passverif'], $_POST['pass']); $passverif = $_POST['passverif']; }
Voilà une fonction qui check les erreurs :

Code : Tout sélectionner

function errorEmail($donnee) { if(empty($donnee)) { $message = putMessage("Veuillez indiquer votre adresse email"); return $message; } elseif(!preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#', $donnee)) { $message = putMessage("Votre adresse email n'est pas valide"); return $message; } }
Et voilà ce qui se passe niveau formulaire :

Code : Tout sélectionner

<tr> <td> Mail : </td> <td> <?php if(isset($mail)) echo '<input type="text" name="mail" value="'.htmlentities($mail).'" />'; else echo '<input type="text" name="mail" />'; if(!empty($errors['mail'])) echo $errors['mail']; ?> </td> </tr>
Cordialement,

Mammouth du PHP | 2278 Messages

12 mars 2012, 12:32

Dans un premier temps, je commente juste la fonction function errorEmail($donnee).
Si elle fonctionne correctement, il faudra analyser l'autre partie du code.
Bonjour,

J'ai fait un formulaire qui fonctionne mais pas comme je veux, je déclare un tableau $errors = array() et ensuite je mets toutes mes erreurs dedans sauf que, quoi qu'il arrive, si je fais un var_dump de $errors['mail']
alors que le champ est vide il y a rien dedans et du coup l'erreur ne s'affiche pas où je veux, je ne comprends pas pourquoi cela ne fonctionnne pas ?

Voilà le bout de code qui check (dans ce fichier j'inclus le fichier où il y a mes fonctions pour les erreurs ):

Code : Tout sélectionner

else if($action == 'inscription') { if(isset($_POST['inscription'])) { $errors = array(); if(isset($_POST['mail'])) { $errors['mail'] = errorEmail($_POST['mail']); var_dump($errors['mail']); $email = $_POST['mail']; } if(isset($_POST['login'])) { $errors['login'] = errorLogin($_POST['login']); $login = $_POST['login']; } if(isset($_POST['pass'])) { $errors['pass'] = errorPass($_POST['pass']); $pass = $_POST['pass']; } if(isset($_POST['passverif']) && isset($_POST['pass'])) { $errors['passverif'] = errorPassverif($_POST['passverif'], $_POST['pass']); $passverif = $_POST['passverif']; }
_____________________________________________________________
Voilà une fonction qui check les erreurs :

Code : Tout sélectionner

function errorEmail($donnee) { // à tout hasard print "<br> donnee $donnee"; // ajout pour que message ait toujours une valeur $message = ""; if(empty($donnee)) { // si donnee est correcte et vide ajouter //print "<br>on est dans le premier if "; $message = putMessage("Veuillez indiquer votre adresse email"); // return $message; } elseif(!preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#', $donnee))// preg_match retourne un entier { // si donnee n'est pas vide mais n'est pas un email valide ajouter print "on est dans le elseif"; $message = putMessage("Votre adresse email n'est pas valide"); // return $message; } // vérification print "<br>le message est $message"; // algorithmiquement, il est meilleur d'avoir un seul point de sortie return $message; } _________________________________________________________________
Et voilà ce qui se passe niveau formulaire :

Code : Tout sélectionner

<tr> <td> Mail : </td> <td> <?php if(isset($mail)) echo '<input type="text" name="mail" value="'.htmlentities($mail).'" />'; else echo '<input type="text" name="mail" />'; if(!empty($errors['mail'])) echo $errors['mail']; ?> </td> </tr>
Cordialement,
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 100 Messages

12 mars 2012, 12:40

je viens de retester la fonction tout est ok, elle fonctionne parfaitement et le truc c'est que j'ai limpression que le reste du code fonctionne aussi car les erreurs sont bien gérées tout fonctionne nikel c'est juste que le tableau des erreurs est vide et sa je comprend vraiment pas.

Cordialement,

Eléphant du PHP | 209 Messages

12 mars 2012, 12:43

Salut,

Que fais ta fonction putMessage ? Elle fait pas directement un echo par hasard ? :roll:

++

Eléphant du PHP | 100 Messages

12 mars 2012, 12:46

euhh enfaite si elle fait un echo,

Code : Tout sélectionner

<?php function putMessage($problem) { echo("<br /><strong style='color:red'>".$problem."</strong>"); } ?>

Eléphant du PHP | 209 Messages

12 mars 2012, 12:49

Du coup, tu ne stockes pas dans ton tableau car tu ne retournes rien mais tu affiches dès que tu appelles ta fonction.

Il faut que tu utilises un return ;)

Eléphant du PHP | 100 Messages

12 mars 2012, 12:54

Effectivement le problème venait bien de là, je viens de refaire mes fonctions avec des return et la sa fonctionne sans problème.

merci beaucoup de votre coup de main rapide et efficace.

Cordialement,