如何在PHP中获取下拉框的多个选定值?

272

我有一个 HTML 表单,其中包含一个选择列表框,你可以从中选择多个值,因为它的 multiple 属性被设置为 multiple。考虑表单方法是 'GET'。表单的 HTML 代码如下:

{HTML代码}

<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页面上显示选择列表框中的选定值。那么如何使用$_GET[]数组在display.php页面访问所选的值。


你可以重命名 select2 吗?还是有其他人控制这个表单? - Damian Yerrick
11个回答

427
如果您想让PHP将$_GET['select2']视为选项数组,只需在选择元素的名称后面添加方括号,如下所示:<select name="select2[]" multiple …。然后您就可以在PHP脚本中访问该数组。
<?php
header("Content-Type: text/plain");

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

$_GET 可能会被替换为 $_POST,这取决于 <form method="…" 的值。


1
对我来说,如果在多选项中没有选择任何内容,浏览器似乎不会发送POST/GET参数。如何强制使用空数组? - emfi
我不得不使用 $_POST['select2'] 而不是 $_GET['select2']。 - Kyle Bridenstine
3
这是一篇旧回答,但它是一个误导性的回答!(name="select2[]")是正确的,正如@Coufu所回答的那样! - meYnot
如果您想要发送参数,那么必须有一个值;您可以在标签中添加 "selected"(即 <option value="" selected></option>),如果您可以容忍列表中有一个默认选项。您还可以使用CSS使默认选项不可见;但是,如果有人选择了其他选项,然后取消选择所有内容... 您可能会得到没有返回值的结果。因此... 使用GET没有干净的解决方案。 - apraetor
1
在POST和GET上使用[]都可以正常工作,但是使用GET时生成的URI太过糟糕了(例如:..multiselect.php?ms%5B%5D=1&ms%5B%5D=2)。 - Teson

200

更改:

<select name="select2" ...

收件人:

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

1
在某些情况下,为什么这仍然不起作用?我使用它没有成功。 - Mike Kormendy

45
你可以使用此代码从多选组合框中检索值。
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;
}
?>

35

使用以下程序从选择框中选择多个值。

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

?>

8
    <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"; 

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

         ...
    }
?>

5
这将显示所选的数值:
<?php

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

?>

4
有多个问题:1)OP正在使用GET方法;2)最重要的一步缺失,即将方框括号添加到表单元素名称中,例如name="select2[]" - charlie

4
你也可以这样做。对我来说很有效。
<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);

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;

下一步,我通过POST获取该字段并获取所有字符串;-) 我希望它对其他人有用。谢谢大家。

1
这段代码有多个缺陷:1)依赖于JavaScript可用;2)在将它们连接成单个字符串时没有分离值,因此后续无法将字符串拆分为值。 - charlie
这个回答给了我必要的指引。谢谢。 - Oleg Popov

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接