Page 1 sur 1

Problème de formulaire

Posté : 22 juin 2006, 12:53
par le rouge
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.

Posté : 22 juin 2006, 13:46
par béka
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

Posté : 22 juin 2006, 13:50
par guilt92
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 :(

Posté : 22 juin 2006, 14:03
par béka
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

Posté : 22 juin 2006, 14:07
par guilt92
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.

Posté : 22 juin 2006, 14:25
par Orni
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é.

Posté : 22 juin 2006, 14:37
par le rouge
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!

Posté : 22 juin 2006, 14:43
par Orni
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 :/

Posté : 22 juin 2006, 15:04
par le rouge
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!

Posté : 22 juin 2006, 15:25
par Orni
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)

Posté : 22 juin 2006, 15:46
par le rouge
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!!!