2016-02-12 102 views
0

我有一个<select>与多个允许的选择在同一时间。我希望在提交表单后保留所有选定的值。这个怎么做?如何记住选择标签中的多个选定选项?

我试过followig,但对于一个选择这只作品...

<select multiple name="example" method="POST" action="<? echo $_SERVER['PHP_SELF']?>"> 
    <option value="optA" <?php if ($_POST['example'] === "optA"){echo 'selected="selected"';} ?>>Option A</option> 
    <option value="optB" <?php if ($_POST['example'] === "optB"){echo 'selected="selected"';} ?>>Option B</option> 
</select> 

预期地将始终遵循返回最新选定的选项:

<?php if (isset($_POST['example'])){echo $_POST["example"];} ?> 

那么,怎样才能实现我我的目标?许多thx提前! :)

+0

为什么使用“===”?你应该使用“==” – FareedMN

+0

尝试执行'print_r($ _ POST ['example'])'而不是回显 – Tomanow

+1

更改'name =“example”'为'name =“example []”'并执行'print_r($ _POST [示例])'。 – Apb

回答

2

使用数组作为POST变量,就像这样:

<select multiple name="example[]"> 
    // options 
</select> 

而像这样进行检索:

print_r($_POST['example']); 

我建议存储在数组作为选项值和名称好了,所以它更容易处理:

$options = array(
    array(
    'value' => 0, 
    'name' => 'A' 
), 
    array(
    'value' => 1, 
    'name' => 'B' 
), 
    array(
    'value' => 2, 
    'name' => 'C' 
), 
    array(
    'value' => 3, 
    'name' => 'D' 
) 
); 

然后,只需简单地创建你选择的选项,使用foreach循环,并检查当前选项是否在您的帖子变量中:

<select multiple name="example[]"> 
    <?php foreach ($options as $option) { ?> 
    <option value="<?php echo $option['value']; ?>"<?php echo (isset($_POST['example']) && in_array($option['value'], $_POST['example'])) ? ' selected="selected"' : ''; ?>><?php echo $option['name']; ?></option> 
    <?php } ?> 
</select> 
+0

感谢这很好地工作!我改变了PHP为'<?php if(in_array(“optA”,$ _POST [“example”])){echo'selected =“selected”';}?>'。你认为这是最好的方式吗? – Alex