Recuperer en php un select multiple formulai

[Fermé]
Signaler
-
 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

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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 ?
tu fait une variable $selection et tu concatene toutes les valeurs selectionnées, ensuite tu envoies to email avec le contenu dont $selection
> Edouard
Pourrais tu m'en faire un exemple ?
> Edouard
C'est bon merci ;)
en fait le truc c est d appeler le select comme un tableau et php le recupere bien en tableau :

<select name="users[]" multiple>
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
275
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>

Désolé,
mais en enlevant la boucle dans le PHP
çà marche pas, çà m'imprime: Array c tout.
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
@+ ;)
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!!
Salut, alors, "<select name='listecouleur>" il manque simplement le ' après 'listecouleur voila j'espère que cela t'aideras ;)

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... 
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
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 ?
Utilisateur anonyme
Ca marche bien en php4, et certainement avec php5...

Fat_Cartman,
Parce que je le vaux bien... 
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
275
Remercie l'auteur de ce script! :o)

Mais méfie-toi des $HTTP_POST_VARS, c'est plus trop conseillé.
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
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

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. :)
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
Utilisateur anonyme
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. :)