Comment faire une gestion avancée d'erreurs de saisies

Comment faire une gestion avancée d'erreurs de saisies - PHP - Programmation

Marsh Posté le 13-04-2006 à 10:12:43    

Bonjour,
 
J'ai un formulaire de saisie qui contient plusieurs champs et listes déroulantes. Quand je clique sur submit, j'appelle une seconde page qui insère les données dans la base. Normal jusque là.
 
Dans le cas d'une erreur de saisie (ex: si un des champs existe déjà dans la base ou est vide) je voudrais à la fois afficher un message d'erreur dans le formulaire de saisie et réafficher les champs et valeurs des listes déroulantes déjà saisis (ou selectionnés).
La solution qui me parait la plus évidente:
Dans la page d'insertion, créer un petit formulaire sans submit qui renvoie les valeurs entrées (ou sélectionnées) depuis la page d'insertion vers la page de saisie et qui transmette aussi un message d'erreur style "Au moins un des champs n'est pas rempli".  
 
Si tout ça vous parait pas trop clair, en gros j'aurais voulu faire une sorte de:
$erreur="Au moins un champ n'est pas rempli".$_POST['champ1'].$_POST['champ2']....
header("Location:Formulaire_saisie.php?message=".$erreur);
 
Cette solution ne me permet pas de récupérer séparemment les variable postées et d'ailleurs je sais même pas si elle marche. C'est pour ça que j'ai pensé à un formulaire sans submit, mais je sais pas faire là...
 
Une idée, quelqu'un?
 
Merci.

Reply

Marsh Posté le 13-04-2006 à 10:12:43   

Reply

Marsh Posté le 13-04-2006 à 10:21:51    

si tu tiens à passer par deux pages séparées, tu as le choix entre revenir en arriere avec un header, ou un formulaire auto-envoyé via javascript
 
mais le plus simple pour ce que tu veux faire c'est de rester sur la meme page, et de n'en changer que lorsque tu formulaire est ok
 
un schéma du genre :
 
page1.php : formulaire
page1.php : traiter le formulaire, controle et enregistrement bdd si ok
page2.php : tu arrives dessus quand tout est ok

Reply

Marsh Posté le 13-04-2006 à 10:31:07    

Merci de ta réponse.
 
Comment contrôler les valeurs que l'on est en train de saisir par javascript; c'est un truc que j'ai cherché sur les forums, mais j'ai pas trouvé grand chose.
 
Sinon, tu sais comment on fait des formulaires "autosubmit" ou qui se valident tout seuls au bout de quelques secondes?

Reply

Marsh Posté le 13-04-2006 à 10:33:35    

Citation :

Comment contrôler les valeurs que l'on est en train de saisir par javascript


Quel genre de contrôle tu veux faire?

Reply

Marsh Posté le 13-04-2006 à 10:39:21    

Ben si il y a des champs vides quand on valide la saisie un ptit javascript qui affiche une ptite fenêtre et dise "C'est pas bien, tel ou tel champ n'est pas rempli".

Reply

Marsh Posté le 13-04-2006 à 10:50:28    

Je suis d'accord avec misterpinguin. Il est préférable de rester dans la même page tant qu'elle n'est pas bonne ou abandonnée.
 
Mon algorithme :
 

 

if (isset($_POST['Bouton_OK']) {
 
   // Récupère toutes les données
   $val_champ1 = $_POST['champ1']);
   $val_champ2 = $_POST['champ2']);
   $val_champ3 = $_POST['champ3']);
   ...
 
   // Controle toutes les saisies
   $msg_erreur = "";
   controle_champ1($msg_erreur); // rempli $msg_erreur si pb
   if ($msg_erreur == "" )
      controle_champ2($msg_erreur);
   if ($msg_erreur == "" )
      controle_champ3($msg_erreur);
   ...
 
   // Tente de mettre à jour la base
   if ($msg_erreur == "" )
      maj_base($val_champ1, $val_champ2, ..., $msg_erreur);
 
   // Fin de la validation
   if ($msg_erreur != "" ) {
      // Erreur trouvée
      affiche_msg_erreur($msg_erreur);
      // Réaffiche la page avec toutes les données précédemment remplies
      affiche_page($val_champ1, $val_champ2, ...);
   }
   else {
      // Tout est OK, passe à la suite
     affiche_page_suivante();
}
else {
   // Premier affichage avec les valeur par défaut
   affiche_page("", "", ...);
}

 

Reply

Marsh Posté le 13-04-2006 à 10:59:11    

Avant l'envoi du formulaire au serveur, on peut faire quelques controles élementaires (champs non vides, bonne taille, etc) :

<html>
<head>
<script language=javascript>
function ValidateForm(){
   var champ1=document.frmSample.champ1
 
   if ((champ1.value==null)||(champ1.value=="" )){
     alert("Champ1 obligatoire, saisir une valeur." )
     champ1.focus()
     return false
   }
   return true
}
</script>
</head>
<body>
<form name="frmSample" method="post" action="page.php" onSubmit="return ValidateForm()">
<p>champ1 :  
<input type="text" name="champ1">
<p>  
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>


Message édité par olivthill le 13-04-2006 à 11:03:05
Reply

Marsh Posté le 13-04-2006 à 11:06:28    

Merci de vos réponses.
 
Une dernière question quand même: Vous savez comment poster des valeurs à un autre formulaire sans submit?
 
Je vais en faire un nouveau sujet je pense parce que la question n'a plus rien à voir, mais si vous savez, c'est cool.
 
En fait je voudrais poster des valeurs d'un formulaire à un autre sans bouton, automatiquement.
 

Reply

Marsh Posté le 13-04-2006 à 11:07:28    

PedroBD a écrit :

Bonjour,
 
J'ai un formulaire de saisie qui contient plusieurs champs et listes déroulantes. Quand je clique sur submit, j'appelle une seconde page qui insère les données dans la base. Normal jusque là.
 
Dans le cas d'une erreur de saisie (ex: si un des champs existe déjà dans la base ou est vide) je voudrais à la fois afficher un message d'erreur dans le formulaire de saisie et réafficher les champs et valeurs des listes déroulantes déjà saisis (ou selectionnés).
La solution qui me parait la plus évidente:
Dans la page d'insertion, créer un petit formulaire sans submit qui renvoie les valeurs entrées (ou sélectionnées) depuis la page d'insertion vers la page de saisie et qui transmette aussi un message d'erreur style "Au moins un des champs n'est pas rempli".  
 
Si tout ça vous parait pas trop clair, en gros j'aurais voulu faire une sorte de:
$erreur="Au moins un champ n'est pas rempli".$_POST['champ1'].$_POST['champ2']....
header("Location:Formulaire_saisie.php?message=".$erreur);
 
Cette solution ne me permet pas de récupérer séparemment les variable postées et d'ailleurs je sais même pas si elle marche. C'est pour ça que j'ai pensé à un formulaire sans submit, mais je sais pas faire là...
 
Une idée, quelqu'un?
 
Merci.


 
 
Le formulaire et la validation sont dans la meme page.
Si les variables POST n'existent pas, tu affiches le formulaire.
Si les variables POST existent, tu les controles une à une, en conservant le contenu et les erreurs reperées.
S'il n'y a pas d'erreur, tu traites le formulaire.
S'il y a des erreurs, tu affiches les erreurs et le formulaire avec les champs preé-renseigné du contenu saisi precedement.


---------------
MZP est de retour
Reply

Marsh Posté le 13-04-2006 à 11:17:55    

PedroBD a écrit :

Merci de vos réponses.
 
Une dernière question quand même: Vous savez comment poster des valeurs à un autre formulaire sans submit?
 
Je vais en faire un nouveau sujet je pense parce que la question n'a plus rien à voir, mais si vous savez, c'est cool.
 
En fait je voudrais poster des valeurs d'un formulaire à un autre sans bouton, automatiquement.


 
tu ne peux pas envoyer un formulaire sans submit, qu'il soit déclenché par un bouton submit ou un en javascript
 
en php tu peux avec la fonction header() créer une requete post, mais c'est plus compliqué et sans intéret dans ton cas

Reply

Marsh Posté le 13-04-2006 à 11:17:55   

Reply

Marsh Posté le 13-04-2006 à 16:08:12    

Merci de ta réponse. La solution formulaire.submit() en javascript (qui m'a été données dans le sujet que j'ai posté après) marche très bien.
 
Le seul pb c'est qu'on est pas redirigé vers la page juste après le submit, le php s'execute d'abord sur toute la page. Donc ça peut poser des pb. Mais je pense qu'avec un exit; juste après le javascript ça doit être bon!

Reply

Marsh Posté le 13-04-2006 à 16:43:05    

Puis, il ne faut pas compter  sur le javascript pour faire des controles. Pense à la personne qui le desactive et c'est fini.


---------------
MZP est de retour
Reply

Marsh Posté le 13-04-2006 à 17:38:47    

Ouais mais à ce moment là, y a plein de trucs qu'on peut plus faire. Rien que cliquer sur un bouton depuis IE pour être redirigé sur une autre page devient compliqué! A part en faisant un <FORM> bien sûr...

Reply

Marsh Posté le 13-04-2006 à 17:40:42    

Bah oui, mais tu cherches a faire un site utilisable par tout le monde, ou bidouiller? Pourquoi vouloir mettre des boutons si ce n'est que pour rediriger, un lien suffit :??:


---------------
MZP est de retour
Reply

Marsh Posté le 13-04-2006 à 17:58:08    

C'est un site pour une entreprise, donc je pense qu'utiliser le javascript c'est quand même plus confortable.

Reply

Marsh Posté le 13-04-2006 à 18:54:27    

PedroBD a écrit :

C'est un site pour une entreprise, donc je pense qu'utiliser le javascript c'est quand même plus confortable.


Oui mais on peut shunter tes contrôles javascript
Il suffit de :
1) afficher le source de ton formulaire et l'enregistrer chez-soi
2) modifier sa copie pour que les liens et/ou submit partent bien chez-toi mais en enlevant la partie "contrôle javascript"
 
Moi, mes formulaires sont toujours en php et pointent toujours vers $_SERVEUR["PHP_SELF"].
Mais quand la page est rappelée, les champs remplis au coup d'avant et qu'elle récupère lors de son rechargement passent par toute une série de vérification avant d'être validés ou refusés. Et comme la page finit par le formulaire, tant que c'est pas bon l'internaute revient toujours au formulaire ...

Reply

Marsh Posté le 13-04-2006 à 19:31:38    

PedroBD a écrit :

C'est un site pour une entreprise, donc je pense qu'utiliser le javascript c'est quand même plus confortable.


Et la methode que je t'ai donné ne te convient pas. Pourtant elle ne necessite pas de se faire chier avec des redirection tordue en javascript. Vu que c'est pour une entreprise, autant que ce soit propre.  [:payzan]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed