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
相关产品推荐
相关产品推荐

