PHP表单在提交时重新加载,但重置变量

PHP表单在提交时重新加载,但重置变量,php,html,forms,Php,Html,Forms,我的任务是制作一个猜谜游戏。生成一个随机数,用户尝试猜测它。它告诉您应该尝试更大的数字还是更小的数字,最终用户会猜到正确的数字 <?php session_start(); if(empty($_SESSION['num_to_guess'])) { $_SESSION['num_to_guess'] = mt_rand(1,99); } if (!isset($_POST['guess'])) { $message = "Welcome to the Odd Number G

我的任务是制作一个猜谜游戏。生成一个随机数,用户尝试猜测它。它告诉您应该尝试更大的数字还是更小的数字,最终用户会猜到正确的数字

<?php
session_start();

if(empty($_SESSION['num_to_guess'])) { $_SESSION['num_to_guess'] = mt_rand(1,99); }

if (!isset($_POST['guess'])) {
    $message = "Welcome to the Odd Number Guessing Game!";
}

elseif (!is_numeric($_POST['guess'])) { //is not numeric
$message = "I don't understand that response. Please enter a number.";
}

elseif ($_POST['guess'] == $_SESSION['num_to_guess']) { //matches
    $message = "Well done! You've found the secret number. Now try to guess another.";
    $_SESSION['num_to_guess'] = mt_rand(1,99);
}

elseif ($_POST['guess'] < $_SESSION['num_to_guess']) { //greater
    $message = "Try a larger number!";
}

elseif ($_POST['guess'] > $_SESSION['num_to_guess']) { //lesser
    $message = "Try a smaller number!";
}

else {
    $message = "I'm terribly confused.";
}
?>

<!DOCTYPE html> 
<html>

<head>
<title>Odd Number Guessing Machine!</title>
</head>

<body>
<h1><?php echo $message; ?>

<?php echo $_SESSION['num_to_guess']; ?>

</h1>
<form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method = "POST">

<p><label for="guess">Try to guess an odd number between 1 and 99:</label> <br/>
<input type="text" id="guess" name="guess" /></p>
<button type="submit" name="submit" value="submit">Submit</button>

</form>

</body>

</html>
现在与浏览器兼容

 <?php
 session_start();

 $url_of_page = $_SERVER['REQUEST_URI'];

 if(!isset($_SESSION['correct_number'])){ 
 // Create random number only when the previous one has been correctly guessed

        $number_to_guess = rand(0,9);

        $_SESSION['correct_number'] = $number_to_guess;

     }

 if(isset($_SESSION['correct_number'])){

         $num_to_guess = $_SESSION['correct_number']; 
  }

 if(isset($_POST['guess'])){

     $guessed_number = trim($_POST['guess']);
     $reg_exp = '/^([0-9]+)$/';
     $reg_exp_match = preg_match($reg_exp,$guessed_number);

 }

 if(isset($_POST['submit'])){

        if(isset($reg_exp_match)){

            if(!$reg_exp_match){

                 $message = "Enter a number";

             }else{

             if($guessed_number < $num_to_guess){ 
                 // is small

                 $message = "Try a larger number!";

                 }elseif($guessed_number > $num_to_guess){ 
                 // is large

                 $message = "Try a smaller number!";

                 }elseif($guessed_number == $num_to_guess){ 
                 //matches

                 $message = "Well done...You got it";
                 $new_game = TRUE;

                 unset($_SESSION['correct_number']);
                 // A new number can now be created                      
                 }

             }

        }

    }
 ?>

 <!DOCTYPE html> 
 <html>

 <head>
 <title>Odd Number Guessing Machine!</title>
 </head>

 <body>

 <h3>Welcome to the Guessing Machine!</h3>

 <p>
 <?php 
 if(isset($new_game) && ($new_game == TRUE)){ // The correct number

        if(isset($message) && isset($url_of_page)){ 

             echo $message . '. <a href="' . $url_of_page . '">Start a new game</a>'; 

        }

     }else{ // Not the correct number

         if(isset($message)){ echo $message; } 

}
 ?>
 </p>

 <form action="<?php if(isset($url_of_page)){ echo $url_of_page; } ?>" method="POST">

     <p>
        <label for="guess">Enter a number, 0 to 9:</label> <br/>

        <input type="text" id="guess" name="guess" />

     </p>

     <button type="submit" name="submit" value="submit">Submit</button>

 </form>

 </body>

 </html>

奇数猜谜机!
欢迎来到猜谜机!


它只是说不……一次又一次地不正确。不让我知道我是热还是冷。:)好啊那我需要一些时间。以后谢谢你,同时我会尽力了解你做了什么!你会发现我缩小了随机数的范围。在它工作之后,应该是适当的时间来增加范围。我尝试了你的新代码,它仍然给出相同的响应。事实上,逻辑是可行的。如果我从0-9全部尝试,我可以猜到数字,但没有提示猜测是高还是低。请将每个$num_to_guess替换为$num_SESSION['num_to_guess']。永远不要忘记将first assign更改为:if(empty($_SESSION['num_to_guess']){$_SESSION['num_to_guess']]=42;}这会在正确猜测数字时更改数字,但它总是重置回42。if(empty($_SESSION['num_to_guess'])阻止再次分配给42,并且它只定义了第一次。我尝试了if(empty)函数。由于某种原因,它仍然停留在42上。添加会话_start();之后