RÉCUPÉRER TOUTES LES VALEURS D'UN SELECT MULTIPLE DANS UNE VARIABLE PHP

cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 - 24 mars 2003 à 08:48
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 7 août 2011 à 12:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/13200-recuperer-toutes-les-valeurs-d-un-select-multiple-dans-une-variable-php

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
7 août 2011 à 12:35
Ah oui, je n'avais pas vu la nuance (Toutes les valeurs plutôt que toutes les valeurs sélectionnées).
En fait, dans la plupart des cas, on connaît toutes les valeurs possibles côté serveur (Au moment de la construction du select). Ce que l'on ne sait pas, c'est ce que l'utilisateur va sélectionner parmi celle-ci. Mais bien sûr, il existe des cas où on veut toutes les valeurs.

La solution de KREVETTE m'a paru plus simple (Plus courte, uniquement PHP et HTML...) donc plus intéressante et moins risqué. Cependant elle ne résout pas le même problème. Mais par exemple, tu aurais pu t'inspirer du commentaire de PGPP pour te débarrasser de la ligne de renommage ->
document.forms[liste].elements.Col1.name = "Col1[]";

Donc j'ai commenté un peu vite et je m'en excuse.
McPeter Messages postés 134 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 18 avril 2013
4 août 2011 à 21:40
Heu déjà Pollux84 si tu trouves le php si "crade" je comprends pas pourquoi tu commentes ici .. (surtout quand tu n'as aucunes contributions de sources :\)

Ensuite RT15 le code marche parfaitement ... je pige pas où est le soucis là ?!
Le cade fait précisément ce que le titre annonce ... rien de plus ni de moins
Le script de KREVETTE ne récupère _que_ les valeurs "sélectionnées" ... et non "toute la liste"
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
18 juil. 2007 à 09:45
Heu bah je plussois Pollux84.

C'est un coup à s'enm***** avec la solution du source alors que celle de KREVETTE avec améliration de PGPP marche très bien.

Ce serait très sympa de faire la mise à jour McPeter, d'autant qu'on tombe dessus facilement via Google.
Pollux84 Messages postés 15 Date d'inscription lundi 1 septembre 2003 Statut Membre Dernière intervention 15 février 2009
21 juin 2007 à 16:55
c'est crado tous sa (comme le php dailleur ...) pourquoi ne pas update la source initiale afin que les utilisateurs puisse avoir un code qui marche sans lire les tas de commentaires tous craceux blindés de < > et autre caractère bizard qui ne passe pas ?
McPeter Messages postés 134 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 18 avril 2013
30 mars 2007 à 22:17
Salut
en Gros
<?php
$list = array( 'option_1', 'option_2', 'option_3', 'option_4', 'option_' );
$mySelect = '';

foreach( $list as $option )
{
if( $_POST[ 'mySelect' ] == $out ) $select = ' selected="selected"' else '';

$mySelect .= '<option' . $select . '>' . $option . '</option>';
}
?>
<select id="mySelect" name="mySelect">
<?php echo $mySelect; ?>
</select>

@++
vincentforce Messages postés 4 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 15 février 2006
10 juil. 2006 à 14:50
Perso,

J'ai modifié cette fonction pour passer autant de select multiple que l'on souhaite.



Voila le javascript :

function PostSelect(){
//Arguments passés à la fonction, en l'occurence, l'id des select multiple
var args=PostSelect.arguments;

for (i=0; i<(args.length); i++)
{
alert(args[i]);

// On compte le nombre d'item de la liste select
NbCol1 = eval("document.getElementById('"+args[i]+"').length;");

// On lance une boucle pour selectionner tous les items
for(a=0; a<NbCol1; a++){
eval("document.getElementById('"+args[i]+"').options["+a+"].selected = true;");
}
}

// On soumet le formulaire
document.forms.submit();
}



Voila le code HTML :

<form name="Liste1" method="post" action="votrepage.php" onSubmit="PostSelect('multiple1','multiple2')">
<select name="multiple1" id="multiple1" multiple>
<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>


<select name="multiple2" id="multiple1" multiple>
<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>



</form>



Et en PHP (sur votrepage.php), il suffit de faire :

<?php
print_r($_POST["multiple1"]);
print_r($_POST["multiple2"]);
?>
gasmo Messages postés 1 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 12 mai 2006
12 mai 2006 à 17:41
Bonjour à tous,
j'ai besoin d'aide, je n'en peux plus de tourner en rond sur mon code. J'ai essayé pas mal de choses proposées ici, mais je ne m'en sors pas... Mon problème est les suivant :
_j'ai une page avec deux listes, et je transfert des données d'une liste à l'autre grâce à cette fonction JS :
function transfert(l1,l2)
{
if (l1.options.selectedIndex>=0)
{
texte = l1.options[l1.options.selectedIndex].text;
valeur = l1.options[l1.options.selectedIndex].value;
o=new Option(texte,valeur);
l2.options[l2.options.length]=o;
l1.options[l1.options.selectedIndex]=null;
}
else
{
alert("Aucun element sélectionné");
}
}

_une fois que l'utilisateur a fini des transférer les données qu'il veut, je voudrai pouvoir les récupérer pour les insérer dans ma base de données. Ma page ressemble à ca :
<form name="ajout" id="ajout" method="post" onsubmit="return validateForm(this)" action="action/Action_LierMag.php">
... // première liste
... // bouton pour faire le transfert entre les deux listes
<select multiple name="liste2[]" id="liste2" size="8">
</select>

Enfin mon action m'envois dans une page appelée Action_LierMag.php, où je souhaite donc récupérer mes données et les traiter.
Merci d'avance, toutes suggestions peut m'aider.
beur81 Messages postés 28 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 19 juillet 2006
4 mai 2006 à 22:59
bonjour a tous
j'ai un probleme je ne sais pas comment faire pour mettre la valeur de ma pk_client dans une variable apres l'avoir recupere
d'une requete ci joint mon code

// la variable noms et prenoms proviennent d'un input
avec le code qui suit je recupere le numéro de la pk mais je sais pas cmt faire pour la mettre dans une variable ex $pk_client

$resultats = mysql_query("SELECT pk_client from client where cli_nom='$noms' and cli_prenom='$prenoms'");
while($pret = mysql_fetch_object($resultats))
{
echo "<center>$pret->pk_client



ca marche";


}
evlicorne Messages postés 2 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 9 mars 2006
9 mars 2006 à 14:38
Ca ne marche pas.
cs_krevette Messages postés 137 Date d'inscription lundi 14 octobre 2002 Statut Membre Dernière intervention 21 janvier 2009
9 mars 2006 à 14:27
je pense qu'il ne faut pas chercher plus loin que ca :

$ret.=' <select name="Col1[0][]" id="Col1[0]" size="4" multiple style="width: 150px">';
$ret.=' <option value="Valeur 1" selected>Valeur 1</option>';
$ret.=' <option value="Valeur 2" selected>Valeur 2</option>';
...
$ret.=' </select>

';
$ret.=' <select name="Col1[1][]" id="Col1[1]" size="4" multiple style="width: 150px">';
$ret.=' <option value="Valeur 6" selected>Valeur 6</option>';
$ret.=' <option value="Valeur 7" selected>Valeur 7</option>';
...
$ret.=' </select>

';

J'ai n'ais pas pris le temps de tester et je ne suis pas sur que le JS fonctionne avec cet id.

Elvicorne,
Je te laisse Tester
evlicorne Messages postés 2 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 9 mars 2006
9 mars 2006 à 14:08
Bonjour,

Qq mois ont passé depuis la dernière remarque.
En voici une nouvelle.
Comment faire pour traiter une collection de select du type :

$ret.=' <select name="Col1[0]" size="4" multiple style="width: 150px">';
$ret.=' <option value="Valeur 1" selected>Valeur 1</option>';
$ret.=' <option value="Valeur 2" selected>Valeur 2</option>';
$ret.=' <option value="Valeur 3" selected>Valeur 3</option>';
$ret.=' <option value="Valeur 4" selected>Valeur 4</option>';
$ret.=' <option value="Valeur 5" selected>Valeur 5</option>';
$ret.=' </select>

';
$ret.=' <select name="Col1[1]" size="4" multiple style="width: 150px">';
$ret.=' <option value="Valeur 6" selected>Valeur 6</option>';
$ret.=' <option value="Valeur 7" selected>Valeur 7</option>';
$ret.=' <option value="Valeur 8" selected>Valeur 8</option>';
$ret.=' <option value="Valeur 9" selected>Valeur 9</option>';
$ret.=' <option value="Valeur 10" selected>Valeur 10</option>';
$ret.=' </select>

';

Je n'arrive pas a trouver la solution.
mcpierrot Messages postés 2 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 10 août 2005
10 août 2005 à 18:39
autant pour moi j ai mal lu le debut ^^
désolé
mcpierrot Messages postés 2 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 10 août 2005
10 août 2005 à 18:38
Je n ai pas le eu le temps de lire tous les commentaires donc je sais pas si ca a deja été dit mais pour pouvoir récupérer les éléments dans un tableau on met []
exemple:
<select name="ss_projet[]" multiple size="4">
avec ca on le tableau $_REQUEST['ss_projet'][]

si tout ca est encore flou allez voir là :
http://www.phpindex.com/trucsetastuces/trucsetastuces_lire.php3?element=19
fluminis Messages postés 73 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 20 juin 2005
14 juin 2005 à 22:59
à mon avis ce que tu veux faire doit etre fait en javascript coté client et non en php cote serveur.
Insere dans ta page html une balise script et tu fais une fonction qui boucle sur tous les elements du select et tu les selectionnes un à un. Tu mets ensuite sur ta page un p'tit lien qui appel la fonction javascript et voila...
cs_cacoun Messages postés 59 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 21 mai 2013
14 juin 2005 à 17:29
Bonjour à tous...

Dans la fonction select multiple, est-il possible par exemple de créer un bouton "tout sélectionner".

Si oui, merci de me dire comment on fait, car là je suis obligé de marqué "appuyer sur ctrl pour en sélectionner plusieurs"

merci d'avance
cs_chouchou59 Messages postés 7 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 13 mai 2005
25 févr. 2005 à 17:28
Bonjour à tous.
Merci vatoo pour ta reponse, effectivement ca marche mieux mais c'est pas encore ca car là ca me selectionne tous mes éléments même ceux qui ne sont pas sélectionné.

Si quelqu'un peut m'aider ca serait cool.

merci et bon week end a tous
cs_vatoo Messages postés 55 Date d'inscription mardi 29 mai 2001 Statut Membre Dernière intervention 1 juillet 2005
18 févr. 2005 à 15:33
Merci, code très utile.

Effectivement, le script original peut ne pas fonctionner. En effet, il vaut mieux mettre le options[a].selected = "selected", comme l'a mis jeca plutot que options[a].selected=TRUE. Cela semble mieux fonctionner.
cs_chouchou59 Messages postés 7 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 13 mai 2005
4 févr. 2005 à 15:09
Bonjour a vous.

Je suis en train de réaliser un planning en php et j'ai le problème de la récupération des données dans mon select multiples.

J'ai repris le code de Mc peter et j'ai l'erreur :
Warning: Invalid argument supplied for foreach()

Donc j'ai essayer le code de jeca et là je n'ai rien du tt qui s'affiche.

C'est pour ces raisons que je vous demande votre aide.

merci d'avance
pgpp Messages postés 58 Date d'inscription dimanche 16 mai 2004 Statut Membre Dernière intervention 2 septembre 2004
4 janv. 2005 à 16:53
Pour conclure cette conversation longue de deux ans, je vous propose une bête solution :

Problème :
name='vin[]' fonctionne avec PHP mais pas avec JS
name='vin' fonctionne avec JS mais pas avec PHP

Solution :
<select multiple name="vin[]" id="vin">

Ainsi autant JS que PHP peut être utilisé !

Bonne continuation à tout le monde !
cs_krevette Messages postés 137 Date d'inscription lundi 14 octobre 2002 Statut Membre Dernière intervention 21 janvier 2009
2 janv. 2005 à 02:16
tu peux récuperer les valeurs comme ca

for($i=0; $i<count($vin); $i++){
echo $vin[$i].'
';
}

si tu utilise cette technique...

<select multiple name="vin[]">
<option value="bordeaux">bordeaux</option>
<option value="beaujolais">beaujolais</option>
<option value="loire">loire</option>
</select>

krevette
Bonne Année 2005
fanf2603 Messages postés 1 Date d'inscription dimanche 2 janvier 2005 Statut Membre Dernière intervention 2 janvier 2005
2 janv. 2005 à 00:53
cool ça marche

par contre j'aimerais afficher toutes les valeurs de la liste avec juste un truc du type
echo "$valeur";

mais je n'ai que la dernière valeur qui s'affiche !
ou plus simplement le but final est : ou de m'envoyer un mail avec toutes les valeurs du résultat ou bien les insérer dans une table de base de données

Ces deux choses je sais faire quand il s'agit d'une seule variable que ce soit des boutons radio ou un champ de texte, bref, y'a-t-il moyen de rassembler tous ces résultats en une seule variable? ou existe-t-il un autre moyen? MERCI ET BONNE ANNEE !
runan Messages postés 5 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 février 2006
28 déc. 2004 à 21:19
merci krevette
juste ce qu'il me fallait
cs_krevette Messages postés 137 Date d'inscription lundi 14 octobre 2002 Statut Membre Dernière intervention 21 janvier 2009
27 déc. 2004 à 10:49
un truc tout simple pour récupérer les valeurs d'un select multiple

<select multiple name="vin[]">
<option value="bordeaux">bordeaux</option>
<option value="beaujolais">beaujolais</option>
<option value="loire">loire</option>
</select>

trouver sur nexen.net

http://www.nexen.net/docs/php/annotee/language.variables.external.form.php

ciao @++
fluminis Messages postés 73 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 20 juin 2005
11 sept. 2004 à 20:28
Salut,

Merci pour ta source, vraiment tres utile.

J'etais confronte a un probleme: je devais recuperer le contenu de deux select et en plus je devais faire des traitements en javascript pour y ajouter des donnees...

Donc j'ai un peu modifier ton script pour qu'une unique fonction javascript puisse etre appelee plusieurs fois sur la page pour traiter plusieurs select dans plusieurs formulaires...

Voila ce que ca donne :

<script>
function PostSelect(myForm,mySelName){

// On compte le nombre d'item de la liste select
NbCol1 = myForm.elements[mySelName].length;

// On lance une boucle pour selectionner tous les items
for (a = 0; a < NbCol1; a++) {
myForm.elements[mySelName].options[a].selected = true;

}

// On modifie l'ID du champ select pour que PHP traite cette
// dernière comme un array
myForm.elements[mySelName].name += "[]";

// On soumet le formulaire
// myForm.submit();
}
</script>

Voila, j'ai commente la derniere ligne pour ne pas envoyer le formulaire. (si plusieurs appels a cette fonction on ne doit pas faire le submit la premiere fois)

Je l'utilise comme suit:
<form name="..." action="..." method="post" onSubmit="PostSelect(this,'select1');PostSelect(this,'select2');return verifForm(this);" >

avec la fonction verifForm qui se charge de faire des traitement et d'envoyer le formulaire...

Voila en esperant que ca puisse servir a quelqu'un.
pgpp Messages postés 58 Date d'inscription dimanche 16 mai 2004 Statut Membre Dernière intervention 2 septembre 2004
27 juin 2004 à 10:53
Pour ceux qui voudraient se passer du JavaScript :
Lorsqu'on poste un select multiple du style :
<select name='sel' multiple>
<option>A<option>B<option>C<option>D
</select>
Mettons qu'on sélectionne les options A, C et D, on aura dans la QUERY_STRING :
"sel=A&sel=C&sel=D"
Donc il suffit d'extraire chacune des valeurs pour les mettre dans un tableau :

$qs=explode('&',$_SERVER['QUERY_STRING']);
$i=0;
while(list(,$sel)=each($qs))
if(substr($ing,0,5)=='sel=')
$sel[$i++]=substr($sel,5);

On récupère ainsi un tableau $sel du type :
Array( [0] => 'A' , [1] => 'C' , [2] => 'D' )
Nerdz Messages postés 56 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 27 janvier 2005
5 juin 2004 à 23:04
Ah jai trouver ...
Jvois pas pk il y avait une boucle pour selectionner tout les éléments ...

Tk pour ceux qui avait un probleme il suffit d'enlever
// On lance une boucle pour selectionner tous les items
for (var a = 0; a < NbCol; a++)
{
cible.options[a].selected = "selected";
}
et sa marche parfaitement :)
Nerdz Messages postés 56 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 27 janvier 2005
5 juin 2004 à 22:55
Chez moi sa marche pas !

Le script rectifier par jeca me retourne toute les valeurs de la liste et celui original ne marche pas du tout ( erreur dans la page )
sdrdis Messages postés 22 Date d'inscription dimanche 30 septembre 2001 Statut Membre Dernière intervention 30 août 2006
21 déc. 2003 à 12:11
Par ce que dans <option value="Valeur 1">Valeur 1</option> il faut modifier la valeur entre guillemets.
ermorel Messages postés 3 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 20 juillet 2005
21 oct. 2003 à 21:44
Chez moi,

Dans le 1er script de mcpeter, rien ne s'affiche

Dans le script corrigé de jeca, tout s'affiche :
Valeur 1, Valeur 2, ... Valeur 5 et non pas les valeurs sélectionnées

Pouvez-vous m'éclairer.
Par avance, merci.

ermorel
McPeter Messages postés 134 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 18 avril 2013
24 mars 2003 à 14:09
:)
thx
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
24 mars 2003 à 13:14
parce que c'est un "pléonasme" : onclick est évènement javascript.
Le seul cas où c'est utilisé est le javascript sur un lien : [javascript:fonction() ]. Donc, cela n'empêche pas le fonctionnement, mais c'est du code superflu.

En ce qui concerne le tableau d'options, je n'ai ajouté qu'une ligne dans ta fonction, mais j'effectue une opération de moins. Personnellement, j'ai pris l'habitude d'utiliser cette méthode. Pour le reste, il faut demander à des pros du javascript ce qu'ils en pensent, ce que j'aimerais savoir aussi.

A+
McPeter Messages postés 134 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 18 avril 2013
24 mars 2003 à 12:46
oki .
merci pour les corrections sympa de ta part (encore un commentaire constructif ;o) )
petit détails ta syntaxe est plus rapide effectivement, mais je touve qu'une partit de la mienne simplifie l'usage ??
pour l'ID => en le renommant juste avant le traitement de submit(), on peut garder des noms d'élements utilisable directement.. plus simple que de stypuler à chaque fois "...elements['idAvec[]'].."
tu crois pas ?
mais un grand merci quand même car ça eclaircit pas mal :p


petite question ? pourquoi tu dis que onClick="javascript:commande()" c'est pas correct ??
ça fonctionne parfaitement pourtant ..

@++
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
24 mars 2003 à 08:48
Bonjour,

Quelques rectifications sur la copie:

<<l'astuce du "mon_id[]" plante en JavaScript >> => FAUX, cela fonctionne
<<onClick="javascript:PostSelect('Liste1')">> => syntaxe incorrecte :
<<onClick="PostSelect('Liste1')">> => syntaxe correcte.

Ci-dessous, lescript revu en fonction de ce qui précède :

<?php
// Traitement après post et affichage des valeurs du champ select
if (isset($HTTP_POST_VARS["Col"]))
{
foreach ($HTTP_POST_VARS["Col"] as $cle => $valeur)
{
echo $valeur . "
";
}
}
?>
<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(formulaire)
{
var cible = formulaire.elements["Col[]"];

// On compte le nombre d'item de la liste select
NbCol = cible.length;

// On lance une boucle pour selectionner tous les items
for (var a = 0; a < NbCol; a++)
{
cible.options[a].selected = "selected";
}

// On soumet le formulaire
formulaire.submit();
}
</script>
</head>


<form name="Liste1" method="post" action="">
<select name="Col[]" 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>



</form>

</html>
Rejoignez-nous