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.

Param-Ganak
la source
Ê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.

Alex Jasmin
la source
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[]" ...
Coufu
la source
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/>";
}

?>
rekha_sri
la source
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;
}
?>
Abdul Kalam Azad
la source
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"; 
Vivek
la source
5

Cela affichera les valeurs sélectionnées:

<?php

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

?>
ahmed
la source
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"); 
         } 
         ...

         ...
    }
?>
Rynika
la source
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);
Dulith De Costa
la source
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.

Drako
la source
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";  
}
SwR
la source