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

PHP开发的Trivia问答游戏任意答案均跳转正确页,如何修复?

问题修复方案

问题根源

核心是PHP函数作用域规则:你在全局定义的$correct、$answer1`$answer4`变量,默认无法在自定义的`button1()`button4()函数内部直接访问。函数内部的这些变量属于未定义状态,值都为null,因此$correct == $answerX的判断永远是null == null,结果为真,所以每次都会跳转到正确答案页。

修复方法

方案1:快速适配原有代码

在每个button函数开头用global关键字引入全局变量即可,同时跳转后补充exit避免后续代码继续执行,示例:

function button1() {
    // 引入全局作用域的对应变量
    global $correct, $answer1;
    if ($correct == $answer1){
        header("Location: correct.php"); 
        exit;
    } else {
        header("Location: wrong.php");
        exit;
    }
}

剩下的button2~button4函数按照同样逻辑,分别引入对应的$answer2/$answer3/$answer4变量即可。

方案2:优化代码结构(推荐)

原有代码存在大量重复逻辑,可以简化为统一处理,后续维护更方便:

<?php
// 这里的$correct、$answer1~$answer4还是沿用你之前从数据库读取的赋值逻辑
$answerList = [$answer1, $answer2, $answer3, $answer4];

// 统一处理提交请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $userSelected = null;
    if (isset($_POST['button1'])) $userSelected = 0;
    elseif (isset($_POST['button2'])) $userSelected = 1;
    elseif (isset($_POST['button3'])) $userSelected = 2;
    elseif (isset($_POST['button4'])) $userSelected = 3;

    if ($userSelected !== null && $answerList[$userSelected] == $correct) {
        header("Location: correct.php");
        exit;
    } else {
        header("Location: wrong.php");
        exit;
    }
}
?>

<form method="post">
    <input type="submit" name="button1" class="button" value="<?php echo $answer1?>" />
    <input type="submit" name="button2" class="button" value="<?php echo $answer2?>" />
    <input type="submit" name="button3" class="button" value="<?php echo $answer3?>" />
    <input type="submit" name="button4" class="button" value="<?php echo $answer4?>" />
</form>

额外注意:如果你的游戏包含多道题目,建议把每道题的正确答案存在session中,避免提交答案时全局的$correct变量被新题数据覆盖,导致判断错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:54:03