Réafficher les infos saisies dans un formulaire

jeanmi
Invité n'ayant pas de compte PHPfrance

23 janv. 2008, 10:46

Bonjour,

J'ai un formulaire lié a un script PHP permettant d'envoyer les infos saisies par mail. Certains champs du formulaires sont obligatoires et s'il manque des infos, une page d'erreur est affichée demandant de saisir les infos.

Sur ma page d'erreur il manque un lien "Retour" qui renvoie sur le formulaire, avec les infos déjà saisies présentes pour ne pas avoir à les resaisir. Comment faire ce lien ?

J'espère avoir été clair.

Merci d'avance,

Jean-Michel

d0m
Mammouth du PHP | 1141 Messages

23 janv. 2008, 10:54

je te propose une autre solution plus pratique et qui évitera à tes visiteurs de t'insulter à chaque fois qu'ils font une erreur dans le formulaire :

Faire une page PHP qui contient le formulaire HTML.
Ce formulaire a pour action lors de la soumission de renvoyer vers lui même.
Au début de la page, tu vérifies si le formulaire a été soumis. Si c'est le cas (c'est que tu as été renvoié sur cette même page après avoir validé le formulaire), tu effectues tes tests sur les champs.
Si tous les test sont bons, tu rediriges (via un header) vers une autre page. Sinon tu affiches le formulaire.

Tu remplis le formulaire avec les valeurs déjà remplis auparavant (c'est très important pour éviter faire rager l'internaute)
Si certains champs sont manquant ou mal remplis, tu affiches un message d'erreur à coté du champ.

structure :
<?php
//si le formulaire a été validé
if(isset($_POST['ok']){
  //tests sur les champs
  ....
  if(tous_les_tests_sont_bons())
    header('Location page_suivante.php');
}
?>
<html>
....
<body>
//formulaire avec redirection vers la page actuelle
<form NAME=".." METHOD="POST" ACTION="<?php echo $_SERVER['PHP_SELF'];?>">
//tes champs
....
//exemple de champ avec remplissage de l'ancienne valeur si elle existe
<INPUT TYPE="text" NAME="champ1" value="<?php if(isset($_POST['champ1'])) echo $_POST['champ1'];?>" > <?php if(champ1_est_faux()) echo $message_erreur_champ_1;?>
//bouton de validation
<INPUT TYPE="SUBMIT" NAME="ok" value="ok">
</form>
</body>
</html>

jeanmi
Invité n'ayant pas de compte PHPfrance

23 janv. 2008, 11:27

Merci dOm,

Ta solution est plus séduisante c'est vrai. Et je la retiens pour plus tard.
Pour l'heure je n'ai pas le temps de refaire ma page avec mon formulaire (je ne suis pas développeur web), aussi j'aimerais, pour l'instant me contenter d'un simple lien vers mon formulaire permettant aux utilisateurs de le complèter sans avoir à tout ressaisir.

Bien sur, si cela est possible et plus rapide...

Merci,

Jean-Michel

d0m
Mammouth du PHP | 1141 Messages

23 janv. 2008, 11:38

ce que tu veux faire n'est pas plus rapide.
Il faudrait que ton bouton retour soit:
- un bouton submit dans un formulaire avec en champs cachés toutes les valeurs des champs récupérés de ton formulaire que le visiteur remplis sans oublier de mentionner ceux qui sont faux.

ou

- un lien avec en paramètre dans l'url toutes les valeurs des champs champs récupérés de ton formulaire que le visiteur remplis sans oublier de mentionner ceux qui sont faux.

ou

- mettre tes champs en session au lieu de les passer dans l'url du lien

Dans les 3 cas, dans la page de ton formulaire que le visiteur remplis il faut tester si on vient "naturellement" sur le formulaire ou si on a été renvoié depuis la page qui teste les valeurs.

En gros, le travail il faut le faire de toute façon. Par contre la méthode que je t'ai expliqué plus haut regroupe tout en une page et évite donc des redirections avant arrière.

En en regardant bien, tu n'as pas grand chose à modifier. Il suffit de rajouter les tests que tu fais je pense dans la 2ème page avant le formulaire et rediriger avec un header vers une page qui envoie le mail et dit que tout s'est bien passé.

jeanmi
Invité n'ayant pas de compte PHPfrance

23 janv. 2008, 12:45

Ok je vais voir ça...
C'est vrai que il n'y a pas grand chose à modifier dans ma page.

Merci, je reviendrais si j'ai des problèmes.

Jean-Michel