验证用户输入

时间:2011-06-17 02:18:52

标签: php

我正在试图找出在后端处理这个问题的最佳方法。当我提交表单时,我想验证是否对问题和答案都做出了选择,但仍然能够为正确的问题找到合适的答案。

<?php
<fieldset>

        <legend>Secret Questions</legend>

        <dl>

            <dt><label for="question1">Question #1:</label></dt>
        <dd>
            <select size="1" name="questions[]" id="question1">
                <option value="">- Select -</option>
                <?php
                while ( $row = mysqli_fetch_array ( $result, MYSQLI_ASSOC ) ) {
                    print "<option value=\"".$row['id']."\">".$row['question']."</option>\r";
                }
                ?>
             </select>
        </dd>

    </dl>

    <dl>

        <dt><label for="answer">Answer:</label></dt>
        <dd><input type="text" name="answers[]" id="answer" size="54" /></dd>

    </dl>

    <dl>

        <dt><label for="question2">Question #2:</label></dt>
        <dd>
            <select size="1" name="questions[]" id="question2">
                <option value="">- Select -</option>
                <?php
                mysqli_data_seek( $result, 0 );
                while ( $row = mysqli_fetch_array ( $result, MYSQLI_ASSOC ) ) {
                    print "<option value=\"".$row['id']."\">".$row['question']."</option>\r";
                }
                ?>
             </select>
        </dd>

    </dl>

    <dl>

        <dt><label for="answer">Answer:</label></dt>
        <dd><input type="text" name="answers[]" id="answer" size="54" /></dd>

    </dl>

    <dl class="submit">

        <input type="submit" name="submit" id="submit" value="Enter" />

    </dl>

</fieldset>
?>

2 个答案:

答案 0 :(得分:2)

嗯,首先,你错了。当你只能执行一次时,你将遍历结果两次。

将其放在文件的开头:

$options = "";
while ( $row = mysqli_fetch_array ( $result, MYSQLI_ASSOC ) ) { 
   $options .= "<option value=\"".$row['id']."\">".
                   $row['question']."</option>\r";
}

然后,将它放在您当前正在循环的位置:

<?php echo $options; ?>

现在,回答你的问题。

您当前正在将问题和答案存储为数组(<name>[]在PHP接收时转换为数组)。就个人而言,我可能会将它们存储为单独的标签 - 除非你真的需要迭代几个记录(并且看起来不像你当前的情况),否则将它们放在一个数组中并没有太大的收获。

如果确实需要使用数组,请务必分配索引。你这样做的方式与在PHP中分配索引的方式相同(只是没有引号 - 请参阅here了解更多信息)。这样您就可以让第一个选择<select name="question[q1]">,第一个答案为<input type="text" name="answers[q1]" id="answer" size="54" />,结果$ _REQUEST会有:

$_REQUEST['question'] = array(
                              'q1' => /*first question value*/,
                               ... );

$_REQUEST['answer']   = array(
                              'q1' => /*first answer value*/,
                               ... );

就数据存储而言,最好的是,这更像是一个用例问题。我想,将答案全部放在一个数组中可能更有利,但我不知道你的具体情况是什么。

要进行验证,这取决于您决定如何继续,但有很多PHP表单验证的示例。我想我会使用旧的引语,“一般结果留给读者练习。”

答案 1 :(得分:1)

使用frontend检查用户是否确实为这两个问题提交了任何内容,如果是,请使用AJAX包裹jQuery将此数据发送到您的后端,执行任何检查需要,然后向用户报告。