从 MySQL 数据库中选择随机问题; “正确答案”搞砸了

2024-04-18

我正在使用 PHP 和 MYSQL 构建一个简单的测验程序。

测验旨在一次显示一个问题;问题为多项选择题(每个问题有 4 个可能的答案)

如果玩家选择正确,他将进入下一个问题; 如果他选错了,测验就会结束。

首先,我设计的测验如下:

(1)创建一个数据库表,其中包含1500个问题。该表包含以下列:

ID (primary key)
QUESTION (the question itself)
A1 (first answer)
A2 (second answer)
A3 (third answer)
A4 (fourth answer)
CORRECT  (the correct answer --- which is one of the above A1 to A4)

(2) 然后,我的 PHP 代码被设计为按顺序(使用 ID 作为参考)一一挑选问题。

因此,当用户开始玩时,他从问题 1 开始,然后是问题 2,依此类推。

(3) 为了使它更有趣,当用户在我的测验网站上注册为玩家时,我在数据库中添加了一个额外的列 (begin_id),其默认值为“1”。每次用户回答问题时,此列都会更新为该问题的“ID”。意思是,它记录了用户回答的最后一个问题(无论是错误还是正确)。这样:下次用户登录并进行测验时,他不会从问题 1 开始。相反,他从列表中的下一个问题开始。 (这意味着,用户永远不会两次看到相同的问题!)

这是代码:

// Query database
$get_question = "SELECT * from questions_table where id = $begin_id";
$result_get_question = mysqli_query($conn, $get_question);
$row_get_question = mysqli_fetch_array($result_get_question);

// Assign database response to variables
$question = $row_get_question['question'];
$a1 = $row_get_question['a1'];
$a2 = $row_get_question['a2'];
$a3 = $row_get_question['a3'];
$a4 = $row_get_question['a4'];
$correct = $row_get_question['correct'];

// Check user answer
if (isset($_POST['submit'])) {   
    $selected_radio = $_POST['response'];

    if ($selected_radio == $correct)
        echo "THAT ANSWER IS CORRECT";
    else
        echo "THAT ANSWER IS WRONG!";
}

而且,一切都很顺利!

现在,我决定让它变得更加“高效”;我决定简单地修改我的 PHP-SELECT 语句,以随机选择问题,而不是按顺序选择问题。

这很容易,特别是因为有很多关于如何完成此操作的在线教程。

这是我使用的代码(最简单的代码):

SELECT * from questions_table order by rand() limit 1;

就选择随机问题而言,这是有效的。然而,有问题的是:无论用户选择什么答案,它总是错误的答案!!

由于某种原因,从数据库中选择随机问题弄乱了“正确答案/错误答案“我的 PHP 代码中的逻辑。

不知道会出什么问题。

UPDATE

   $get_question = "SELECT * from questions_table where id = $begin_id";

   $result_get_question = mysqli_query($conn,$get_question);

   $row_get_question = mysqli_fetch_array($result_get_question);  

   $question_id = $row_get_question['question_id'];

   $question = $row_get_question['question'];

   $a1 = $row_get_question['a1'];

   $a2 = $row_get_question['a2'];

   $a3 = $row_get_question['a3'];

   $a4 = $row_get_question['a4'];

   $correct = $row_get_question['correct'];
  <br>

  <form method ="post" action ="">

  <input type="radio" name="response" value="<?=$a1?>"><?=$a1?><br>

  <input type="radio" name="response" value="<?=$a2?>"><?=$a2?><br>

  <input type="radio" name="response" value="<?=$a3?>"><?=$a3?><br>

  <input type="radio" name="response" value="<?=$a4?>"><?=$a4?><br>
          <input type="hidden" name="question_id" value="<?= echo $question_id?>" 
    />        <br>

  <Input type = "submit" Name = "submit" Value = "Answer">        </form>

当您向用户询问问题时,系统会从数据库中随机选择一个问题。

然后,用户提交您的表单,随机选择另一个问题,这就是您用来检查答案的问题,而不是您向用户提出的问题。

您需要在表单中添加隐藏输入,其中包含问题 ID

<input type="hidden" name="question_id" value="<?php echo $question_id ?>" />

然后,当您检查答案时,请务必从数据库中获取正确的问题

代码看起来像这样

<?php

// Check user answer for previous question
if (isset($_POST['submit'])) {   
    // Retrieve the id of the question you asked
    $previous_question_id = (int) $_POST['question_id']; // cast to integer to prevent sql injection.

    // Query database
    $get_question = "SELECT * from questions_table where id = $previous_question_id";
    $result_get_question = mysqli_query($conn, $get_question);
    $row_get_question = mysqli_fetch_array($result_get_question);

    // Assign database response to variables
    $correct = $row_get_question['correct'];
    $selected_radio = $_POST['response'];

    if ($selected_radio == $correct)
        echo "THAT ANSWER IS CORRECT";
    else
        echo "THAT ANSWER IS WRONG!";
}


// Load new question to ask to the user
$get_question = "SELECT * from questions_table order by rand() limit 1";
$result_get_question = mysqli_query($conn,$get_question);
$row_get_question = mysqli_fetch_array($result_get_question);  

// assign thing we want to print in the template to variable
$question_id = $row_get_question['question_id'];
$question = $row_get_question['question'];
$a1 = $row_get_question['a1'];
$a2 = $row_get_question['a2'];
$a3 = $row_get_question['a3'];
$a4 = $row_get_question['a4'];

?>

<PASTE YOUR TEMPLATE HERE>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 MySQL 数据库中选择随机问题; “正确答案”搞砸了 的相关文章

  • jquery 切换在移动设备上不起作用

    所以我正在尝试做到这一点 因此当您单击此网站的移动响应版本上的菜单时http dev trafficdigitalagency com stage http dev trafficdigitalagency com stage 它切换显示内
  • 使用 php 运行 ipconfig 命令

    我使用这段代码来了解访问者 客户 的一些信息 它一直在我的 Xampp 虚拟服务器上运行 但我无法在我的主服务器 主机 上运行 我只看到一个空白页 info system ipconfig all echo info 这可能对你有帮助 服务
  • 原则:由数据库将 CURRENT_TIMESTAMP 设置为默认值(即不是由 PHP)

    环顾了一段时间后 我仍然找不到一种方法来获取数据库服务器插入的 CURRENT TIMESTAMP 作为默认值 INSERT 问题 当你将一个对象持久化到数据库时 Doctrine 会将缺失的字段显式设置为 NULL 所以看起来 在表定义中
  • ZF2:如何从自定义类内部获取 ServiceManager 实例

    我无法弄清楚如何从自定义类内部获取 ServiceManager 实例 在控制器内部很简单 this gt getServiceLocator gt get My CustomLogger gt log 5 my message 现在 我创
  • Laravel Eloquent - 附加与同步

    有什么区别attach and sync 在 Laravel 4 的 Eloquent ORM 中 我试图环顾四周 但什么也没找到 附 处理多对多关系时插入相关模型 不需要数组参数 Example user User find 1 user
  • 正则表达式匹配7-12位数字;可能包含空格或连字符

    我已经尝试解决 PHP 正则表达式问题有一段时间了 但我就是无法完全完成 我需要编写一个匹配 7 到 12 位数字 0 9 的正则表达式 并且可以选择在相邻数字之间有一个连字符或一个空格 这就是我到目前为止所拥有的 match1 preg
  • 在 php 中比较两个日期的正确方法是什么? [复制]

    这个问题在这里已经有答案了 我需要将数据库中的日期与当天进行比较 这是我的代码 雄辩地说 posts Post where date date Y m d gt get 我只想检索今天的帖子 知道 日期 字段的类型为日期 我该如何使其工作
  • HSQLDB - 这是主数据库文件

    我在嵌入模式下使用 HSQLDB jdbc hsqldb file abc TESTDB 创建数据库后 文件夹abc有以下文件 TESTDB lck TESTDB script TESTDB log TESTDB properties 我的
  • 使用Python mysql.connector远程连接MySQL

    以下代码 在同一 LAN 内与 mysql 服务器不同的机器上运行 使用 Python3 和 mysql connector 本地连接到 MySQL 数据库 import mysql connector cnx mysql connecto
  • 检查 DynamoDB 中是否存在表的最佳方法是什么?

    检查 DynamoDb 中是否存在表的最佳方法是什么 如果代码是 PHP 语言 我将不胜感激 要么活跃 要么不活跃 稍后作为错误代码 400 的各种情况的示例添加 检查表是否存在很容易 它可以有以下之一 表状态 gt 创建 活动 删除或更新
  • 如果菜单项超过 90 个菜单项的限制,Wordpress 将删除我的菜单项 -

    我想在我的菜单中添加更多项目 我的菜单在 WordPress 菜单 管理 中至少包含 90 个项目 我想添加更多项目 但发现其他项目会自动删除 有什么解决办法吗 很有可能 但不是 100 这是 PHP 限制 而不是 WP 您可以通过查看 p
  • 如何通过csv文件仅更新sql表的一列

    我有一个 csv 文件包含一些数据 在我的 Sql 数据库中 我有一个具有多个列名的表 现在我只想通过 csv 文件更新一列 谢谢 你可以这样尝试 Import the csv file to a temp table Update you
  • 如何使用 jenssegers/laravel-mongodb 包获取文档集合中的最大和最小日期?

    我有一组如下所示的文档 id ObjectId 5826182e2e94e0aefc541924 calls call date 2016 08 16 00 00 00 000 updated at ISODate 2016 11 11T1
  • 如何在 .net 中为 Google 云存储签名 url

    我想知道如何使用 net中的谷歌云存储类生成signurl 我已经根据要求创建了字符串 GET 1388534400 bucket objectname 但我现在想用 p12 密钥签署这个 url 然后想让它变得 url 友好 该库没有显示
  • SQL Server 与 MySQL:CONTAINS(*,'FORMSOF(THESAURUS,word)')

    我很震惊 当我在 SQL Server 中看到查询非常简单时 我花了 3 4 天弄清楚如何在 mysql 中实现词干提取 和同义词搜索 Select from tab where CONTAINS FORMSOF THESAURUS wor
  • mysql REGEXP 不匹配

    我有一个正则表达式 旨在捕获字符串中的电话号码 1 s d 3 s d 3 s d 4 我尝试使用以下查询在 MySql 数据库中查询此正则表达式 SELECT FROM everything instances meta AS m WHE
  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • php 数组用重音符号排序

    我用它来根据姓氏排序 usort fb friends data custom sort function custom sort a b return a last name gt b last name foreach fb frien
  • 让网站登录也能在 WordPress 上使用

    我使用 PHP 和 MySQL 开发了一个网站 该网站已经有登录和注册表单 myweb com 我已经在这个网址添加了 wordpressmyweb com blog 我想禁用 WordPress 上的登录和注册页面并强制用户使用我的 基本
  • 在 PHP 中获取日期和数字工作日

    我正在用 PHP 开发一个应用程序 我需要使用日期和工作日的数字表示 我尝试过以下方法 today date Y m d number date N strtotime today echo Today today weekday numb

随机推荐

  • Newtonsoft.Json 可在 Unity 编辑器中运行,但无法在移动设备上运行

    我正在 Unity 中编写一个按类别提问和回答的游戏 类别是通过返回 JSON 文本的 PHP 脚本获取的 当我在 UnityEditor 中使用此解决方案时 它可以正常工作 但是当我在移动设备上安装 apk 时 反序列化不起作用 与 my
  • 带圆角的方形进度条

    我正在尝试在 dart flutter 中构建一种圆形方形进度条 也许有人知道如何使其成为可能 我已经尝试了所有 油漆 边框等等 但没有成功 示例图像 圆形方形进度条 https i stack imgur com jhy9Q png 你可
  • 在 Python 中为现有 PDF 创建大纲/目录

    我正在使用 pyPdf 将多个 PDF 文件合并为一个 这很好用 但我还需要向生成的 PDF 文件添加目录 大纲 书签 pyPdf 似乎只支持读取大纲 Reportlab 允许我创建它们 但开源版本不支持加载 PDF 文件 因此无法向现有文
  • 一个本地 .resx 字符串可以引用另一个本地 .resx 字符串吗?

    我正在尝试确定是否可以将串联字符串添加到我的本地 resx 文件之一 这个例子应该澄清 假设我有一个简单的 ASP NET 网页 由 1 一个标签 其文本是重要关键字 2 一个带有必填字段验证的输入和 3 一个导致验证发生的按钮组成 lbl
  • JodaTime中如何获取本机的时区?

    如何检测本地计算机所在的时区 I tried DateTimeZone getDefault 但如果机器位于德国 那么这不会给我例如时区 德国 有可能吗 DateTimeZone getDefault 如果您的主机位于德国 将返回您的时区
  • 没有 jpa 的 Spring 和 Hibernate

    对于我的新项目 我计划使用 Hibernate 5 和 Spring 4 并且一如既往地喜欢分成不同的层 项目 梯度依赖 org springframework spring webmvc 4 2 1 RELEASE org springf
  • 获取.NET程序集的日期[重复]

    这个问题在这里已经有答案了 如何从当前 NET 程序集中检索创建日期 我想添加一些非常简单的功能 让我的应用程序在主程序集构建日期一周后停止工作 我已经编写了在给定日期后杀死我的应用程序的代码 我只需要以编程方式从程序集中检索创建日期 以下
  • 分析 mex 函数

    我刚刚用 c 将 Matlab 程序重写为 mex 函数以加快速度 并取得了出色的结果 这个优化决策是一个非常非常好的主意 无需线程即可将速度提高 20 倍 它仍然让我很好奇 mex 函数将时间花在什么上 并希望找出可能的瓶颈 我正在寻找一
  • 创建自定义表格表示的函数

    我使用下面的代码来概述我的部分数据 从以下代码中创建函数的最佳方法是什么 它将采用 dataList 以及一些图形选项 例如颜色 作为参数 并返回自定义的表格表示形式 如下所示 overviewtheData Text Grid Map R
  • Symfony 2 FOS 用户捆绑包 Bootstrap 模式 AJAX 登录

    有没有人已经使用 Symfony 2 和 FOS User Bundle 在 Bootstrap 模式中构建了登录表单 这是我现在所拥有的 src Webibli UserBundle Resources config service ym
  • 使用 PHP 生成 Windows .lnk 文件

    我正在开发一个项目 其中涉及运行 ProFTPd 的 FTP 服务器和为用户创建帐户的 PHP MySQL 后端 创建帐户后 系统会向用户发送电子邮件 其中包含其帐户详细信息以及下载 FileZilla 或 Cyber Duck 的说明 具
  • Publish 不是改造 web.config 吗?

    我制造了一个web config 完整文件 http pastebin com rYreaVyP 它不显示 XML 错误
  • 如何从 HttpInputStream 获取 docx 文件的字节数组?

    我正在使用这篇文章第一个答案中的方法 如何从 HttpPostedFile 创建字节数组 https stackoverflow com questions 359894 how to create byte array from http
  • 如何写入 stdIn (JAVA) [重复]

    这个问题在这里已经有答案了 我想通过使用一些输入 例如 join 8 对我的 P2P 系统进行一些测试 8 是节点号 对于我的系统 命令 join 8 是从标准输入读取的 但我不想将其键入数百次以进行数百次测试 因此我编写了一个测试函数来随
  • HTML5 视频 - 在特定时间开始视频并播放 x 时间

    我正在尝试创建在特定时间点启动本地视频并播放特定持续时间的按钮 我已经让它在某个时刻播放 但不知道如何让它只播放一定的持续时间 这是代码 HTML
  • C++ 中的叉积

    给定以下Python 来自http norvig com sudoku html http norvig com sudoku html def cross A B Cross product of elements in A and el
  • 使用 Terraform(工作区、模块?)配置客户帐户最佳实践?

    我需要在 AWS 中创建和管理多个客户环境 并且希望利用 Terraform 来部署所有必要的资源 每个客户环境基本相同 只是用于访问其中一台服务器的 URL 不同 我已经整理了一个 Terraform 配置 可以为给定客户部署所有资源 但
  • 来自本地运行的 docker 容器内的 Azure 托管身份

    我正在运行一个由 asp net core 2 2 api 组成的 docker 容器 此 api 需要访问 Azure 密钥保管库 并且我已使用在密钥保管库上具有正确访问策略的用户登录 Visual Studio 以检索机密 但是 当我使
  • 为什么 JDBC 是动态加载而不是导入? [复制]

    这个问题在这里已经有答案了 在 JDBC 中 我只看到使用的示例 Class forName com mysql jdbc Driver true cl 还没有看到有人使用 import com mysql jdbc Driver 是不是因
  • 从 MySQL 数据库中选择随机问题; “正确答案”搞砸了

    我正在使用 PHP 和 MYSQL 构建一个简单的测验程序 测验旨在一次显示一个问题 问题为多项选择题 每个问题有 4 个可能的答案 如果玩家选择正确 他将进入下一个问题 如果他选错了 测验就会结束 首先 我设计的测验如下 1 创建一个数据