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


How to select a <select> statement from 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>

或者另一种选择是在选择的中间放置一个简写 if 语句:

<select name="myval">
<option value="1"<?=($myval=="1") ? " selected" : "";?>>One</option>
<option value="1"<?=($myval=="2") ? " selected" : "";?>>Two</option>
</select>

看起来稍微干净一点,但它仍然困扰着我。

有人有更有效的方法吗? 当它只是一个Yes/No下拉框时,它更加令人兴奋,我必须为每个值编写愚蠢的 if 语句。

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

使用输出中所需的数据创建一个数组。循环它。为其中的每个项生成一个选项元素。

作为 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>

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

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>';
}
实际上

有很多方法可以更干净的代码。找一个或发明自己的:)

对于选择语句,我喜欢使用实用程序方法。 例如:

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

那条线上的东西。从数据库中读取选项列表和实际值。直通用于添加 HTML 装饰器,例如 id、类等。