我有一个数字字段和一个下拉列表,用作表单的一部分,如下所示:
<label for="height">Height/Thickness</label>:
<input <?php if (empty($messages) == false) {echo 'value="'.htmlentities($_POST['height'], ENT_QUOTES).'"';} ?> type="number" name="height" id="height" />
<select class="dimensions" name="heightunit">
<option value="">Select...</option>
<option value="mm">mm</option>
<option value="cm">cm</option>
<option value="m">m</option>
<option value="in">in</option>
</select>
该$messages
变量是一个数组,用于存储表单生成的任何错误消息。<?php
&标记之间的位?>
是为了确保如果出现错误,它将回显用户在提交之前输入的值,从而节省他们再次输入数据的时间(和挫败感)。
我想对下拉列表做同样的事情。目前,我在每个选项标签中添加以下行(类似于这个答案):
<?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'mm') {echo 'selected="selected"';} ?>
但它真的很不整洁:
....
<select class="dimensions" name="lengthunit">
<option value="" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == '') {echo 'selected="selected"';} ?>>Select...</option>
<option value="mm" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'mm') {echo 'selected="selected"';} ?>>mm</option>
<option value="cm" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'cm') {echo 'selected="selected"';} ?>>cm</option>
<option value="m" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'm') {echo 'selected="selected"';} ?>>m</option>
<option value="in" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'in') {echo 'selected="selected"';} ?>>in</option>
</select>
我的问题是 - 有没有更优雅的方法来做到这一点,而不在每个选项标签内添加 php 标签?
(我的思路是:
if (OPTION_VALUE === $_POST['heightunit']) {echo 'selected="selected"';}
。有什么可以代替的OPTION_VALUE
吗?)
编辑:我想这样做的原因是因为我想将其应用于超过 200 个国家的列表,我只想编写“好代码”。
**编辑:现在回想起来,它看起来很容易......无论如何,谢谢你的帮助,这就是我最后的结果:
function lengthlist($selectname) {
$distanceunits = array('','mm','cm','m','in');
foreach ($distanceunits as $value) {
if ($value == '') {$value = '...';}
if ($value == $_POST["$selectname"]) {
echo "<option value=\"$value\" selected=\"selected\">$value</option>";
} else {
echo "<option value=\"$value\">$value</option>";
}
}
}