2 回答
TA贡献1836条经验 获得超13个赞
需要所有正确的答案
首先,您需要选中choice输入复选框而不是单选按钮。单选按钮只能选择一次,而您可以有多个复选框。您还需要能够一次提交多个具有相同名称的文件,因此它必须是一组复选框。所以选择器应该是
<input name="choice[]" type="checkbox" value="<?php echo $row['id']; ?>" />
代替
<input name="choice" type="radio" value="<?php echo $row['id']; ?>" />
然后,当您收到它时,$_POST['choice']在PHP中是一个数组而不是单个值。
您可以执行COUNT()查询以查看有多少正确答案,然后通过检查返回的行数(由计数的数量)来查看是否全部获取了正确答案-如果它们相等,它们就可以了!
我还将为此使用准备好的语句(您应该在所有查询中使用该语句)。
我们可以使用创建动态数量的占位符rtrim(str_repeat("?,", count($a)), ",");,并使用splat-operator传递值...。
//Get correct choice
$q = "SELECT id, COUNT(id) as cnt
FROM choices c
WHERE question_number = ?
AND is_correct = 1
AND id IN (".rtrim(str_repeat("?,", count($_POST['choice'])), ",").")
GROUP BY question_number";
$stmt = $mysqli->prepare($q);
if ($stmt) {
$stmt->bind_param("s".str_repeat("s", count($_POST['choice']), $number, ...$_POST['choice']);
$stmt->execute();
$stmt->bind_result($id, $count);
$result = $stmt->fetch();
if ($stmt->num_rows == $count) {
echo "You got all the right answers!";
} else {
echo "At least one answer was incorrect.";
}
} else {
echo "Error performing query";
trigger_error($stmt->error);
trigger_error($mysqli->error);
}
TA贡献1797条经验 获得超4个赞
SELECT * FROM choices WHERE question_number = $number AND is_correct = 1
该行告诉我们,在您的选择表中,它们是一列is_correct,如果设置为1,则它将选择标记为有效答案。
我不明白,为什么您不能有多个选择,将其设置为值1。
由于您将有1个以上的答案,因此您可以有1个或更多选择。因此,返回的结果将是一个数组。
$boolAnsCorrect = false;
if ($row) {
while($srow = mysqli_fetch_array($row)) {
$correct_choice = $srow['id'];
if($correct_choice == $selected_choice) {
$boolAnsCorrect = true;
break;
}
}
if ($boolAnsCorrect) {
$_SESSION['score'] = $_SESSION['score'] + 1;
} else {
$_SESSION['score1'] = $_SESSION['score1'] - 1;
}
}
else {
// handle error, assuming that a quiz, MUST have ATLEAST 1 answer.
}
- 2 回答
- 0 关注
- 176 浏览
添加回答
举报