我在这里有一个申请:APPLICATION
我所拥有的是一些问题,并且在复选框按钮的可能答案中与每个问题相关联,并且三个文本输入显示了每个答案的questionId,选项类型和标记数。
实际上,如果我遇到问题,每个人的分数都会回答。我想要尝试的是,对于每个问题的每个正确答案,它们与他们自己的文本输入相关联,显示它们的价值数量(在下面的Individual_Answer表中找到),否则对于所有不正确的答案,它们都值得{{ 1}}在他们的文本输入/
现在,这是此示例应用程序的数据库表:
问题:
0
Option_Table:
QuestionId (PK auto) QuestionNo SessionId (FK Session) OptionId (FK Option)
72 1 26 3
73 2 26 4
答案:
OptionId (PK Auto) OptionType
1 A-C
2 A-D
3 A-E
4 A-F
Individual_Answer:
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
实际代码如下:
AnswerId (PK auto) AnswerMarks
1 2
2 2
3 1
4 2
答案 0 :(得分:0)
首先,我建议您重新考虑数据库架构。你有更多的表来创建一个问题数据库,你需要检索一个问题的所有连接等都是昂贵的操作。
假设您希望HTML
看起来如下所示:
<div class="queWrap" id="question-72">
<h2 class="question-text">What is 4+4?</h2>
<h3>Answers: <span class="questionMarks">(this question is worth 2 points)</span></h3>
<div class="ck-button">
<label class="fixedLabelCheckbox">
<input type="checkbox" name="options_72[]" id="option-A" value="A">
<span>0</span>
</label>
</div>
<div class="ck-button">
<label class="fixedLabelCheckbox">
<input type="checkbox" name="options_72[]" id="option-B" value="B">
<span>4</span>
</label>
</div>
<div class="ck-button">
<label class="fixedLabelCheckbox">
<input type="checkbox" name="options_72[]" id="option-C" value="C">
<span>8</span>
</label>
</div>
<div class="ck-button">
<label class="fixedLabelCheckbox">
<input type="checkbox" name="options_72[]" id="option-D" value="D">
<span>16</span>
</label>
</div>
</div>
现在让我们说上面的查询result->fetch()
更加巧妙地重写:
$_Questions = array();
while( $qandaqrystmt->fetch() ) {
$_Questions[] = array('id'=>$qandaQuestionId,'num'=>$qandaQuestionNo,'content'=>$qandaQuestionContent,'type'=>$qandaOptionType,'answer'=>$qandaAnswer,'marks'=>$qandaAnswerMarks);
}
然后输出我们想要循环的问题并生成适当的HTML。我想指出,将正确的答案和问题一起发送给考生,即使它隐藏在html中也是非常愚蠢的。你会注意到这个HTML与你自己的HTML类似,但是有一个重要的改变:因为你只有一个表单元素围绕你的所有问题,每个问题的复选框数组需要一个唯一的名称。我选择将_(questionID)附加到每个数组,如此
(例如问题72)<input type="checkbox" name="options_72[]" id="option-D" value="D">
以下是使用heredoc
循环的方法foreach( $_Questions AS $question ) {
echo <<<EOT
<div class="queWrap" id="question-{$question['id']}">
<h2 class="question-text">{$question['content']}</h2>
<h3>Answers: <span class="questionMarks">(this question is worth {$question['marks']} points)</span></h3>
EOT;
$options = ['A','B','C','D','E','F'];
$lastOption = substr($question['type'], -1, 1);
foreach( $options as $opt ) {
echo <<<EOT
<div class="ck-button">
<label class="fixedLabelCheckbox">
<input type="checkbox" name="options_{$questions['id']}[]" value="$opt">
<span>$opt</span>
</label>
</div>
EOT;
if( $opt == $lastOption )
break;
}
}