2011-06-17 178 views
0

我想弄清楚在后端处理这个问题的最佳方法是什么。当我提交我的表格时,我想验证是否有针对问题和答案的选择,但仍然能够正确回答正确的问题。验证用户输入

<?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> 
?> 
+1

你在问“最好的方法”,但你有没有实现“*任何*方式”? – zerkms

回答

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

使用frontend检查这两个问题的用户实际上已经提交了什么,如果是使用AJAX包裹在jQuery将此数据发送给后端,做任何检查你的需要,然后报告给用户。