2011-06-17 9 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

まず、間違ってループしています。あなたは一度だけ行うことができたときに結果を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

はそうjQueryに包まれAJAXを使用している場合、あなたのバックエンドにこのデータを送信するために、ユーザが実際に両方の質問のために何を提出したことを確認するためにfrontendを使用して、あなたが必要なチェック何でも、その後に報告しますユーザー。