简单的PHP应用程序,需要澄清变量存储在$ _SESSIONS中

时间:2016-06-05 01:31:49

标签: php session

应用程序是一个简单的猜谜游戏,它在表单中获取输入,然后将其与随机生成的数字进行比较。目前它工作但有错误。错误在于它不存储随机生成的数字,而是在每次猜测后分配一个新数字。

我的问题,我目前使用多个$ _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只是重置会话。

3 个答案:

答案 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.
    // ...
    // ... 

}