You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP随机问答测验故障求助:提交答案匹配错误修复

修复PHP随机问答测验的答案匹配问题

问题描述

基于PHP和Bootstrap开发的随机问答测验页面,存在核心问题:用户提交答案时,系统总是用刷新后新生成的随机问题答案进行匹配,而非用户答题时显示的当前问题答案,导致答案判断完全错误。需要修复该问题,同时保证:

  • 提交正确答案显示「Congratulations」,错误显示「Better luck Next Time」
  • 每次刷新页面问题随机切换,功能正常

故障原因

每次页面加载(包括表单提交后的页面刷新)都会执行array_rand()生成新的随机问题,导致表单提交后,用于对比答案的$ans_key是新问题的答案,而非用户所答问题的对应答案。

修复后的完整代码

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bootstrap demo</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous">
</head>

<body>
  <div class="container">

    <div class="card mt-5">
      <div>
        <h1 class="text-center alert bg-warning">let's Play Quiz</h1>
      </div>
      <div class="card-body">
        <?php
        // 问题与答案数组
        $ques = array(
          "q1" => "Ques:What is currency of India?",
          "q2" => "Ques:Which is the most populated state in India?",
          "q3" => "Ques:Which city is financial capital of India?",
          "q4" => "Ques:Which state has the largest land area ?",
          "q5" => "Ques:Which state is most literate?"
        );
        $answers = array(
          "q1" => "rupee",
          "q2" => "Uttar Pradesh",
          "q3" => "Mumbai",
          "q4" => "rajasthan",
          "q5" => "Kerala"
        );

        // 处理表单提交时,使用提交的问题ID;否则随机生成
        if(isset($_REQUEST["subbtn"])){
          $current_q = $_REQUEST["q_id"];
        } else {
          $current_q = array_rand($ques);
        }
        $current_question = $ques[$current_q];
        $current_answer = $answers[$current_q];
        ?>
        <h5 class="card-title text-center">
          <?php echo $current_question; ?>
        </h5>
        <form action="" method="post">
          <!-- 隐藏字段存储当前问题ID -->
          <input type="hidden" name="q_id" value="<?php echo $current_q; ?>">
          <input type="text" name="ans" required placeholder="Enter your answer here" class="mx-auto my-2 d-block">
          <br>
          <input type="submit" value="Submit Answer" name="subbtn" class="btn btn-warning btn-sm d-block mx-auto">
        </form>
      </div>
      <div class="card-footer bg-warning">
        <small class="text-dark">
          <?php
          if (isset($_REQUEST["subbtn"])) {
            $user_input = trim($_REQUEST["ans"]); // 去除输入首尾空格
            $compare_result = strcasecmp($current_answer, $user_input);
            if ($compare_result == 0) {
              echo "Congratulations";
            } else {
              echo "Better luck Next Time";
            }
          }
          ?>
        </small>
      </div>
    </div>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.min.js" integrity="sha384-Rx+T1VzGupg4BHQYs2gCW9It+akI2MM/mndMCy36UVfodzcJcF0GGLxZIzObiEfa" crossorigin="anonymous"></script>
</body>
</html>

修复说明

  1. 新增隐藏字段:在表单中添加name="q_id"的隐藏输入框,存储当前显示问题的ID(如q1/q2),提交表单时一同传递给后端,确保对比的是用户所答问题的答案
  2. 调整问题生成逻辑:表单提交时,优先使用提交过来的q_id获取对应问题和答案;未提交时,随机生成新问题,兼顾答案匹配正确性和页面刷新的随机性
  3. 修复语法错误:补全原代码中被注释的变量定义,以及缺失的大括号,保证代码可正常执行
  4. 优化输入处理:添加trim()去除用户输入的首尾空格,避免因空格导致的误判

内容的提问来源于stack exchange,提问作者Learn Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:24:49