Traitement de plusieurs formulaires sur une seule page php [Résolu]

Signaler
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007
-
Messages postés
5
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
4 mai 2018
-
Bonjour à tous,

J'ai un formulaire d'inscription relativement long.
Actuellement, l'utilisateur remplit ce formulaire et le valide. Le traitement php se fait ensuite.
Si une erreur est trouvée (par ex champ vide, champ non numérique etc...), un message d'erreur est affiché et l'utilisateur est bon pour resaisir le formulaire dans son intégralité.

Ce que je souhaite, c'est découper ce formulaire en plusieurs parties (5 au total). L'utilisateur remplit la 1ère partie, valide, le traitement s'effectue. Si le traitement est ok, on passe à la 2ème partie etc...
Entre chaque validation, je stocke les variables saisies sous forme de session.

Pour finir, et c'est là mon problème, je souhaite que tout soit traité dans une seule page. Je pourrai très bien faire un post vers une autre page php, mais je ne veux pas multiplier les pages inutilement.

J'ai démarré sur le principe des sessions.
Form 1 : 3 variables nom, prenom, numero_inscription.
Form 2 : 2 variables login, mdp
etc...

if(!isset($_SESSION['nom'])){
affiche Form 1
}

if(isset($_SESSION['nom']) && !isset($_SESSION['login'])){
affiche Form 2
}
etc...
Le problème, c'est qu'à l'envoi du Form 1, ca m'affiche bien Form 2 mais ne m'efface pas Form 1, alors que je voudrai que Form 2 s'affiche seul sur la page.
J'espère que je suis assez clair dans mes explications.
Si quelqu'un connait une bonne méthode, je suis preneur !

6 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

mets des submits différents.
Quand tu arrives sur la page, aucun bouton submit n'a été soumis, docn tu affiches formulaire 1.
Si submit1 a été cliqué, alors c'est que formulaire 1 a été soumis : tu traites, et si tout est ok, tu affiches formulaire 2.
Si submit2 existe, alors c'est que formulaire 2 a été soumis...etc.
Bref, ce sont des if (isset...) et genération du html en fonction de tes conditions.
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

Je ne comprends pas bien cette partie  "tu traites, et si tout est ok, tu affiches formulaire 2."
Si je mets :

if(!isset($submit1) && !isset($submit2)){
echo 'form1';
...

}

if(isset($submit1)){
traitement du form1 en php
si ok
echo 'form2';

}
etc...
Si je fais cela, et que le traitement de form1 n'est pas bon, form1 ne s'affiche plus, logique.

Si je fais le traitement de form1 dans la première boucle et que le traitement n'est pas ok, je reste sur form1, logique aussi.
Mais si le traitement est bon, comment je passe à form2 ?
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

Je suis arrivé à un truc pluttôt acceptable mais j'ai encore un soucis.
Je suis resté sur mon histoire de variables de session.
Si form1 est ok, $_SESSION['nom'] est créé et je passe à form2. Le problème c'est que je dois cliquer 2 fois sur le submit pour accéder à form2.
La 1ère fois, je créé les variables de session et je sreste sur form1.
La seconde, j'accède à form2.
Comment je peux contourner ce problème ?
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
si ok
//echo 'form2';
header("location:form2.php");
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007

J'ai testé la technique du header mais j'ai toujours un message d'erreur (header already sent ....).
Je suis arrivé à ce que je voulais en plaçant un <meta http-equiv="refresh" content="5;url=inscription.php"> après chaque formulaire.
La page se recharge, les variables de SESSION passent correctement et chaque formulaire s'affiche comme il se doit.

Merci à tous de votre aide.
Messages postés
5
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
4 mai 2018

J'ai travaillé durant un temps avec un module pdf : FPDF.
J'y ai trouvé une solution intéressante :  "session_cache_limiter('private');" à placer en tête de ta page php.
Je ne sais pas si ça va t'aider mais essaye quand même ;)

La source de cette soluce se trouve ici : http://www.fpdf.org/

@ pluche.