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

Signaler
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
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.
Messages postés
136
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
18 avril 2013

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"
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
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.
Messages postés
15
Date d'inscription
lundi 1 septembre 2003
Statut
Membre
Dernière intervention
15 février 2009

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 ?
Messages postés
136
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
18 avril 2013

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>

@++
Messages postés
4
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
15 février 2006

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"]);
?>
Messages postés
1
Date d'inscription
mercredi 22 février 2006
Statut
Membre
Dernière intervention
12 mai 2006

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.
Messages postés
28
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
19 juillet 2006

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";


}
Messages postés
2
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
9 mars 2006

Ca ne marche pas.
Messages postés
137
Date d'inscription
lundi 14 octobre 2002
Statut
Membre
Dernière intervention
21 janvier 2009

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
Messages postés
2
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
9 mars 2006

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.
Messages postés
2
Date d'inscription
mercredi 10 août 2005
Statut
Membre
Dernière intervention
10 août 2005

autant pour moi j ai mal lu le debut ^^
désolé
Messages postés
2
Date d'inscription
mercredi 10 août 2005
Statut
Membre
Dernière intervention
10 août 2005

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
Messages postés
73
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
20 juin 2005

à 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...
Messages postés
60
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2013

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
Messages postés
7
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
13 mai 2005

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
Messages postés
55
Date d'inscription
mardi 29 mai 2001
Statut
Membre
Dernière intervention
1 juillet 2005

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.
Messages postés
7
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
13 mai 2005

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
Messages postés
58
Date d'inscription
dimanche 16 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2004

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 !
Messages postés
137
Date d'inscription
lundi 14 octobre 2002
Statut
Membre
Dernière intervention
21 janvier 2009

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
Messages postés
1
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
2 janvier 2005

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 !
Messages postés
5
Date d'inscription
mercredi 11 juin 2003
Statut
Membre
Dernière intervention
14 février 2006

merci krevette
juste ce qu'il me fallait
Messages postés
137
Date d'inscription
lundi 14 octobre 2002
Statut
Membre
Dernière intervention
21 janvier 2009

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 @++
Messages postés
73
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
20 juin 2005

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.
Messages postés
58
Date d'inscription
dimanche 16 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2004

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' )
Messages postés
56
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
27 janvier 2005

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 :)
Messages postés
56
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
27 janvier 2005

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 )
Messages postés
22
Date d'inscription
dimanche 30 septembre 2001
Statut
Membre
Dernière intervention
30 août 2006

Par ce que dans <option value="Valeur 1">Valeur 1</option> il faut modifier la valeur entre guillemets.
Messages postés
3
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
20 juillet 2005

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
Messages postés
136
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
18 avril 2013

:)
thx
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
12
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+
Messages postés
136
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
18 avril 2013

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 ..

@++
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
12
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>