IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Un formulaire - plusieurs boutons - plusieurs cibles


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    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.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    document.myform.action ="update.html";
    document.myform.submit();
    ensuite tu récupéra seulement ce que tu veut.

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    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...

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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).

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    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 >_<

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Effectivement il semble que je partais déjà sur une mauvaise idée sur les session.

    le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_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 !

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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!

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    donc si je comprend bien, si par la suite je fais ceci sur la page cible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  11. #11
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if  (!empty($_POST)) { // ...
    suffit.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Par contre il y a un truc que je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    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

  14. #14
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    <?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é

Discussions similaires

  1. [XSLT] Plusieurs boutons, plusieurs xsl ?
    Par MatMeuh dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 05/02/2007, 14h30
  2. [débutant] plusieur bouton -> plusieur variable ?
    Par cyrill.gremaud dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 03/11/2006, 14h27
  3. Gérer plusieur bouton pour un meme formulaire
    Par Phenomenium dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/01/2006, 13h08
  4. Plusieurs boutons dans un formulaire
    Par kcizth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/01/2006, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo