php多选下拉菜单

时间:2010-04-12 15:20:42

标签: php mysql

这是我的mysql和php代码布局:

我有3张桌子

  • tableA存储唯一的“人”信息
  • tableB存储唯一的“地点”信息
  • tableC不存储关于他们“已经”的人和地点的唯一信息。

这是我如何布置我的表格: - 插入“人”表A的大表格; “去过”表C. 在表单中,一个人多次选择插入“beenTo”的“地点”

我的问题是,当我正在编辑“人物”时,如何显示用户已选择在我的多选项下拉菜单中显示的内容?

我的下拉菜单会在查询“地点”表格时将其显示在多选下拉菜单中。当一个人去过一个地方时,如果有一个以上的“被淘汰”的地方,这个问题会出现吗?

3 个答案:

答案 0 :(得分:2)

Foreach选项,检查它们是否已经过它。然后将selected =“selected”属性添加到标记中,如果为true。

示例:

<select multiple="multiple">
    <option selected="selected">Rome</option>
    <option>France</option>
    <option selected="selected">Underpants</option>
</select>

在PHP中,这可能看起来像:

$beenTo = array("Rome","Underpants");
$places = array("Rome","France","Underpants");
?> <select multiple="multiple"> <?php
foreach($places as $place) {
    echo "<option";
    $found = false;
    foreach($beenTo as $placeBeenTo) {
        echo "value='$place'";
        if ($placeBeenTo == $place) {
            $found == true;
            echo " selected=\"selected\" ";
            break;
        }
    }
    if (!$found) echo ">";
    echo $place . "</option>";
}
?> </select> <?php

这可能是一种更有效的方法。

答案 1 :(得分:1)

为了澄清,您需要为select标签指定一个name属性,以允许多个选定的选项正常运行。

<form method="post" action="">
<select name="places[]" multiple="multiple">
<?php
$_POST += array('places' => array());
$places = array('fr' => 'France', 'cn' => 'China', 'jp' => 'Japan');
$beenTo = array_flip($_POST['places']);
foreach ($places as $place => $place_label) {
  $selected = isset($beenTo[$place]) ? ' selected="selected"' : '';
  echo '<option value="' . $place . '"' . $selected . '>' . $place_label . '</option>';
}
?>
</select>
<input type="submit" value="Save Changes" />
</form>

答案 2 :(得分:0)

<option id = 'example' <? if ($_POST['example']) echo 'selected' ?>>

但是你将使用$ _SERVER ['cookies']或其他缓存来存储过去的访问,而不是$ _POST数组..编辑带有极端的偏见