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 263 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_jeca
Messages postés
341
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
14 juillet 2011
11 -
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>
McPeter
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 ..

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

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.