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

PHP测验为何出现正确答案匹配错误问题?

问题修复:PHP测验程序答案匹配错误

你的问题核心是:每次提交表单时,页面会重新执行数据库查询获取新的随机题目,导致校验答案时用的是新题的正确答案,而不是用户刚才回答的那道题的答案,所以匹配逻辑完全失效。

修复思路

把当前显示题目的正确答案,通过表单的隐藏字段一起提交到后台,这样校验时就能拿到用户回答的那道题的正确答案,而不是重新查询的新答案。

修改后的完整代码

<?php
include('connect_db.php');

$sqlstmt = 'SELECT * FROM quiz ORDER BY RAND() LIMIT 1';
$res = mysqli_query($dbc, $sqlstmt);
$row = mysqli_fetch_assoc($res);
$CorrectAnswer = $row['CorrectAnswer'];
?>

<html>
  <head>
    <style>
    h1 {
      text-align: center;
    }
    .answer {
      display: flex;
      margin-inline: auto;
      margin-bottom: 1rem;
    }
    .button {
      margin-top: 1rem;
    }
    fieldset {
      display: flex;
      flex-direction: column;
      justify-content: center;
      width: 50rem;
      margin-inline: auto;
    }
    </style>
  </head>
  <body>
    <h1>Quiz</h1>
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>" align="center" id='myForm'>
      <!-- 添加隐藏字段存储当前题的正确答案 -->
      <input type="hidden" name="correct_answer" value="<?php echo $CorrectAnswer; ?>">
      <fieldset >
        <legend>Question:</legend><br>
        <p><?php echo $row['Question']; ?></p><br>
        <div class="answer">
          <input type="radio" id="answer1" name="answer" value="<?php echo $row['Answer1']; ?>"><br>
          <label for="answer1"><?php echo $row['Answer1']; ?></label>
        </div>
        <div class="answer">
          <input type="radio" id="answer2" name="answer" value="<?php echo $row['Answer2']; ?>"><br>
          <label for="answer2"><?php echo $row['Answer2']; ?></label>
        </div>
        <div class="answer">
          <input type="radio" id="answer3" name="answer" value="<?php echo $row['Answer3']; ?>"><br>
          <label for="answer3"><?php echo $row['Answer3']; ?></label>
        </div>
        <div class="answer">          
          <input type="radio" id="answer4" name="answer" value="<?php echo $row['Answer4']; ?>"><br>
          <label for="answer4"><?php echo $row['Answer4']; ?></label>
        </div>
      </fieldset>
      <input class="button" type="submit" value="Submit">
    </form>
    <script>
      function validateForm() {
        var radios = document.getElementsByName('answer');
        var formValid = false;

        var i = 0;
        while (!formValid && i < radios.length) {
          if (radios[i].checked) formValid = true;
          i++;        
        }

        if (!formValid) alert("You must select an option!");
        return formValid;
      }

      var form = document.getElementById("myForm");
      form.onsubmit = validateForm;
</script>
    <?php
if (isset($_POST['answer']) && isset($_POST['correct_answer'])) {
  $selectedAnswer = $_POST['answer'];
  $correctAnswer = $_POST['correct_answer'];
  if ($selectedAnswer == $correctAnswer) {
    echo '+1 pt';
  } else {
    echo 'Wrong answer'; // 可选:添加错误提示
  }
}
?>
  </body>
</html>

关键修改点

  1. 移除了多余的while循环(因为你只查询一条数据,不需要循环遍历)
  2. 在表单中添加隐藏字段,把当前题的正确答案随表单一起提交
  3. 校验逻辑改为使用提交过来的correct_answer(用户刚才答题的正确答案)和answer对比,而不是重新查询数据库生成新答案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:10:29