我正在试图找出在后端处理这个问题的最佳方法。当我提交表单时,我想验证是否对问题和答案都做出了选择,但仍然能够为正确的问题找到合适的答案。
<?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>
?>
答案 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
将此数据发送到您的后端,执行任何检查需要,然后向用户报告。