Эй, я так близок к тому, чтобы исправить мою догадку в числовой игре, очень простой в PHP, но по какой-то причине я застрял. Я храню переменную в скрытой форме, но, очевидно, каждый раз, когда страница отправляется, она сбрасывает номер, поэтому вы никогда не сможете получить правильный.
Есть идеи? Мой код ниже.
<?php // generate a random number for user to guess $number = rand(1,100); if($_POST["guess"]){ // grab the user input guess $guess = $_POST['guess']; $numbe = $_POST['number']; if ($guess < $number){ echo "Guess Higher"; }elseif($guess > $number){ echo "Guess Lower"; }elseif($guess == $number){ echo "You got it!"; } echo "<br />Random Number:".$number."<br />"; echo $guess; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Guess A Number</title> </head> <body> <form action="<?=$_SERVER['PHP_SELF'] ?>" method="post" name="guess-a-number"> <label for="guess">Guess A Number:</label><br/ > <input type="text" name="guess" /> <input name="number" type="hidden" value="<?= $number ?>" /> <input name="submit" type="submit" /> </form> </body> </html>
Изменить:
// generate a random number for user to guess $number = rand(1,100);
Для того, чтобы:
if(isset($_POST['number'])) { $number = $_POST['number']; } else { $number = rand(1,100); }
Это из-за этой опечатки?
$numbe = $_POST['number']; //numbe -> number
Я понимаю, вы, вероятно, только начинаете, но чем раньше вы изучаете этот материал, тем лучше:
echo "<br />Random Number:".$number."<br />";
Это оставляет вас открытой для атаки XSS – я мог бы отправить $_POST['number']
качестве <script> doSomethingBad(); </script>
<script> doSomethingBad(); </script>
Вы должны либо передать его целому числу ( $number = (int)$_POST['number']
), либо вывести ваш выход ( echo htmlspecialchars($_POST['number']);
)
То же самое касается и $guess
конечно.
Интересно, что если вы используете mod_rewrite, то $_SERVER['PHP_SELF']
можно также манипулировать, чтобы делать то же самое.
Сделайте что-то вроде:
$number = $_POST['number']; if ($number == null) { $number = rand(1,100); }