javascript - 如何在 PHP 中从下一个 SQL 结果行检索值?

标签 javascript php

我正在尝试在封锁期间学习新东西。我正在尝试使用我(非常)有限的 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/

相关文章:

javascript - GeoLocation - 获取国家/地区的 ISO 代码

javascript - 在 CKEditor 上自动上传图像

javascript - 500 (Internal Server Error) - 用户注册系统 - Laravel

PHP,聪明人 : Check for template in different folders

javascript - 我可以像单元测试一样在 Node.js 中进行性能测试吗

javascript - setTimeout - 跟进问题

PHP 警告 : exec() unable to fork

php - 您指定了无效的数据库连接组 codeigniter 错误

php - Medoo,简短的 ajax 语法

javascript - AsyncStorage 不存储数据