我有一个测验测试页面,我想测试用户的知识。 我这样做是有效的,但它有一个缺陷。 这是我用mysql数据库中的问题和(可能的)答案填充测验的代码:
echo '<form action="'.$_SERVER["PHP_SELF"].'" method="post" id="quiz">';
$sql=mysql_query("SELECT idtest,no_q,title_q,q,idteste_dtl,corect_a from teste_dtl where idtest=".$idtest." order by no_q");
$num = mysql_num_rows($sql);
$i=0;
while ($row=mysql_fetch_row($sql)) {
echo '<h3 style="color:#e74c3c">'.$row[2].'</h3>';
echo '<p data-toggle="tooltip"><strong>'.$row[3].'</strong></p>';
$ssql=mysql_query("select letter,answer from tests_answers where idtest=".$idtest." and idq=".$row[4]." order by letter");
while ($rrow=mysql_fetch_row($ssql)) {
$Label = 'question-'.$row[1].'-answers-'.$rrow[0];
echo '<div>';
echo '<label class="radio">';
echo '<input type="radio" data-toggle="radio" name="answers['.$row[1].']" id="'.$Label.'" value="'.$rrow[0].'" unchecked>';
echo $rrow[0].') '.$rrow[1];
echo '</label>';
echo '</div>';
}
echo ' <br>';
echo '<input type="hidden" name="question['.$row[1].']" value="'.$row[2].'">';
echo '<input type="hidden" name="corect_a['.$row[1].']" value="'.$row[5].'">';
echo '<input type="hidden" name="idemp" value="'.$idemp.'">';
echo '<input type="hidden" name="idtest" value="'.$idtest.'">';
echo '<input type="hidden" name="idfirm" value="'.$idfirm.'">';
echo '<input type="hidden" name="namefirm" value="'.$namefirm.'">';
echo '<input type="hidden" name="totalq" value="'.$num.'">';
}
echo' <input type="submit" class="btn btn-hg btn-primary" value="Check answers" />';
echo '</form>';
所以基本上我从2个表中生成一对文本(问题)+ radioboxes(可能的答案)。表1称为“teste_dtl”,表2称为“tests_answers”。 除了有一个bug之外,一切都很完美。如果用户没有检查问题中的单选框......我的代码似乎认为第一个单选框已被选中。 所以我有类似的东西:
Question ONE
Body of question one... some text... and so on
A) first answer
B) second answer
C) third answer
D) fourth answer
Question TWO
Body of question two... some text... and so on
A) first answer
B) second answer
C) third answer
D) fourth answer
...
所以A,B,C,D ......是复选框(输入类型无线电)。它们从一开始就不受限制。 当我发布结果时...显然没有回答的问题(没有检查无线电)被认为是“回答答案A”“
我该如何避免这种情况? 谢谢
答案 0 :(得分:1)
单选按钮应该始终具有值。
HTML specification说:“如果共享相同控件名称的集合中没有单选按钮最初打开,则用户代理行为用于选择最初打开的控件是未定义的。”实际上,这意味着,根据浏览器和/或用于提交表单的Javascript库(如果您使用的是AJAX),您可能会得到不可预测的结果。
您应该通过插入checked="checked"
来强制选择其中一个按钮:
$first_answer = true; // Set a flag for the first answer
while ($rrow=mysql_fetch_row($ssql)) {
$Label = 'question-'.$row[1].'-answers-'.$rrow[0];
echo '<div>';
echo '<label class="radio">';
// Output the beginning of the INPUT tag
echo '<input type="radio" data-toggle="radio" name="answers['.$row[1].']" id="'.$Label.'" value="'.$rrow[0].'"';
if ( $first_answer ) { // When the flag is true...
echo ' checked="checked"'; // ...add the 'checked' parameter...
$first_answer = false; // ...and set the flag to false for the next round
}
echo '/>'; // Close the INPUT tag
echo $rrow[0].') '.$rrow[1];
echo '</label>';
echo '</div>';
}
另一种选择是添加一些Javascript来检查用户是否选择了答案。