[英]Checkbox Quiz Multiple Choice
我正在准备一个测验,对于一个问题可以有很多答案。 复选框使用数组存储,并使用ab_name
列对照我的answers_bank
表进行检查(存储正确答案的位置)。
我只想做的是-如果已检查的答案在Answers_bank表中,则回显为“正确”,否则为不正确的复选框为回显“不正确”。
我尝试执行此操作的方法无效,因为它在每次迭代过程中比较数组中的每个答案,并为其他答案返回错误(因为它不相等)。 此图像应解释我遇到的问题:
这是我已设置的代码的片段:
返回复选框问题,如图像的第一部分所示:
foreach ($qresults as $aresults) {
$selected = $aresults["ab_name"];
$ab_id = $aresults["ab_id"];
?>
<input type="checkbox" name="checkbox[]"
value="<?php echo $aresults["ab_name"]; ?>"> <?php echo $aresults["ab_name"]; ?> <br>
<?php
}
?>
旨在检查答案是否正确
foreach ($results as $row) {
$qb_id = $row['qb_id'];
$q_answer = $_POST["q$qb_id"];
$sql = "SELECT * FROM answers_bank WHERE ab_qb_id = :qb_id AND ab_correct = :correct";
$stmt = $db->prepare($sql);
$stmt->bindValue(':qb_id', $qb_id);
$stmt->bindValue(':correct', "correct");
$stmt->execute();
$qresults = $stmt->fetchAll();
foreach ($qresults as $cresults) {
if (is_array($q_answer)) {
foreach ($q_answer as $checkbox) {
if ($checkbox == $cresults["ab_name"]) {
echo "You said : " . $checkbox . " ... which is the correct answer!</br>";
} else if ($checkbox != $cresults["ab_name"]) {
echo "You said : " . $checkbox . " ... which is incorrect</br>";
}
}
}
}
}
我可以对此进行任何其他解决方案或更正吗? 非常感谢!
首先存储所有正确的答案,因此您不必遍历所有答案和表单中的响应。 相反,您可以仅遍历表单响应并检查所选值是否在正确响应的数组中。
foreach ($results as $row) {
$qb_id = $row['qb_id'];
$q_answer = $_POST["q$qb_id"];
$sql = "SELECT * FROM answers_bank WHERE ab_qb_id = :qb_id AND ab_correct = :correct";
$stmt = $db->prepare($sql);
$stmt->bindValue(':qb_id', $qb_id);
$stmt->bindValue(':correct', "correct");
$stmt->execute();
$qresults = $stmt->fetchAll();
$correct_answers = array();
foreach ($qresults as $cresults) {
array_push($correct_answers, $cresults["ab_name"]);
}
if (is_array($q_answer)) {
foreach ($q_answer as $checkbox) {
if (in_array($checkbox, $correct_answers)) {
echo "You said : " . $checkbox . " ... which is the correct answer!</br>";
} else {
echo "You said : " . $checkbox . " ... which is incorrect</br>";
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.