PHP表单错误验证

时间:2011-09-02 10:57:50

标签: php forms

我正在使用一些带有一些验证规则的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>  

任何想法都是为什么会这样?

2 个答案:

答案 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标记及其属性是大写的,现在常见的是使用小写。这种方式更标准。

相关问题