我正在使用一些带有一些验证规则的php表单。
如果某些字段留空,则需要表单报告和错误消息,并要求用户填写该字段。
表单当前保留$ _POST数据的值,以便在发生错误时保留字段中的数据。
我遇到了两个字段(下拉列表)的问题,这些字段填充了数据库中的数据。 如果我填写这些字段,但在其他地方出现错误,表单会显示下拉列表中的值,但是当我更正错误并尝试提交表单时,它会告诉我下拉列表字段为空。
以下是他们的代码
<! Drop Down Menu to get student names from database !>
<SELECT NAME=studentName >
<OPTION VALUE=0 selected="selected" >
<?php if(isset($_POST['studentName'])) echo $_POST['studentName'];?>
<?php echo $options1?>
</SELECT>
任何想法都是为什么会这样?
答案 0 :(得分:1)
你不应该回应$_POST['studentName']
;你应该根据每个选项的值来检查它(它应该是PHP中的一个数组,你在<option>
循环中转换为foreach
的列表),然后设置{{1如果匹配则属性。
在旁注中,您的HTML无效;某些属性未引用,评论应位于selected
,而不是<!-- ... -->
。
答案 1 :(得分:1)
对于初学者,&lt; option value = 0 selected =“selected”&gt;表示始终选择选项0。
您可以执行以下操作,如果此代码段存在错误,请原谅我,但它应该让您大致了解如何实现您想要的内容:
<?php
$myOptions = array(
'0' => ' --- nothing selected ---',
'1' => 'Apples',
'2' => 'Bananas',
// ...
);
?>
<select name="studentName">
<? php
foreach($myOptions as $key => $value ) {
$selected = isset($_POST['theOption']) && $_POST['theOption'] == $key ? 'selected="selected"' : "";
echo '<option value="' . $key . '" '. $selected . '>' . $value . "</option>";
}
?>
</select>
您可以使用备用PHP语法清理上面的内容:
http://php.net/manual/en/control-structures.alternative-syntax.php
这不是您的错误的一部分,但只是一个很好的实践考虑,您的一些HTML标记及其属性是大写的,现在常见的是使用小写。这种方式更标准。