2010-03-09 2 views
198

У меня есть html-форма, в которой есть окно выбора, из которого вы можете выбрать несколько значений, потому что его множественное свойство установлено на несколько. Рассмотрим метод формы: «GET». HTML код формы выглядит следующим образом:Как получить несколько выбранных значений поля select в 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>

Я хочу, чтобы отобразить выбранные значения в списке выбора на display.php странице. Итак, как выбранные значения доступны на странице display.php с использованием массива $_GET[].

+0

Можно ли переименовать 'select2'? Или кто-то другой контролирует форму? –

ответ

335

Если вы хотите PHP для лечения $_GET['select2'] как массив вариантов просто добавьте квадратные скобки имя выбора элемента как это: <select name="select2[]" multiple …

Затем вы можете Acces массив в вашем PHP скрипт

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

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

$_GET может быть заменен $_POST в зависимости от значения <form method="…".

+1

для меня кажется, что браузер не отправляет сообщение/get-parameter, если ничего не было выбрано для множественного выбора. как вы можете заставить иметь пустой массив, вместо этого? – emfi

+0

Мне пришлось использовать $ _POST ['select2'] вместо $ _GET ['select2'] –

+1

Это старый ответ, но это вводящий в заблуждение ответ! (name = "select2 []") является правильным, как @Coufu ответил! – meYnot

152

Изменение:

<select name="select2" ... 

To:

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

В некоторых случаях , почему это все еще не работает? Я не добился успеха в этом. –

+0

Это просто точка! –

32

Используйте следующую программу для выбора нескольких значений из выбора окна.

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

Вы можете использовать этот код для получения значений из множественного выбора со списком

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

Это покажет выбранные значения:

<?php 

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

?> 
+1

У этого есть несколько недостатков: 1) ОП использовал метод GET; 2) у него отсутствует самый важный шаг добавления квадратных скобок к имени элемента формы, например 'name =" select2 [] "'. – charlie

0

исправить мою проблему с JavaScript + HTML. Во-первых я проверки выбранных опций и сохранить его в скрытом поле моей формы:

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

Далее, я получаю по почте, что поле и получить всю строку ;-) Я надеюсь, что это будет работать на кого-то дополнительной , Спасибо всем.

+1

У этого есть несколько недостатков: 1) зависит от доступного JavaScript; 2) не разделяет значения при объединении их в одну строку, что делает невозможным впоследствии разбить строку на значения. – charlie

+0

Этот ответ дает мне необходимое направление. Спасибо. –

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

это не работает. –

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> 

Вы можете перебирать его непосредственно, как этот

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

или вы можете сделать это, как этот

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

Вы могли бы сделать, как это слишком. Это сработало для меня.

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

Затем возьмите множественный выбор из следующих PHP код ниже. Он печатает выбранные несколько значений соответственно.

$shift=$_POST['selectDuration']; 

print_r($shift);