Problème de formulaire

le rouge
Invité n'ayant pas de compte PHPfrance

22 juin 2006, 12:53

Bonjour,

J'ai une question sur les formulaires, en fait j'aimerais que lorsqu'il y a une erreure du type "vous n'avez pas écrit de nom" et que la personne clique sur retour ou précédant, les données qu'elles avaient mises restent pour pas que la personne doivent tou réécrire...

J'ai essayé avec javascript, mais rien à faire...

Qqn aurait une solution?

Merci.

Mammouth du PHP | 536 Messages

22 juin 2006, 13:46

normalement avec un scipt javascript, il ne devrait pas y avoir de problème.
Voilà ce que j'utilise pour vérifier les champs obligatoires d'un formulaire (ce script doit être avant </head>) :

Code : Tout sélectionner

<script language="JavaScript1.2"> function validation() { var msg = ""; //ici nous vérifions si le champs nom_champ est vide, changeons la couleur du champs et définissons un message d'alerte if (document.nom_formulaire.nom_champ.value == "") { msg += "Veuillez saisir votre ...\n"; document.nom_formulaire.nom_champ.style.backgroundColor = "#F3C200"; } //Si un message d'alerte a été initialisé on lance l'alerte else { alert(msg); return(false); } }</script>
et ensuite au début du formulaire tu fais ainsi :

Code : Tout sélectionner

<form name="nom_formulaire" method="post" action="page.php" OnSubmit="return validation();">
normalement avec ceci, les valeur saisies ne sont pas perdues et ca vérifie bien
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 1353 Messages

22 juin 2006, 13:50

Le probleme ne se situe pas lorsque l'utilisateur valide mais plutot si il appuie sur précédent si j ai bien compris...

Peut etre qu une fonction javascript déclenchée par le onBeforeUnload() pourrait te permettre de faire une sauvegarde des valeurs mais je n ai pas de réponse exacte :(
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 536 Messages

22 juin 2006, 14:03

afin d'éviter justement que l'utilisateur soit renvoyé vers une autre page et pour corriger ses erreurs soit obligé de cliqué sur précédent, autant faire une vérification des champs comme mon post précédent qui lui évite d'etre rediriger vers la page où sont traitées les informations du formulaire. On reste sur la meme page tant que tout n'est pas correctement saisi
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 1353 Messages

22 juin 2006, 14:07

Autant pour moi, je pensais qu'il voulait garder les informations si la personne faisait précédent pendant qu il remplissait le formulaire. Effectivement il vaut mieux gérer tout en javascript sur la même page avant la validation dans ce cas. Désolé béka.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 50 Messages

22 juin 2006, 14:25

Moi j'utilise un autre système :

-> L'utilisateur arrive sur le formulaire (vide)
-> Il rempli ces données
-> Lorsqu'il a fini il valide

-> J'arrive sur ma page php de traitement
-----> Je vérifie et rend compatible (magic_quote, etc) mes variables en _POST
-----> Je les met ensuite dans des variables de _SESSION
-----> Je fais tout mes tests de validation de données
--------------> Erreur : je comptabilise dans un tableau d'erreur également en _SESSION et je continue
--------------> Ok : je continue
-----> Fin du traitement :
--------------> Des erreurs ont été comptabilisées, je ne fais aucun traitement et je reviens sur la page formulaire
--------------> Pas d'erreur, je fais mon UPDATE ou mon INSERT, je met un "flag" à 1 pour dire que tout c'est bien passé, et je reviens sur le formulaire

-> Revenu sur le formulaire deux possibilités :
-----> Il y a eu des erreurs, je les passent toutes afin d'indiquer toutes les erreurs qui ont été trouvées dans les données rentrées
et grâce à (exemple):
<input type="text" name="nom" value="<?= isset( $_SESSION["formulaire"]["nom"] ) ? $_SESSION["formulaire"]["nom"] : "" ?>">
(A adapter bien évidemment) L'utilisateur retrouve les deonnées qu'ils avaient rentrées.

-----> Aucun erreur, grâce au "flag" j'affiche un message disant que tout c'est bien passé.

le rouge
Invité n'ayant pas de compte PHPfrance

22 juin 2006, 14:37

Le problème est que je fais mes verifications en PHP.

Par exemple pour mon formulaire de contact, j'ai deux fonctions, une formulaire et l'autre envoi (avec verif).

Si il y a une erreur, l'erreur est indiquée directement avec un lien retour.

Si il clique sur retour, les données inscrites sont perdues. Et je voudrais éviter cela.

Je n'aimerias pas chambouler tout mes scripts non plus...

Merci bien!

Eléphant du PHP | 50 Messages

22 juin 2006, 14:43

Que la personne clique sur Précédent ou que la page revienne automatiquement sur le formulaire, je vois pas beaucoup de changement. Et c'est toujours mieux qu'un utilisateur qui tombe sur une page blanche avec 3 erreurs qui se battent :/

le rouge
Invité n'ayant pas de compte PHPfrance

22 juin 2006, 15:04

Il tombe sur une page d'erreur et au-dessous des erreurs, je rappele ma fonction formulaire, donc il peut corriger directement, mais j'aimerais que il y ait tjs ses données écrites (ce qui était juste)

Tu me comprends?

Marchi!

Eléphant du PHP | 50 Messages

22 juin 2006, 15:25

Si j'ai bien compris (enfin j'espère), quand la personne valide et qu'il y a des erreurs il tombe sur une page d'erreur, avec les erreurs commises et encore le formulaire en dessous ?

Dans ce cas tu peux faire un truc simple :
<?php

  // initialisation
  $nom = "";
  $prenom = "";

  // Pour savoir si il y a des erreurs
  $erreurs = false;

  if( ( $_POST["nom"] ) )
  {
    // Donc pas d'erreur
    $nom = $_POST["nom"];
  }
  else
  {
    // Traitement de l'erreur (ici simple echo)
    $erreurs = true;
    echo "Erreur sur le nom";
  }

  // On fait pareil sur le prénom
  if( ( $_POST["prenom"] ) )
  {
    // Donc pas d'erreur
    $prenom = $_POST["prenom"];
  }
  else
  {
    // Traitement de l'erreur (ici simple echo)
    $erreurs = true;
    echo "Erreur sur le prénom";
  }

  // On a finis le traitement.
  
  // Si il y a des erreurs ($erreurs == true) alors on affiche le formulaire,
  // Sinon on traite avec MySQL & Cie
  if( !$erreurs )
  {
    $req = "INSERT INTO ..........";
  }
  else
  {

?>
<form action="" method="post">
  <input type="text" name="nom" value="<?= $nom ?>">
  <input type="text" name="prenom" value="<?= $prenom ?>">
  <input type="submit" value="Valider">
</form>
<?php

  }

?>
J'espère que j'ai bien compris :oops: (Sinon soit plus clair)

le rouge
Invité n'ayant pas de compte PHPfrance

22 juin 2006, 15:46

Oui, en vitesse tu as bien compris...

Là j'ai pas le temps de regarder ta proposition, je suis un peu pressé, je repasse...

Merci bien en tt cas!!!