应用程序是一个简单的猜谜游戏,它在表单中获取输入,然后将其与随机生成的数字进行比较。目前它工作但有错误。错误在于它不存储随机生成的数字,而是在每次猜测后分配一个新数字。
我的问题,我目前使用多个$ _SESSION存储不同的值,这是最佳做法吗?如果是这样,我如何存储随机生成的值并重新使用它直到会话结束?
另一个问题是$ num变量保持为0,并且实际上并没有增加。
游戏代码
<?
session_start();
if(!isset($_SESSION["number"])) {
$_SESSION["number"] = 0;
}
$num = $_SESSION["number"];
$message = $_SESSION["message"];
?>
<html>
<head>
<title>Guessing Game</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link type="text/css" rel="stylesheet" href="style.css"/>
</head>
<body>
<div>
<h1>Guessing Game</h1>
<p>Enter a number between 1 and 100</p>
<form Method="POST" action="guessProcess.php">
<input type="number" name="guess" required>
<input type="submit" name="submit" value="Guess">
</form>
<?= "<p>You have guessed " . $num . " of times<p>"; ?>
<?= "<p> " . $message . " <p>"; ?>
<br>
<a href="giveup.php">Give Up</a><br><br>
<a href="startover.php" >Start over</a>
</div>
</body>
</html>
<?php
?>
流程代码
<?php
session_start();
if(!isset($_SESSION["number"])) {
$_SESSION["number"] = 0;
$_SESSION["message"] = "";
}
$num = $_SESSION["number"];
$message = $_SESSION["message"];
$rand = rand(1,100);
$guess = $_POST['guess'];
$submit = $_POST['submit'];
if(isset($submit)){
if($guess >= 1 && $guess <= 100 && is_numeric($guess)){
if($guess == $rand) {
$_SESSION["message"] = "Well Done, You have correctly guessed the number";
$num++;
$num = $_SESSION["number"];
header("Location:guessinggame.php");
} else if ($guess < $rand) {
$_SESSION["message"] = "Your guess is lower than the number";
$num++;
$num = $_SESSION["number"];
header("Location:guessinggame.php");
} else if ($guess > $rand) {
$_SESSION["message"] = "Your guess is higher than the number";
$num++;
$num = $_SESSION["number"];
header("Location:guessinggame.php");
} else {
$_SESSION["message"] = "Your guess number must be between 1 and 100!";
$num++;
$num = $_SESSION["number"];
header("Location:guessinggame.php");
}
}
}
?>
<br><a href="startover.php">Start Over</a>
Startover.php只是重置会话。
答案 0 :(得分:1)
有两个问题显而易见:随机数未在会话变量中设置,并且尝试次数未存储在会话变量“number”中。
我简化了解决这些问题的guessProcess.php脚本,似乎测试没问题:
<?php
session_start();
if(!isset($_SESSION["number"])) {
$_SESSION["number"] = 0;
$_SESSION["message"] = "";
}
if(!isset($_SESSION["rand"])) {
$_SESSION["rand"] = rand(1, 100);
}
$guess = $_POST['guess'];
if(isset($guess)){
if($guess >= 1 && $guess <= 100 && is_numeric($guess)){
if($guess == $_SESSION["rand"]) {
$_SESSION["message"] = "Well Done, You have correctly guessed the number";
$_SESSION["number"]++;
header("Location:guessinggame.php");
} else if ($guess < $_SESSION["rand"]) {
$_SESSION["message"] = "Your guess is lower than the number";
$_SESSION["number"]++;
header("Location:guessinggame.php");
} else if ($guess > $_SESSION["rand"]) {
$_SESSION["message"] = "Your guess is higher than the number";
$_SESSION["number"]++;
header("Location:guessinggame.php");
} else {
$_SESSION["message"] = "Your guess number must be between 1 and 100!";
$_SESSION["number"]++;
header("Location:guessinggame.php");
}
}
}
?>
<br><a href="startover.php">Start Over</a>
答案 1 :(得分:1)
更新1
好的,我知道您正在尝试存储解决方案。您可以使用与存储猜测数量相同的方式存储它:$_SESSION
。将$rand=rand(1,100)
替换为$rand = isset($_SESSION['solution'])? $_SESSION['solution']: rand(1,100)
。或者您可以使用较长的表单并将逻辑放在if-else
请记住最后重新存储解决方案(如果是新创建的,除非我们将其放在那里,否则它不会在$_SESSION
中)。所以在上面一行之后的某个时刻,你会做$_SESSION['solution']=$rand
原始回答
您的$num
没有增加,因为在使用$num++
递增后,您将其重置为原始值。不是$num = $_SESSION["number"]
,而是使用$_SESSION["number"]=$num
将会话的值设置为新的增量。如果$num
的唯一目的是增加会话值,只需使用$_SESSION["number"]++
直接增加会话变量。如果您正在使用它,请将该行放在if-else
之外(因为您在所有分支中执行此操作,您也可以只编写该行一次)
您还提到应用程序不会存储猜测但会分配新的猜测。你能解释一下你究竟想要实现的目标:存储价值并用它做什么?我注意到您使用$guess = $_POST['guess']
捕获它并使用它来检查准确性,但您从未将其存储在$_SESSION
中,因此我不确定我是否理解您是如何尝试存储它的。
答案 2 :(得分:1)
除了所有内容之外,...... If(isset($submit))
显然是在关于以下问题之前设置/分配的:那该死的东西是什么?所有的逻辑飞到哪里......? $submit = $_POST['submit'];
...没有先检查,很容易填写该死的apache error_log文件,怀疑不是。
澄清我对这个非常常见的noob错误的看法:
if (isset($_POST['submit'])) // Always check - first
{
$submit = $_POST['submit']; // Than - assign.
// ...
// ...
}