我正在尝试在封锁期间学习新东西。我正在尝试使用我(非常)有限的 PHP/Javascript 知识创建一个非常基本的多项选择测验页面...
所以我有一个包含测验问题的 SQL 数据库。主要字段是问题、正确答案和三个错误答案。目前数据库只有一行。
<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM quiz_db";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$conn->close();
?>
因此,问题、正确答案、三个错误答案以及行中的其他任何内容都会存储到 $row
中。
接下来,我将所有四个可能的答案放入一个数组中,然后打乱顺序:
<?php
$answerslist = array($row["answercorrect"], $row["answerincorrect1"], $row["answerincorrect2"], $row["answerincorrect3"]);
shuffle($answerslist);
?>
然后我将四个可能的答案按照现在随机的顺序放在一组按钮上:
<div class="row">
<div class="col-sm-3">
<button id = "answerA" onclick="clickA()" class="answer"><?php echo $answerslist[0]; ?></button>
</div>
<div class="col-sm-3">
<button id="answerB" onclick="clickB()" class="answer"><?php echo $answerslist[1]; ?></button>
</div>
<div class="col-sm-3">
<button id = "answerC" onclick="clickC()" class="answer"><?php echo $answerslist[2]; ?></button>
</div>
<div class="col-sm-3">
<button id = "answerD" onclick="clickD()" class="answer"><?php echo $answerslist[3]; ?></button>
</div>
</div>
您会看到我已为每个按钮分配了一个 onclick 事件。如下:
function clickA() {
var clickedAnswerA = "<?php echo $answerslist[0]; ?>"; // Get the value of the clicked answer
var correctAnswer = "<?php echo $row["answercorrect"] ?>"; // Get the value of the correct answer
if (clickedAnswerA == correctAnswer) {
document.getElementById("result").innerHTML = "CORRECT!";
document.getElementById("result").style.backgroundColor = "#32CD32";
} else {
document.getElementById("result").innerHTML = "WRONG!";
document.getElementById("result").style.backgroundColor = "#CC0000";
}
}
上面有四个脚本,每个按钮一个。本质上我想说的是,如果点击的答案=正确答案,则结果正确且绿色,否则错误!和红色
令我惊讶的是,这一切都按预期进行!
对于下一阶段,在上述之后,我希望它转到结果集中的下一个问题(即 $row
中的下一个问题)。但我被困住了。目前数据库中只有一个问题,但如果我添加另一个问题,我不确定如何使 PHP 本质上刷新。任何建议或指示将不胜感激。
此外,如果有人可以对我迄今为止所做的工作提出任何改进建议,也许是为了方便或提高效率,那就太好了,谢谢!
最佳答案
1.不要将所有内容都排成一排。问题和答案之间存在关系:
question
id | title | ...
1 | Question 1 | ...
2 | Question 2 | ...
answer
id | question_id | content | is_correct
1 | 1 | Foo | 1
2 | 1 | Bar | 0
...
2.查询数据:
$question = $db->prepare('SELECT * FROM question WHERE id = :id')->queryRow([':id' => $id]);
$answers = $db->prepare('SELECT id, content, is_correct FROM answer WHERE question_id = :id')->queryAll([':id' => $id]);
这样您就可以获得每个问题所需的尽可能多的答案。
3.为您的元素绑定(bind)事件,而不是 onClick=""
每个函数都执行相同的操作。
4. var clickedAnswerA = "<?php echo $answerslist[0]; ?>";
会带来比你现在看到的更多的问题。尽量不要混合JS和PHP代码输出,因为JS看不到任何PHP,只是它的输出(PHP首先输出代码,然后才执行HTML和JS)
5.使用单个 PHP 循环输出所有答案,而不是编写重复的代码。
关于javascript - 如何在 PHP 中从下一个 SQL 结果行检索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61498688/