Recuperer en php un select multiple formulai

Pierre -  
 Peter111 -
Bonjour a tous,

je voudrais pouvoir recuperer en PHP les valeurs contenues dans un select multiple d'un formulaire.

je pensais utiliser la fonction serialize mais je n arrive pas a comprendre comment l utiliser

voici mon formulaire :

<?
echo "<form action='toto4.php' method='post' name='form' >";
echo "<select size='4' name='listecouleur> ";
echo "<OPTION value='1'>Bleu<OPTION> ";
echo "<OPTION value='2'>rouge<OPTION> ";
echo "<OPTION value='3'>jaune<OPTION> ";
echo "<OPTION value='4'>vert<OPTION> ";
echo "</select> ";

$liste = serialize(listecouleur);

echo "<a href='toto4.php?tablo=$liste'>page suivante</a>";
echo "</form>";
?>

a l execution il y a un message d erreur indiquant que listecouleur n existe pas

quelqu un a t il une solution ?

merci a vous

Pierre

13 réponses

  1. fastflood
     
    Pour ceux qui veulent une solution simple :
    ============================
    Dans le formulaire :
    --------------------
    <select name="ressources[]" size="15" multiple>
    ...
    </select>

    Pour récupérer :
    -----------------
    foreach($_POST["ressources"] as $value)
    {
    // traitements : $value contient les valeurs successives
    }

    NB : dans les posts précédents, il y a une confusion entre les variables tableaux d'un script qui sont passées à une autre page par un serialize et les données d'un formulaire qui ne deviennent des variables que sur la page qui les reçoit.
    Donc le fait que le formulaire et le script soient ou non sur la même page n'a absolument aucune importance.
    44
    1. David
       
      T'as solution simple marche très bien. Cependant, ce que je recherche, pour ma part, c'est presque ça, à quelque chose pret.

      Mon formulaire est envoyé par e-mail, et met à disposition aux utilisateurs un 'select multiple'. J'aimerais que dans mon le mail apparaisse tout ce qu'il a selectionné dans mon select multiple. ex:
      -------------------------------------------------------
      mail(
      'exemple@exemple.fr',
      'Commande',
      $_POST['nom'] . " " . $_POST['prenom'] . " a passé une commande de:\n" . $_POST['references'] . "\n\nA l'adresse de livraison:\n" . $_POST['adresse_livraison'], $entetemail
      );
      -------------------------------------------------------

      Que dois je changer ?
      0
    2. Edouard
       
      tu fait une variable $selection et tu concatene toutes les valeurs selectionnées, ensuite tu envoies to email avec le contenu dont $selection
      0
      1. David > Edouard
         
        Pourrais tu m'en faire un exemple ?
        0
      2. David > Edouard
         
        C'est bon merci ;)
        0
  2. DocWario
     
    en fait le truc c est d appeler le select comme un tableau et php le recupere bien en tableau :

    <select name="users[]" multiple>
    7
  3. flokocha Messages postés 1519 Statut Membre 281
     
    Trouvé sur www.phpcs.com :
    <?
    // Traitement après post et affichage des valeurs du champ select
    if ($HTTP_POST_VARS["Col1"] != "")
    {
        $Col1_Array = $HTTP_POST_VARS["Col1"]; 
        for ($num = 0; $num < count($Col1_Array); $num++)
        {
        echo $Col1_Array[$num]."<br>";
        }
    }
    ?>
    <html>
    <head>
    <title>Recuperer valeur select dans variable php</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    
    <script>
    function PostSelect(liste)
    {
        // On compte le nombre d'item de la liste select
        NbCol1 = document.forms[liste].elements.Col1.length;
        
        // On lance une boucle pour selectionner tous les items
        for (a = 0; a < NbCol1; a++)
        {
        document.forms[liste].elements.Col1.options[a].selected = TRUE;
        }
        
        // On modifie l'ID  du champ select pour que PHP traite cette 
        // dernière comme un array
        document.forms[liste].elements.Col1.name = "Col1[]";
    
        // On soumet le formulaire
        document.forms[liste].submit();
    }
    </script>
    </head>
    
    <body>
    <form name="Liste1" method="post" action="capture_select.php">
        <select name="Col1" size="4" multiple style="width: 150px">
        <option value="Valeur 1">Valeur 1</option>
        <option value="Valeur 2">Valeur 2</option>
        <option value="Valeur 3">Valeur 3</option>
        <option value="Valeur 4">Valeur 4</option>
        <option value="Valeur 5">Valeur 5</option>
        </select><br><br>
        <input name="Envoyer" type="button" value="Envoyer" onClick="javascript:PostSelect('Liste1')">
    </form>
    </body>
    </html>
    
    
    5
    1. lolo
       
      Désolé,
      mais en enlevant la boucle dans le PHP
      çà marche pas, çà m'imprime: Array c tout.
      0
  4. Senta
     
    Bonjour.
    Je ne sais pas si vous avez votre réponse, mais ça peut servir à quelqu'un si il passe par ce post (trés bien référencé d'ailleur par google :) )
    Là, vous avez la réponse à vos soucis, il faut mettre en nom du select quelque chose comme ça : nomdemonselect[]
    qui fait en sorte que php puisse interprété que c'est un tableau qui lui est envoyé.
    http://liihs.univ-tlse1.fr/bastide/Teaching/php/forms.php
    cependant : j'ai constaté une chtite chose : si vous construisez une fonction du type :
    function constr_select_multiple($table, $nom, $selected, $id, $label)
    {
        $query = "SELECT * FROM $table";
        $res = mysql_query($query) or die(mysql_error() . "<br>$query<br>");
        $select = "<select name='" . $nom . "[]' size='5' multiple>";
        $select .= "<option value=''>Cliquez Ici</option>";
        while ($data = mysql_fetch_array($res)) {
            if (recherchetab($data[$id], $selected) == true) {
                $complement = " selected";
            } 
            $select .= "<option value='" . $data[$id] . "' $complement>" . $data[$label] . "</option>";
            $complement = "";
        } 
    
        $select .= "</select>";
        return($select);
    } 
    

    Remarquez la ligne contenant ceci :
      $select = "<select name='" . $nom . "[]' size='5' multiple>";
    

    si l'on passe en variable le nom du select, il faut concaténer, sinon, un message d'erreur apparait lors de la consultation de la page comme quoi il manque un ] alors qu'il y est.

    Vlà, c'est tout, j'espère que ça servira à quelqu'un :)
    Bye et surtout, (je vais faire une conclusion à caractère politique )
    Vive les Endive Braisées looooooooool
    @+ ;)
    3
    1. Moa!
       
      après de longues recharches, tu m'as apporté la réponse. Merci! Pour récupérer simplement les sélections lorsqu'elles sont multiples, il suffit de rajouter [] au nom de la sélection! C'est tellement simple!!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Peter111
     
    Salut, alors, "<select name='listecouleur>" il manque simplement le ' après 'listecouleur voila j'espère que cela t'aideras ;)
    3
  7. Utilisateur anonyme
     
    Es tu sûr qu'il y a un probleme à transmettre les tableaux??? J'en utilise courament pour traiter des listes de checkbox ou autres, et je n'ai jamais eu aucun probleme à les passer en POST.

    Fat_Cartman,
    Parce que je le vaux bien... 
    1
  8. Pierre
     
    Merci a toi

    j ai corrigé 2 erreurs et ca marche

    il faut mettre true en minuscule et non en majuscule et enlever la boucle dans le php sinon il transmet tous les elements et non uniquement ceux selectionnés

    Merci encore
    1
  9. Pierre
     
    tu passes des tableaux sans utiliser la fonction serialize et ca passe ? peut etre en php3 mais plus en php4 ou 5 je crois

    en tout cas ce formulaire avec un select je n arrive pas a le passer quand je fais un $_POST dans la seconde page j ai tous les elements de mon formulaire (que j ai supprimé ici pour l exemple)sauf le SELECT

    comment feriez vous ?
    0
    1. Utilisateur anonyme
       
      Ca marche bien en php4, et certainement avec php5...

      Fat_Cartman,
      Parce que je le vaux bien... 
      0
  10. flokocha Messages postés 1519 Statut Membre 281
     
    Remercie l'auteur de ce script! :o)

    Mais méfie-toi des $HTTP_POST_VARS, c'est plus trop conseillé.
    0
  11. abedlkader
     
    comment fait-on svp pour empecher un utilisateur d'appuyer sur un bouton tant quil n'a pas rempli un champ text et textarea?
    Merci de votre aide
    -1
  12. DgSe95
     
    bonjour a tous,

    je voudrais juste rajouter pour la personne qui a stipuller qu'il etait impossible de creer un formulaire + son traitement en php dans la meme page....

    ben cela est tout a fait possible :

    <form name="nomForm" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">

    ou de maniere plus securisée pour éviter certaines failles... ;)

    <form name="nomForm" action="<?php echo htmlentities(strip_tags($_SERVER['PHP_SELF'])); ?>" method="post" enctype="multipart/form-data">

    on peut utiliser aussi de la meme maniere qu'avec $_SERVER['PHP_SELF'] ceci : $_SERVER['SCRIPT_NAME']

    en esperant avoir aider quelque uns ;)

    @++

    DgSe95
    0
  13. kalamit
     
    Salut,

    C'est normal que cela ne fonctionne pas si ton formulaire et ton traitement se trouve dans la meme page.

    Kalamit,
    Parle à ma culasse, mon carter est malade. :)
    -1
  14. Pierre
     
    je sais bien que normalement on recupere les variables d un formulaire sur une autre page mais dans le cas d un SELECT MULTIPLE tu ne peux pas recuperer sur une autre page car le choix de l utilisateur est mis dans un tableau et donc ne sont pas transmis a la page d apres sauf a utiliser serialize mais que je ne vois pas comment utiliser

    j ai trouve une solution avec une fonction java mais j aimerai trouver comment le faire en php

    merci a vous pour votre aide
    -1
    1. kalamit
       
      En php, je le repete, ce n'est pas possible puisqu'il doit y avoir interaction avec le formulaire. Le php est executé avant le chargement de la page dans le navigateur. Il ne peut donc pas etre interpreté après que l'utilisateur ait fait un choix dans ton formulaire.

      La bonne solution est celle donnée par Flokocha en javascript (il y en a surement d'autre).

      Kalamit,
      Parle à ma culasse, mon carter est malade. :)
      0