2011-06-17 39 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將此數據發送給後端,做任何檢查你的需要,然後報告給用戶。