Traiter les erreurs d'un formulaire d'un seul coup

Jonathan
Invité n'ayant pas de compte PHPfrance

13 août 2010, 00:49

Bonjour,
Alors voila, j'essaie de faire quelque chose qui peut paraître simple mais j'ai l'impression de m'être compliqué la tâche.
En effet, le résultat fonctionne mais la programmation ne me convient pas.

Le but est de traiter les erreurs de mon formulaire (champs vides ou mal renseignés) d'un seul coup, s'il y a plusieurs informations manquantes, je veux afficher la liste de ce style :

Erreur :
- pseudo manquant
- titre manquant
etc.

Voici mon code :
http://pastebin.com/FtB2LFXW

Pourquoi avoir fait comme ça ? Car j'ai un problème avec le <br />. En effet, les erreurs sont affichées dans un cadre rouge, je ne peux donc pas mettre un <br /> systématique à chaque ligne car si il n'y a rien après, cela va créer un espace vide pour rien, si vous voyez ce que je veux dire. Cela rend très moche. En faite a chaque apparition d'une erreur, cela teste si juste avant il y a une erreur, pour savoir si oui ou non il faut mettre un <br />.

Donc voila j'aurais aimé savoir comment améliorer mon script, car là c'est vraiment une méthode barbare que j'ai fais,... Si quelqu'un a des idées ou des fonctions simples permettant de gérer facilement cela, car moi je débute et je suis vraiment en galère.

Merci d'avance, en espérant que mon machin soit pas trop catastrophique !

Jonathan
Invité n'ayant pas de compte PHPfrance

13 août 2010, 00:51

Pourquoi avoir fait comme ça ? Car j'ai un problème avec le < br >
pour savoir si oui ou non il faut mettre un < br >
Désolé, je pensais pas que les balises html seraient prises en compte sur ce forum.

ViPHP
ViPHP | 5462 Messages

13 août 2010, 01:06

coté php tu peux t'orienter vers filter_input_array

Jonathan
Invité n'ayant pas de compte PHPfrance

13 août 2010, 01:22

Bonsoir,

Merci de votre réponse.

J'ai regardé et testé le lien que vous m'avez donné, mais j'ai bien peur que cela soit trop compliqué pour moi. Êtes-vous sûr(e) que cela correspond à ce que je cherche à la base ? Car je ne vois pas comment m'en servir et à quoi ça sert en faite :O.

Mais j'ai bien peur que ce ne soit vraiment pas de mon niveau cette fonction en tout cas, j'ai tellement de choses à apprendre encore, mais débuter par un truc comme ça, cela me met un coup de massue :O

ViPHP
ViPHP | 5462 Messages

13 août 2010, 01:29

sinon tu boucle sur ton $_POST avec un foreach si la valeur est vide tu rajoutes un phrase, mais faut bien comprendre que la gestion de formulaire c'est toujours fastidieux a faire, le filter_input permet de tous géré d'un seul coup (valeur vide ou incorrect) suivant les règle qu'on définit (exemple : login de 6 de caractère, email valide, mot de passe qui contient au moins 1 chiffre)

pour le filter_input_array, tu soumets chaques valeurs un filtre qui rend sois la valeur elle meme si c'est bon sois null ou false, apres y'a juste a teser si $_POST est égale au tableau filtré, si c'est le cas c'est ok

ViPHP
ViPHP | 1996 Messages

15 août 2010, 21:04

Salut,

Je te conseille d'utiliser les sessions pour cela. Tu tests tes variables en vérifiant tes données. Tu mets tous tes données vérifiées et fausses dans une variables de sessions en format tableau. si cette variable se remplie (si elle n'est pas vide) tu retournes vers ton formulaire avec la fonction header.
Dans ton formulaire tu tests si l'input est présent ou pas dans la variable de session et si elle est présente => coloration rouge?

Ce qui donne page1.php :
<?php
session_start();
if (!isset($_SESSION["retour_formulaire"]))
   $_SESSION["retour_formulaire"] = array();
$style_red = "style='border: 1px solid red; color: red; font-weight: bold;'";
$style_black = "style='border: 1px solid tranparent; color: #000; font-weight: normal;'";

?>
<form method="post" action="page2.php">
<input type="text" name="nom" <?php echo (in_array("nom",$_SESSION["retour_formulaire"])) ? $style_red : '$style_black'; ?> />
<input type="text" name="prenom" <?php echo (in_array("prenom",$_SESSION["retour_formulaire"])) ? $style_red : '$style_black'; ?> />
<input type="text" name="pouetpouet" <?php echo (in_array("pouetpouet",$_SESSION["retour_formulaire"])) ? $style_red : '$style_black'; ?> />
<?php
//on "efface"  la variable de session $_SESSION["retour_formulaire"]
$_SESSION["retour_formulaire"] = array();
?>
<input type="submit" value="envoyer" />
</form>
page2.php
<?php
session_start();
$_SESSION["retour_formulaire"] = array();
$tab_autorise = array ("nom", "prenom", "pouetpouet");
if (isset($_POST) && !empty($_POST))
{
    foreach ($tab_autorise as $cle)
    {
       if (!array_keys($_POST,$cle) or empty($_POST[$cle])
          $_SESSION["retour_formulaire"][] = $cle;      
    }
}
else
$_SESSION["retour_formulaire"] = $tab_autorise;

if (!empty($_SESSION["retour_formulaire"]))
{
header ("location: page1.php");
die();
}
exit;
?>
Bon cela reste un exemple mais j'espère que tu comprendras...
Modifié en dernier par Aureusms le 16 août 2010, 11:40, modifié 1 fois.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

16 août 2010, 01:02

Bonsoir,

Merci de votre réponse. En effet, cette méthode me paraît plus simple.
J'ai testé, et que le champs soit vide ou plein, il apparait tout de même en rouge. J'ai essayé de le débuguer moi-même mais je n'ai visiblement pas assez d'expérience, je ne suis arrivé à rien de concluant.

Si j'ai bien compris,
echo (in_array("pouetpouet",$_SESSION["retour_formulaire"])) ? $style : '';
C'est la même chose que
if(in_array("pouetpouet", $_SESSION["retour_formulaire"]){ echo $style; } else { } 
?

Je ne connaissais pas cette syntaxe avec le point d'interrogation suivi de la variable puis de : ''.

Merci,

ViPHP
ViPHP | 1996 Messages

16 août 2010, 10:23

Slt,

Oui c'est tout à fait cela.
Désolé, je ne m'étais pas rendu compte. Je l'emploi maintenant naturellement tellement c'est simple.
On appelle cela les opérateurs ternaires : faq-tutoriels/expr1-expr2-expr3-operate ... 14111.html.

Si tout apparait en rouge (même si je n'ai pas ton code), il se peut que que la variable retournée renvoie TRUE. POur vérifier affiche la valeur de Session par :
echo '<pre>'; print_r ($_SESSION["retour_formulaire"]); echo '</pre>';
Tu as aussi la version moderne :
echo '<pre>'; var_dump ($_SESSION["retour_formulaire"]); echo '</pre>';
Mais bon les deux fonctions te donnent la même chose même si var_dump est plus complet. Les balises HTML <pre></pre> te permettent juste de faire un affichage avec saut de ligne. Plus pratiques, elles restent optionnelles.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

16 août 2010, 11:24

Bonjour,

Merci de votre réponse.

Concernant le code de mes pages, j'ai juste fais une page page1.php et une page page2.php avec les contenus donnés précédemment juste pour voir comment ça fonctionne et comment l'intégrer à mes pages. (j'ai juste rajouté le bouton submit qui était manquant). Mais en faisant mes tests, que les champs soient remplis ou non, ils apparaissent tous en rouge.

Je testerais l'affichage de la session quand je pourrais (impossible actuellement) mais je tenais tout de même à répondre pour vous remercier.

Effectivement j'ai encore beaucoup de choses à apprendre mais tout cela m'intéresse fortement. Pour afficher une variable j'utilisais echo et non print_r, var_dump, .... :p

Je dois être de la vieille école ! :P

Merci encore, et je vous tiens au courant.

Bonne journée.

ViPHP
ViPHP | 1996 Messages

16 août 2010, 11:40

J'ai fais quelques modifs...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr