PHP猜数字游戏:如何存储历史猜测值到隐藏输入数组并全量展示
解决PHP猜数字游戏存储所有猜测值的问题
嘿,作为PHP新手能写出猜数字的雏形已经很棒啦!你现在遇到的问题核心是每次页面刷新/提交请求时,PHP都会重新初始化你的$allguesses数组,之前的猜测数据自然就丢失了,所以只能看到最后一次的。要解决这个问题,我们需要用PHP的会话(Session)来持久化存储这些猜测值,因为Session可以在多次请求之间保存用户的数据。
下面是修正后的完整代码,我会一步步解释关键改动:
<?php // 第一步:启动会话,这行必须放在所有输出(包括HTML标签)之前 session_start(); // 第二步:初始化会话中的猜测数组,如果还不存在就创建空数组 if (!isset($_SESSION['allguesses'])) { $_SESSION['allguesses'] = []; } $target = 80; $message = ''; $showGuesses = false; // 处理用户的猜测提交 if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['guess'])) { $userGuess = (int)$_POST['guess']; // 把当前猜测加入会话数组 $_SESSION['allguesses'][] = $userGuess; if ($userGuess == $target) { $message = "恭喜你猜对了!目标数字就是80!"; $showGuesses = true; } elseif ($userGuess < $target) { $message = "猜小啦,再试试更大的数字!"; } else { $message = "猜大啦,再试试更小的数字!"; } } // 如果猜对了,之后可以选择重置猜测记录(可选) if (isset($_POST['reset'])) { $_SESSION['allguesses'] = []; $message = "游戏已重置,快来继续猜!"; $showGuesses = false; } ?> <html> <head> <title>猜数字游戏</title> </head> <body> <h1>猜数字游戏</h1> <p><?php echo $message; ?></p> <!-- 显示所有猜测值(猜对后触发) --> <?php if ($showGuesses): ?> <h3>你之前的所有猜测:</h3> <ul> <?php foreach ($_SESSION['allguesses'] as $guess): ?> <li><?php echo $guess; ?></li> <?php endforeach; ?> </ul> <form method="POST"> <button type="submit" name="reset">再来一局</button> </form> <?php else: ?> <!-- 猜数字表单 --> <form method="POST"> <label>输入你的猜测(1-100):</label> <input type="number" name="guess" min="1" max="100" required> <button type="submit">提交猜测</button> </form> <?php endif; ?> </body> </html>
关键改动说明:
session_start():必须放在PHP代码的最开头(任何HTML输出之前),它会开启或恢复当前用户的会话,让我们能在多次请求间保存数据。$_SESSION['allguesses']:用会话数组代替原来的$allguesses,这样每次提交的猜测都会被追加进去,不会因为页面刷新而丢失。- 表单逻辑优化:添加了重置按钮,猜对后可以清空猜测记录重新开始;同时用条件判断控制表单和猜测记录的显示。
这样修改后,当你猜对数字时,页面就会展示你之前所有的猜测值啦!
内容的提问来源于stack exchange,提问作者Elif Sahin
相关产品推荐
相关产品推荐

