2010-03-09 9 views
198

Ho un modulo html con una casella di riepilogo selezionata dalla quale è possibile selezionare più valori perché la sua proprietà multipla è impostata su più. Considera che il metodo di forma è 'GET'. Il codice HTML per il modulo è il seguente:Come ottenere più valori selezionati della casella di selezione in php?

<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 per visualizzare i valori selezionati nella casella di riepilogo di selezione sulla display.php pagina. Quindi, come sono accessibili i valori selezionati sulla pagina display.php utilizzando l'array $_GET[].

+0

È possibile rinominare 'select2'? O qualcun altro controlla il modulo? –

risposta

335

Se si vuole che PHP trattare $_GET['select2'] come una serie di opzioni è sufficiente aggiungere le parentesi quadre al nome della select elemento come questo: <select name="select2[]" multiple …

Quindi è possibile acces la matrice nello script PHP

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

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

$_GET può essere sostituito da $_POST in base al valore <form method="…".

+1

per me sembra, che il browser non invii il parametro post/get se non è stato selezionato nulla della selezione multipla. come puoi forzare ad avere una matrice vuota, invece? – emfi

+0

Ho dovuto usare $ _POST ['select2'] invece di $ _GET ['select2'] –

+1

Questa è una vecchia risposta, ma questa è una risposta fuorviante! (name = "select2 []") è corretto come risposta @Coufu! – meYnot

152

Cambio:

<select name="select2" ... 

A:

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

In alcuni casi perché potrebbe non funzionare ancora? Non sto ottenendo successo con questo. –

+0

Questo è solo un punto! –

32

utilizzare il seguente programma per selezionare i più valori da 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/>"; 
} 

?> 
30

È possibile utilizzare questo codice per recuperare i valori da più di selezione casella combinata

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; 
} 
?> 
5

Questo mostrerà i valori selezionati:

<?php 

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

?> 
+1

Questo ha più difetti: 1) l'OP stava usando il metodo GET; 2) manca il passo più importante di aggiungere parentesi quadre al nome dell'elemento del modulo, come 'name =" select2 [] "'. – charlie

0

posso risolvere il mio problema con javascript + HTML. Prima I Controllare le opzioni selezionate e salvare la sua in un campo nascosto della mia forma:

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

Avanti, ottengo per posta quel campo e ottenere tutte la stringa ;-) Spero che sarà il lavoro per qualcuno di più . Grazie a tutti.

+1

Questo ha più difetti: 1) dipende dal JavaScript disponibile; 2) non separa i valori quando li uniscono in una singola stringa, rendendo quindi impossibile dividere la stringa in valori successivi. – charlie

+0

Questa risposta mi dà la direzione necessaria. Grazie. –

4
// 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"); 
     } 
     ... 

     ... 
    } 
?> 
0
foreach ($_POST["select2"] as $selectedOption) 
{  
    echo $selectedOption."\n"; 
} 
+0

questo non funziona ovviamente. –

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

È possibile scorrere direttamente come questo

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

o si può fare in questo modo

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

Si potrebbe fare in questo modo troppo. 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> 

Poi prendere la selezione multipla dalla seguente PHP codice di seguito. Stampa i valori multipli selezionati di conseguenza.

$shift=$_POST['selectDuration']; 

print_r($shift); 
Problemi correlati