1

私は生徒のためにオンラインリーディングテストを作成しようとしています。現在、データベースには「student」と「questions」の2つのテーブルがあります。'student'には、名前、グループ番号、質問への回答を含む各学生の行があります。質問列は、質問[1]、質問[2]などと呼ばれます。

「質問」には、ID、「最初」、「章」、「質問」の4つの列があります。'first'はtrue/falseフィールドであり、チャプターへの最初の質問である場合、その値は1です。whileループでそれらを呼び出します。

echo '<ol>';
$query = mysql_query("SELECT * FROM `question`");
while($row_q = mysql_fetch_assoc($query)) {
if($row_q['first']==1){
echo '<h2>Chapter '.$row_q['chapter'].'</h2><br>';
}
echo '<li>';
echo $row_q['question'];
echo '</li>';
echo '<br>';
}
echo '</ol>';

美しく響きます。現在、生徒が回答を入力してページの最後に送信できるように、各質問の下に入力フィールドを配置しようとしています。これどうやってするの?各フィールドに異なる番号で名前を付けたいので、for($ i = 1; $ i <= 10; $ i ++)ステートメントを使用してみましたが、どこに挿入しても、結果として同一のフィールドが隣り合っているか、私の質問が何度も繰り返されました。

私はすべての提案を受け入れます。ありがとう!

4

2 に答える 2

1

for ループを実行する必要はありません。すでにループに入っています :) 質問番号という変数を設定し、while ループでインクリメントするだけです。

$question_number =1;

echo '<ol>';
$query = mysql_query("SELECT * FROM `question`");
while($row_q = mysql_fetch_assoc($query)) {
    if($row_q['first']==1){
        echo '<h2>Chapter '.$row_q['chapter'].'</h2><br>';
    }
    echo '<li>';
    echo "<label>$question_number".$row_q['question']."</label>";
    echo "<input type='text' name='$row_q[\'ID\']'></input>";
    echo '</li>';
    echo '<br>';

    $question_number++; 
}
echo '</ol>';
于 2012-09-21T02:25:07.757 に答える
0

echo'<input name = "answer ['。htmlspecialchars($ row_q ['ID'])。']" type = "text" value = "" />';

質問テキストの下に...次に、PHP var_dump($ _ REQUEST)で回答を確認します...

編集:

保存された回答を表示するには、次のようにします。

echo '<input name="answer_' . $idx . '" type="text" ' .
  value="' . htmlspecialchars($student_row["answer_$idx"]) . '" />';

ループするときにカウンター$idxを維持します。

これは、回答が説明に従って生徒のテーブルにフラットに配置され、回答値の列に「answer_1」などの名前が付けられている場合です。

回答が別のテーブルで正規化されている場合は、テーブルを結合できます。

select * from question q left join answer a on a.question_id = q.question_id and
  a.student_id = <current student id>
于 2012-09-21T02:08:19.957 に答える