Come ottenere più valori selezionati della casella di selezione in php?


240

Ho un modulo HTML che ha una casella di riepilogo di selezione da cui è possibile selezionare più valori perché la sua proprietà multipla è impostata su più. Considera il metodo del modulo è "GET". Il codice html per il modulo è il seguente:

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

Voglio visualizzare i valori selezionati nella casella di elenco Seleziona sulla pagina display.php. Quindi come si accede ai valori selezionati sulla pagina display.php usando $_GET[]array.


Ti è permesso di rinominare select2? O qualcun altro controlla il modulo?
Damian Yerrick,

Risposte:


393

Se vuoi che PHP consideri $_GET['select2']un array di opzioni, aggiungi parentesi quadre al nome dell'elemento select in questo modo:<select name="select2[]" multiple …

Quindi puoi accedere all'array nel tuo script PHP

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

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

$_GETpuò essere sostituito in $_POSTbase al <form method="…"valore.


1
per me sembra che quel browser non invii il parametro post / get se non è stato selezionato nulla della selezione multipla. come si può forzare ad avere un array vuoto, invece?
emfi,

Ho dovuto usare $ _POST ['select2'] invece di $ _GET ['select2']
Kyle Bridenstine,

2
Questa è una vecchia risposta, ma questa è una risposta fuorviante! (name = "select2 []") è corretto come ha risposto @Coufu!
MeNon è il

@emfi Se si desidera inviare il parametro, deve esserci un valore; puoi aggiungere "selezionato" al tag (ad es. <option value="" selected></option>) se puoi tollerare di avere un'opzione predefinita nell'elenco. Puoi anche usare CSS per rendere invisibile l'opzione predefinita; tuttavia se qualcuno seleziona un'opzione diversa, quindi deseleziona tutto .. puoi finire senza che venga restituito alcun valore. Quindi .. non esiste una soluzione pulita utilizzando GET.
apraetor

1
L'aggiunta di [] funziona sia su POST che su GET, ma l'URI risultante (con GET) è troppo orribile (..multiselect.php? Ms% 5B% 5D = 1 & ms% 5B% 5D = 2)
Teson

182

Modificare:

<select name="select2" ...

Per:

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

In alcuni casi, perché potrebbe non funzionare? Non sto ottenendo successo con questo.
Mike Kormendy,

35

Utilizzare il seguente programma per selezionare i valori multipli dalla casella di selezione.

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

È possibile utilizzare questo codice per recuperare valori da una casella combinata a selezione multipla

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>

Puoi iterarlo direttamente in questo modo

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

o puoi farlo in questo modo

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

5

Questo mostrerà i valori selezionati:

<?php

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

?>

3
Questo ha molteplici difetti: 1) l'OP stava usando il metodo GET; 2) manca il passaggio più importante per aggiungere parentesi quadre al nome dell'elemento del modulo, come 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

Anche tu potresti fare così. Ha funzionato per me.

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

Quindi prendi la selezione multipla dal seguente codice PHP di seguito. Stampa i valori multipli selezionati di conseguenza.

$shift=$_POST['selectDuration'];

print_r($shift);

0

Risolvo il mio problema con javascript + HTML. Per prima cosa controllo le opzioni selezionate e le salvo in un campo nascosto del mio modulo:

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

Successivamente, ottengo per posta quel campo e ottengo tutta la stringa ;-) Spero che funzionerà per qualcuno di più. Grazie a tutti.


1
Questo ha diversi difetti: 1) dipende dal fatto che JavaScript sia disponibile; 2) non separa i valori quando li unisce in una singola stringa, rendendo quindi impossibile dividere la stringa in valori in un secondo momento.
Charlie

Questa risposta mi dà la direzione necessaria. Grazie.
Oleg Popov,

0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.