Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2011, 11h21   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
Par défaut Un formulaire - plusieurs boutons - plusieurs cibles

Bonjour a tous,

Voila en fait j'ai plusieurs formulaires sur une même page.
Sur le premier l'utilisateur rentre les informations sur les autres, ce sont des boutons cachés qui envoient les informations. Mais j'aimerais que le second formulaire récupère également les informations rentré sur le premier.
Au final j'ai plusieurs bouton submit, un pour chaque formulaire, ainsi l'utilisateur navigue entre différentes pages, peut même retourner sur certaines et retrouver les valeurs qu'il y avait entré etc.

M'étant renseigné sur le forum j'ai cru comprendre qu'imbriquer les formulaires entre eux, qui semblait être la bonne solution, n'est pas possible. Mais par contre il est possible d'avoir plusieurs boutons submit.

Mais je ne vois pas comment faire pour que chaque bouton envoie chacun sur une page différente, et qu'ainsi l'utilisateur choisissent où il veut aller.
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h20   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Crée seulement un formulaire au Click des buttons tu définit ou le formulaire va être envoyer avec du js puis et tu submit
Code :
1
2
3
 
document.myform.action ="update.html";
document.myform.submit();
ensuite tu récupéra seulement ce que tu veut.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h37   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

Evite de faire envoyer tes formulaires par Javascript, c'est très sale.
Je te conseillerai plutôt de grouper tous tes formulaires en un seul et de mettre plusieurs bouttons submit avec des values différentes (si les noms te posent problème utilise des buttons au lieur d'inputs).
Pour rassembler les informations de plusieurs formulaires en un seul, tu peux te servir des fieldset!

Prennons un exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<form action="mapage.php" method="post">
<fieldset><legend>F1</legend>
<label for="a">Champ A</label><input type="text" name="a" value="toto" />
 
// ajoute ici d'autres champs
 
</fieldset>
 
// ajoute ici du contenu
<p>Lorem ipsum sit amet etc.</p>
 
<fieldset><legend>F2</legend>
 
// ajoute ici d'autres champs
 
</fieldset>
<button type="submit" name="goto" value="goToPage1">Aller page 1</button>
<button type="submit" name="goto" value="goToPage2">Aller page 2</button>
</form>
Tu réccupères coté php la valeur de la page vers laquelle l'utilisateur veut se rendre avec
ensuite, tu fais des include ou une redirection, enfin ce qui t'arrange...

Voilà comment je m'y serais pris, maintenant c'est peut être pas adaptable à ton cas. Si c'est vraiment trop spécifique, tu peux envisage d'utiliser du js mais je ne saurais que trop te de le déconseiller.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 13h56   #4
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
Merci pour vos réponse.

J'ai eu l'idée entre 12h et 14h de faire comme tu disais Benjamin.

Une fois le premier formulaire remplit, la personne est envoyé sur une seule page php, mais celle ci, vérifie quel bouton submit à été cliquéet montre la page correspondante tout ca avec if et include.

Mon problème maintenant est de trouver comment conserver les informations rentré dans chaque formulaire de manière à ce que l'utilisateur qui remplit le formulaire page 1, va sur page2 puis retourne sur page 1, retrouve les informations qu'il avait inséré. Sachant qu'il y a 6 pages donc beaucoup de combinaisons possible et que j'aimerai laisser à l'utilisateur la possibilité de navigué entre les formulaire de manière à voir les informations qu'il devra rentré je ne vois pas trop comment faire. Vous avez des idées ?

J'imagine quelque chose du genre, vérifier si chacune des lignes du formulaire a été remplit ou non, si non on continue de naviguer tranquillement, à partir du moment où l'utilisateur a rentré une donnée dans un des formulaire on commence a les stocké et a passé les variables entre les pages jusqu'au bouton sauvegardé mais ca laisse encore un grand nombre de combinaisons...
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 15h06   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Tu peux sauvegarder les données du formulaire sur la session par exemple si l'utilisateur traverse plusieurs pages entre deux formulaires. Sinon, et je pense que ce sera le cas, il te suffira d'utiliser les données dans $_POST (pas de souci avec les include ou require, c'est une variable superglobale) pour remplir le formulaire de la page b avec les données saisies sur la page a - après les avoir nettoyées cela va sans dire. Cela ne fonctionnera pas si l'utilisateur reviens sur la page a sans soumettre le formulaire de la page b (avec le boutton retour du navigateur par exemple). A ce moment là, tu peux mettre les données sur la session (pense à utiliser un token pour pas te perdre).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 15h19   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
Oh pour etre perdu je pense que je vais l'être... je n'y connais rien encore au niveau php sur les session, et j'ai meme pas encore de zone membre ou quoi que ce soit, donc va falloir que je créer ca avant de continué mon formulaire j'ai l'impression >_<
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 16h05   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
J'ai l'impression que quand on dit "session" les gens comprennent "gestion de membres". Ce n'est pas forcément le cas.

Une session est utilsée par Apache et PHP pour identifier un visiteur. Elle permettent entre autre la création d'une structure (sous PHP, la variable superglobale $_SESSION) dans laquelle des données pour un visiteur donné pourront être stockées. Ces sessions ont une durée de vie définie dans les fichiers de configuration (la plupart du temps tu n'as pas besoin d'y toucher) et sont uniques pour chaque utilisateur.

Démarer et utiliser une session en PHP est un jeu d'enfant:
Code :
1
2
3
4
5
 
<?php
session_start(); // RIEN avant cette ligne (pas de HTML non plus!)
 
$_SESSION['un_parametre_quelconque'] = "une valeur quelconque";
Avec ce code, on ouvre une session pour l'utilisateur et on stocke une donnée. Pour réccupérer cette donnée sur une autre page (n'importe ou dans ton site en fait) il suffit de faire:
Code :
1
2
3
4
5
6
 
<?php
session_start(); // tu devra le mettre sur toutes les page (ou bien créés-toi un fichier init.php ou conf.php à include par chaque script)
 
echo "Le paramètre vaut : " . $_SESSION['un_parametre_quelconque'];
// affiche "une valeur quelconque"
Dans ton cas, les données reçues du formulaires sur la page A sont dans $_POST, on va les mettre sur la session comme ça:
Code :
1
2
3
4
5
 
<?php
session_start();
 
$_SESSION['form_inputs'] = $_POST;
Et on pourra réutiliser ces données n'importe où (sur la page A ou la page B indiférement pour reprendre l'exemple donné précédement).

N'oublie pas: en PHP, l'accès à un champ de tableau non initialisé au préalable provoque une erreur E_WARNING, bien que ces erreurs ne soient pas bloquantes, il est d'usage de les éviter en mettant
Code :
1
2
 
if (isset($_SESSION['form_inputs']))
partout ou on les utilise.

Regarde les nombreux tutoriels sur le net sur la question pour te faire une idée.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 09h15   #8
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
Effectivement il semble que je partais déjà sur une mauvaise idée sur les session.

le code

Code :
$_SESSION['form_inputs'] = $_POST;
récupérera en meme temps toute les données envoyé par la méthode post ?

Je vais me renseigner beaucoup plus sur le domaine des session php merci Benjamin !
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 09h48   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Oui ce code va mettre toutes es données reçues en post pour la requête en cours dans la variable de session effectivement.
Je te conseille d'appliquer un traitement sur les éléments de $_POST pour éviter les failles de sécurité.

Petit rappel: $_POST, $_GET, $_SESSION, $_REQUEST, $_SERVEUR sont toutes des tableaux!
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h22   #10
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
donc si je comprend bien, si par la suite je fais ceci sur la page cible:

Code :
1
2
if ((isset($_POST)) && (!empty($_POST))){
$_SESSION[input_application]=$_POST;}
Si l'utilisateur a bien rentré des données dans le formulaire précédent on le stock dans une variable de session.

Puis si il retourne sur la première page :
Code :
1
2
3
4
5
6
7
8
 
if ((isset($_SESSION[input_application])) && (!empty($_SESSION[input_application])))
{
while($result=mysql_fetch_array($_SESSION[form_input))
{
$input1= $result[0]
etc
}}
Je pourrai récupérer tout ce qui a été posté avant et le mettre en value dans les input ? (wahou j'ai l'impression de parlé comme un dev ! lol)
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 18h26   #11
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
T'as compris la logique, à toi de jouer maintenant.

Juste un détail, mettre des isset suivis de empty est inutile: empty à le comportement de isset (il renverra false si la variable n'est pas initialisée et ne déclenchera pas d'erreur).

Donc:
Code :
1
2
 
if  (!empty($_POST)) { // ...
suffit.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 09h19   #12
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
Par contre il y a un truc que je ne comprend pas :

Code :
1
2
3
4
if(isset ($_POST['SP']) && (!empty($_SESSION['input_sp']))){
	include("body/menus/passport/corp/sp2.php");}
	else if (isset ($_POST['SP'])) 
	{include("body/menus/passport/corp/sp1.php");}
donc comme tout a l'heure, mon deuxième formulaire regarde si quelque chose a été rentré dans une case du premier formulaire, si oui, il stock tout dans _SESSION['input_sp']. A la fin de ce deuxième formulaire, l'utilisateur a plusieurs bouton, si il décide de retourné sur le premier formulaire (en fait le target est tout de même le second), le code ci dessus se lance.
Si la personne a cliqué sur le bouton SP et que quelque chose avait déja été rentré, on montre la page sp2 (qui montera les données envoyé précédemment), par contre si rien n'a été rentré mais qu'il a cliqué sur SP on montre le formulaire sp1 qui est le formulaire de base.

Seulement après quelques test, ce code me ramène toujours à SP1
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 17h19   #13
Invité de passage
 
Inscription : décembre 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 14
Points : 2
Points : 2
C'est bon je viens de comprendre (oui une journée complete la dessus -_-)
session start doit etre invoqué sur chaque page où l'on veut se passer les variables
balbitus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 17h37   #14
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Citation:
<?php
session_start(); // tu devra le mettre sur toutes les page (ou bien créés-toi un fichier init.php ou conf.php à include par chaque script)
Et pourtant je l'avais mentionné
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web