如何从数据库中选择<select>语句?</select>

时间:2012-08-07 10:45:05

标签: php mysql html database

我不太确定如何正确地说出这个问题 - 但这仅仅是出于兴趣。我不得不从数据库加载信息并使用值预先填充表单。因此,对于文本框,它很简单,我只需设置值:

<input type="text" value="<?=$foo;?>" name="foobar">

然而,当我选择框时,我发现我的代码变得非常草率,因为我需要在某处放置一个selected值。所以我真的有两种选择,我不喜欢这两种选择:

$one = $two = "";
switch ($myval) {
  case "1": $one = " selected";
  case "2": $two = " selected";

}

然后在HTML中:

<select name="myval">
<option value="1"<?=$one;?>>One</option>
<option value="1"<?=$two;?>>Two</option>
</select>

或者另一种选择是在select:

的中间放置一个简写if语句
<select name="myval">
<option value="1"<?=($myval=="1") ? " selected" : "";?>>One</option>
<option value="1"<?=($myval=="2") ? " selected" : "";?>>Two</option>
</select>

看起来有点干净,但它仍然让我感到烦恼。

任何人都有更有效率的方法吗?当它只是一个Yes/No下拉框而且我必须为每个值编写愚蠢的if语句时,它更加难以理解。

同样的问题也适用于复选框。

4 个答案:

答案 0 :(得分:5)

在输出中创建包含所需数据的数组。绕过它。为其中的每个项目生成一个选项元素。

答案 1 :(得分:1)

作为Quentin的补充(只是一些帮助你的代码),我倾向于使用数组,如下所示:

<select name="myval">
    <?php
        $options = array(
            "1" => "One",
            "2" => "Two"
        );
        foreach ($options as $value => $text) {
            echo '<option value="' . $value . '"' . ($myval == $value ? ' selected' : '') . '>' . $text . '</option>';
        }
    ?>
</select>

答案 2 :(得分:1)

这种重复输出的最简单方法是给自己写一个函数,例如:

function selectbox(array $options, $name, $value = null) {
    $out = '<select name="' . $name . '">';
    foreach($options as $key => $text) {
        $out .= '<option value="' . $key. '"' . ($key == $value ? ' selected="selected"' : null) . '>' . $text . '</option>';
    }

    return $out . '</select>';
}

答案 3 :(得分:0)

有更多清洁代码的方法。找一个或发明自己的:))

对于select语句,我喜欢使用实用程序方法。 E.g:

<?= HTML::createSelect($name, $actualvalue, $optionslist, $passthrough) ?>

就行了。从DB中读取选项列表和实际值。 Passthrough用于添加HTML装饰器,例如id,class等。