我不太确定如何正确措辞这个问题 - 但这真的只是出于兴趣。 我经常不得不从数据库中加载信息并用值预填充表单。 所以在文本框的情况下,这很容易,我只需设置值:
<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、类等。