Récupérer toutes les valeurs d'un select multiple dans une variable php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 86 292 fois - Téléchargée 28 fois

Contenu du snippet

Après avoir passé plusieurs heures à chercher un script pour ça j'ai rien trouvé ..
et j'ai finalement réussi à dévelopé un truc sympa ..enfin pour ceux qui en auront l'utilité ;o)

le problème :
- Récupérer toutes les valeurs inscrites dans un champ select dans une variables php afin de traiter ces données séparément.
- le problème c'est qu'il fallait déjà au départ sélectionner tous les items du select pour les envoyer via un formulaire
- ensuite vient le traitement de la variable envoyé (qui n'est pas reconnu comme un tableau :o( )
- ensuite faire en sorte que l'id du champ select, reste totalemnt traitable en javascript (l'astuce du "mon_id[]" plante en JavaScript :o( )
-------------------------

ben j'ai fini par trouver ;o)

ce script permet de mettre plusieurs formulaire sur la même page et de pouvoir les traiter séparément et surtotu de récupérer facilement le contenu du champ select

j'ai intégré dans le script la lecture de la variable pour que le fonctionnement soit clair

petit détails (tant qu'à faire :p le script est fonctionnel IE6 et Net6 ;) )

Source / Exemple :


<?
/***********************************



// Traitement après post et affichage des valeurs du champ select
if(isset($_POST['Col1']) && !empty($_POST['Col1'])){
  $Col1_Array = $_POST['Col1']; 
  foreach($Col1_Array as $selectValue){
    echo $selectValue."<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" onSubmit="PostSelect(this.name)">
  <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="submit" value="Envoyer" />
</form>
</body>
</html>

A voir également

Ajouter un commentaire

Commentaires

cs_rt15
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.
McPeter
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"
cs_rt15
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.
Pollux84
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 ?
McPeter
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>

@++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.