Comment obtenir plusieurs valeurs sélectionnées de la boîte de sélection en php?


240

J'ai un formulaire html qui a une zone de liste de sélection dans laquelle vous pouvez sélectionner plusieurs valeurs car sa propriété multiple est définie sur multiple. Considérez que la méthode du formulaire est «GET». Le code html du formulaire est le suivant:

<html>
    <head>
    <title>Untitled Document</title>
    </head>
    <body>
    <form id="form1" name="form1" method="get" action="display.php">
      <table width="300" border="1">
        <tr>
          <td><label>Multiple Selection </label>&nbsp;</td>
          <td><select name="select2" size="3" multiple="multiple" tabindex="1">
            <option value="11">eleven</option>
            <option value="12">twelve</option>
            <option value="13">thirette</option>
            <option value="14">fourteen</option>
            <option value="15">fifteen</option>
            <option value="16">sixteen</option>
            <option value="17">seventeen</option>
            <option value="18">eighteen</option>
            <option value="19">nineteen</option>
            <option value="20">twenty</option>
          </select>
          </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input type="submit" name="Submit" value="Submit" tabindex="2" /></td>
        </tr>
      </table>
    </form>
    </body>
    </html>

Je souhaite afficher les valeurs sélectionnées dans la zone de liste de sélection sur la page display.php. Alors, comment les valeurs sélectionnées sont-elles accessibles sur la page display.php en utilisant un $_GET[]tableau.


Êtes-vous autorisé à renommer select2? Ou quelqu'un d'autre contrôle-t-il le formulaire?
Damian Yerrick

Réponses:


393

Si vous voulez que PHP traite $_GET['select2']comme un tableau d'options, ajoutez simplement des crochets au nom de l' élément select comme ceci:<select name="select2[]" multiple …

Ensuite, vous pouvez accéder au tableau dans votre script PHP

<?php
header("Content-Type: text/plain");

foreach ($_GET['select2'] as $selectedOption)
    echo $selectedOption."\n";

$_GETpeut être remplacé par $_POSTselon la <form method="…"valeur.


1
il me semble que ce navigateur n'envoie pas le paramètre post / get si rien n'a été sélectionné parmi la sélection multiple. comment pouvez-vous forcer à avoir un tableau vide à la place?
emfi

J'ai dû utiliser $ _POST ['select2'] au lieu de $ _GET ['select2']
Kyle Bridenstine

2
C'est une vieille réponse, mais c'est une réponse trompeuse! (name = "select2 []") est correct car @Coufu a répondu!
meYnot

@emfi Si vous voulez que le paramètre soit envoyé, il doit y avoir une valeur; vous pouvez ajouter "sélectionné" à la balise (c'est-à-dire <option value="" selected></option>) si vous pouvez tolérer d'avoir une option par défaut dans la liste. Vous pouvez également utiliser CSS pour rendre l'option par défaut invisible; Cependant, si quelqu'un sélectionne une option différente, désélectionne tout. Vous pouvez vous retrouver sans qu'aucune valeur ne soit retournée. Donc .. il n'y a pas de solution propre en utilisant GET.
apraetor

1
L'ajout de [] fonctionne pour moi à la fois sur POST et GET, mais l'URI résultant (avec GET) est tout simplement trop horrible (..multiselect.php? Ms% 5B% 5D = 1 & ms% 5B% 5D = 2)
Teson

182

Changement:

<select name="select2" ...

À:

<select name="select2[]" ...

Dans certains cas, pourquoi cela ne fonctionne-t-il toujours pas? Je n'obtiens pas de succès avec ça.
Mike Kormendy

35

Utilisez le programme suivant pour sélectionner les valeurs multiples dans la zone de sélection.

multi.php

<?php
print <<<_HTML_
<html>
        <body>
                <form method="post" action="value.php">
                        <select name="flower[ ]" multiple>
                                <option value="flower">FLOWER</option>
                                <option value="rose">ROSE</option>
                                <option value="lilly">LILLY</option>
                                <option value="jasmine">JASMINE</option>
                                <option value="lotus">LOTUS</option>
                                <option value="tulips">TULIPS</option>
                        </select>
                        <input type="submit" name="submit" value=Submit>
                </form>
        </body>
</html>
_HTML_

?>

value.php

<?php
foreach ($_POST['flower'] as $names)
{
        print "You are selected $names<br/>";
}

?>

35

Vous pouvez utiliser ce code pour récupérer des valeurs à partir de plusieurs zones de liste déroulante de sélection

HTML:

<form action="c3.php" method="post">
  <select name="ary[]" multiple="multiple">
    <option value="Option 1" >Option 1</option>
    <option value="Option 2">Option 2</option>
    <option value="Option 3">Option 3</option>
    <option value="Option 4">Option 4</option>
    <option value="Option 5">Option 5</option>
  </select>
  <input type="submit">
</form>

PHP:

<?php
$values = $_POST['ary'];

foreach ($values as $a){
    echo $a;
}
?>

7
    <html>
<head>
<title>Untitled Document</title>
</head>
<body>
<form id="form1" name="form1" method="get" action="display.php">
  <table width="300" border="1">
    <tr>
      <td><label>Multiple Selection </label>&nbsp;</td>
      <td><select name="select2[]" size="3" multiple="multiple" tabindex="1">
        <option value="11">eleven</option>
        <option value="12">twelve</option>
        <option value="13">thirette</option>
        <option value="14">fourteen</option>
        <option value="15">fifteen</option>
        <option value="16">sixteen</option>
        <option value="17">seventeen</option>
        <option value="18">eighteen</option>
        <option value="19">nineteen</option>
        <option value="20">twenty</option>
      </select>
      </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="Submit" tabindex="2" /></td>
    </tr>
  </table>
</form>
</body>
</html>

Vous pouvez l'itérer directement comme ceci

foreach ($_GET['select2'] as $value)
    echo $value."\n";

ou vous pouvez le faire comme ça

$selectvalue=$_GET['select2'];
foreach ($selectvalue as $value)
    echo $value."\n"; 

5

Cela affichera les valeurs sélectionnées:

<?php

    if ($_POST) { 
        foreach($_POST['select2'] as $selected) {
            echo $selected."<br>";
        }
    }

?>

3
Cela présente plusieurs défauts: 1) l'OP utilisait la méthode GET; 2) il manque l'étape la plus importante d'ajout de crochets au nom de l'élément de formulaire, comme name="select2[]".
charlie

5
// CHANGE name="select2" TO name="select2[]" THEN
<?php
  $mySelection = $_GET['select2'];

  $nSelection = count($MySelection);

  for($i=0; $i < $nSelection; $i++)
   {
      $numberVal = $MySelection[$i];

        if ($numberVal == "11"){
         echo("Eleven"); 
         }
        else if ($numberVal == "12"){
         echo("Twelve"); 
         } 
         ...

         ...
    }
?>

2

Vous pourriez aussi faire ça. Cela a fonctionné pour moi.

<form action="ResultsDulith.php" id="intermediate" name="inputMachine[]" multiple="multiple" method="post">
    <select id="selectDuration" name="selectDuration[]" multiple="multiple"> 
        <option value="1 WEEK" >Last 1 Week</option>
        <option value="2 WEEK" >Last 2 Week </option>
        <option value="3 WEEK" >Last 3 Week</option>
         <option value="4 WEEK" >Last 4 Week</option>
          <option value="5 WEEK" >Last 5 Week</option>
           <option value="6 WEEK" >Last 6 Week</option>
    </select>
     <input type="submit"/> 
</form>

Ensuite, prenez la sélection multiple du code PHP suivant ci-dessous. Il imprime les valeurs multiples sélectionnées en conséquence.

$shift=$_POST['selectDuration'];

print_r($shift);

0

Je résout mon problème avec javascript + HTML. Je vérifie d'abord les options sélectionnées et l'enregistre dans un champ caché de mon formulaire:

for(i=0; i < form.select.options.length; i++)
   if (form.select.options[i].selected)
    form.hidden.value += form.select.options[i].value;

Ensuite, je reçois par courrier ce champ et j'obtiens toute la chaîne ;-) J'espère que cela fonctionnera pour quelqu'un de plus. Merci à tous.


1
Cela a plusieurs défauts: 1) dépend du JavaScript disponible; 2) ne sépare pas les valeurs lors de leur jonction en une seule chaîne, ce qui rend impossible de diviser la chaîne en valeurs plus tard.
charlie

Cette réponse me donne la direction nécessaire. THX.
Oleg Popov

0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.