PHP和HTML表单选择列表

时间:2012-02-16 04:01:46

标签: php html forms

我有一个正在运行的编辑记录页面,但是我遇到了一个小问题,其字段显示为从数据库引用关联值列表的选择下拉列表。

我在数据库中有一些带有下拉列表的字段,但用户可以输入一个不在值列表中的值,这是预期的正常行为。但是我在网上显示这个问题。以下是其中一个字段的代码:

<select name="category">
<?php
foreach($categories as $category) {
    $selected = "";
    if( $category == $record->getField('category') ){
            $selected = " selected";
    }
    $category = htmlspecialchars($category);
    ?>
    <option value="<?php echo $category; ?>"<?php echo $selected; ?>><?php echo         $category; ?></option>
<?php
}
?>
</select>

当字段中的值与valuelist中的某个选项匹配时,此方法很有效。但是,当字段为空或不匹配时,存在问题。如果该字段为空,我会自动显示第一个值列表选项 - 我可以通过添加一个空白选项来避开它。

如果字段中的值与值列表的选项不匹配,则它也不会出现 - 我还可以在所有值列表项之前显示顶部的值但是如果值与a值相同值列表项将出现两次:一次在顶部,然后在列表中的正常位置,这也是不理想的。我希望如果该值是值列表的成员,那么它将在列表中的正常位置被选中,这是上述代码所实现的。

之前有人提到这个场景并有任何指示吗?

谢谢, 史蒂夫

1 个答案:

答案 0 :(得分:1)

你是什么意思“领域”,你的意思是$record->getField('category')?如果您想要的是将该值包含在您的选择列表中,即使它不是$category数组中的条目,也请执行以下操作:

<select name="category">

    <?php

        $output = "";
        $selected = false;

        foreach ($categories as $category) {

            $output .= "<option value=\"$category\"";

            if ($category == $record->getField('category')) {
                $selected = true;
                $output .= " selected";
            }

            $output += ">$category</option>";
        }

        if (!$selected) {
            $chosen = $record->getField("category");
            $output = "<option value=\"$chosen\" selected>$chosen</option>" . $output;
        }

        echo $output;

    ?>

</select>