1

我正在尝试为我的学生建立一个在线阅读测试。我的数据库中目前有两个表:“学生”和“问题”。在“学生”中,每个学生都有一行,其中包含其姓名、组号和问题的答案。问题列称为问题[1]、问题[2],依此类推。

在“问题”中,我有 4 个列:ID、“第一”、“章节”和“问题”。'first' 是一个真/假字段,如果它是一章的第一个问题,它的值为 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 循环,您已经处于循环中:) 只需设置一个名为 question number 的变量并在 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 回答