0

オンラインテストを書くように頼まれました。2 つのテーブルがあり、1 つには質問が含まれています (2 つのフィールド、1 つは ID 用、もう 1 つは質問テキスト用)。回答を保存するための別のテーブル (ID 用、質問 ID 用、回答用の 3 つのフィールドがあります)。

これまでに書いた方法は次のとおりです。

<form name="test" method="post" action="index.html">
    <div class="slideshowContainer">
         $question_query=dbquery("SELECT * FROM questions");
         while($question_array=dbarray($question_query)){
            echo'
            <div class="question">
               '.$question_array['question_text'].'
               <br />
               <textarea name="'.$question_array['id'].'"></textarea>
            </div>
            ';
         }
          echo'
          <input id="finish" type="submit" name="finish_test" value="send" />
    </div>
</form>';

ユーザーが質問をスライドとして表示し、特定の質問ごとに提供される各テキストエリアに回答を書き込むことができるように、サイクル プラグインも使用しています。

私ができないのは、if(isset($_POST['finish_test'])) の部分の書き方です。このように私が知っているように、受信したデータは配列の形式になっているからです。そのため、回答を保存してデータベースに送信するときに、別の for または while 要素が必要になるのではないかと考えました。

何を提案できますか?

4

1 に答える 1

0

確かに $_POST の結果をループする必要がありますが、コード内のテキスト領域ごとに異なる ID を作成すると便利です。そうすれば、どれがどの答えであるかを特定できます。そのために、私はこのようなことをします。

  while($question_array=dbarray($question_query)){
        i = 0;        
        echo'
        <div class="question".i>
           '.$question_array['question_text'].'
           <br />
           <input id='question' type='hidden' value="'.$question_array['id'].'"/> 
           <textarea name="answer".i></textarea>
        </div>'; 
         i++;
     }

i は 0 から始まり、質問が終わると終了することがわかっているので、それをループして $_POST['answer'.i] にアクセスし、挿入を行うことができます。

while ($_POST['answer'.$i]) {
      $i = 0;    
  //insert query after establishing connection, which i believe you got figured out 
      $sql = 'INSERT INTO ANSWERS VALUES ($_POST['answer'.$i],        $_POST['question'.$i])';//Note you must have the question id in some hidden input field
      $result = mysql_query( $sql, $conn );//where $conn is your connection object
    //after this you might want to do something with the $result, 
     $i++;
}
于 2013-10-12T12:08:07.760 に答える