Problème récupération des variables depuis un formulaire inclus dans un code php

anakyl Messages postés 12 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 août 2008 - 20 juin 2008 à 15:57
anakyl Messages postés 12 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 août 2008 - 27 juin 2008 à 09:46
Bonjour à tous,

Je suis depuis plusieurs jours sur un problème que je n'arrive pas à résoudre.

Je souhaite créer un formulaire avec une liste déroulante proposant 3 choix, dont chacun renvoi vers un formulaire différent, et ainsi de suite.

Exemple :

Choisissez votre article :
- Outils -> Si choisi me renvoi avec formulaire outils
- Accessoires -> Si choisi me renvoi avec formulaire accesoire
- Divers -> Si choisi me renvoi avec formulaire divers

Shématiquement, c'est comme une arborescence avec différents chemins (formulaires) en fonction du choix effectué. Et chaque variable doit être récupérée d'une page à l'autre.

Et donc afin d'afficher le bon formulaire en fonction du choix, j'utilise la méthode if, elseif, else.

Exemple :

<!-- BEGIN TEMPLATE: bbcode_code -->$article = $_POST['article'];
if($article == 'outils']{
  echo
"<label>Choisissez un outil :</label>
<SELECT  name="outil">
<OPTION  value=\'cle\' selected="selected" >cle</option>
<OPTION  value=\'marteau\'>marteau</option>
<OPTION  value=\'tourne vis\'>tourne vis</option>
<OPTION  value=\'ciseaux\'>ciseaux</option>
<OPTION  value=\'perceuse\'>perceuse</option>
</select>";
}
elseif($article = 'accessoires'){
  echo  // Formulaire accésoire et ainsi de suite...
}
   else{ echo // forumlaire divers
  }
?>

Il y a un slash devant chaque apostrophe et accent, car à chaque fois on me retournait des erreurs de syntaxes à ce niveau là.

 <!-- END TEMPLATE: bbcode_code -->Je n'ai aucun problème pour afficher le bon formulaire suivant le choix du 1er formulaire vers le 2ème (car le 1er est entièrement en html), mais concernant le fait de passer du 2nd au 3ème formulaire, cela ne fonctionne pas car les variables ne sont pas transmises (et car le 2nd formulaire est entièrement inclus dans un code php).

Pour information, je n'ai pas inclus <form method="post"></form> dans le code php. Il se présente ainsi :

<form method="post" action="page3.php">
<?php//le code ci-dessus avec les if, elseif et les formulaires ?>

</form>


Je suis débutant.. Je ne sais pas du tout si j'utilise la bonne méthode.. J'espère que c'est un peu plus claire pour vous. Si ça se trouve, je fais n'importe quoi. J'essaie désespérément de récupérer les variables du formulaire avec liste déroulante.

J'espère que mon message est clair.

Merci pour votre aide.<!-- / message --><!-- edit note -->

2 réponses

JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
21 juin 2008 à 21:46
Salut !

Je m'ennuyais ferme .... et j'ai codé ^^
Donc, j'ai fait un petit code pour montrer comment faire.
En fait, j'ai supprimé ton IF/ELSE, pour le remplacer par un SWITCH.
Tu dis pour tes ", mais tu te complique la vie .... fais un echo '...'; (avec des simples quotes ( ' )) et met tes " normales pour ton formulaire ;)
Et pour ton problème, en fait tu dois sauvegarder tes informations. Pour celà, tu traites tes données normalement, sauf qu'au lieu de les sauvegardées, tu les mets dans ton formulaire. (une boucle me semble le plus adapté). Pour celà, fait des

Voilà mon code (pas testé ;))

<?php

// Je conseil une fonction utilisant magic_quotes_runtime(); pour nettoyer les POST, GET, COOKIES, ... (addslashes/stripslashes)

// La fonction de traitement qui permet de sauvegarder les informations
function hidden_POST()
{

        $args=func_get_args();

        $list=array();

        if(count($args)==0)

        {

                $args[0]=true;

        }


        foreach($argsas$val)

        {

                if($val===true)

                {

                        $list=array();

                        foreach($_POSTas$post_name=>$post_val)

                        {

                                $list[$post_name]='.urlencode($post_name).'" value="'.urlencode($post_val).'" />';

                        }

                }

                elseif(isset($_POST[$val]))

                {

                        $list[$val]='.urlencode($val).'" value="'.urlencode($_POST[$val]).'" />';

                }

        }

        

        returnarray_unique($list);
}

if(isset($_POST['article']))
{

        // On fait un SWITCH, une série de if/else équivalent à :

        // If( $val == $a ) { ... }

        // else If($val == $b ) { ... }

        // else { ...} (else -> "default :")

        // On force la case (minuscule)

        switch(strtolower(urldecode($_POST['article'])))

        {

                // If ... == 'article'

                case'article':

                        echo'

  <form action="" method= "POST">

   

   ', implode('', hidden_POST())</gras> ,'

    <label for ="outil">Choisissez un outil :</label>

    <select name="outil" id="outil">

      <option value="cle">Cle</option>

      <option value="marteau">Marteaux</option>

      <option value="tourne vis">Tourne vis</option>

      <option value="ciseaux">Ciseaux</option>

      <option value="perceuse">Perceuse</option>

    </select>

   


  </form>';

                        // Et hop, un echo '...'; (qui est plus recomandé que echo "...") et plus besoin de " (mais besoin pour les \')


                        break;


                case'accessoires':

                        // ...

                        break;


                // formulaire défault (else)

                default:

                        // ...

                        break;

        }
}

/*

 * Ici, c'est " implode('', hidden_POST()) " qui fait tout.

 * Grâce à elle, tu récupère TOUTES les informations envoyées
précedemment. En fait, elle renvoie les valeurs POST à l'aide d'input
hidden.

 * Son utilisation :

 *   hidden_POST() &amp; hidden_POST(true) : retourne un Array contenant TOUS les _POST

 *   hidden_POST('mon_form1', 'mon_form2') : retourne les X _POST demandés

 * Elle réenvoi un Array avec les  demandés

 * Il suffit donc d'utiliser un inplode('', $resultat_de_la_fonction); pour afficher

 */

?>


<hr />Si ma reponse te convient, merci de l'accepter ! 
0
anakyl Messages postés 12 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 août 2008
27 juin 2008 à 09:46
Bonjour,

Je suis vraiment désolé de répondre aussi tard. J'étais très pris.

[auteur/JOJO738/303421.aspx JoJo738] je te remercie du fond du coeur. J'ai suivi tout tes conseils, et ça marche nikel.

Merci infinimement
0
Rejoignez-nous