Проблемы с угадайкой - PullRequest
       12

Проблемы с угадайкой

1 голос
/ 13 февраля 2009

Эй, я так близок к тому, чтобы закончить мою игру с цифрами, очень простую в 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>

Ответы [ 4 ]

3 голосов
/ 13 февраля 2009

Изменение:

// generate a random number for user to guess
$number = rand(1,100);

Кому:

if(isset($_POST['number'])) {
   $number = $_POST['number'];
} else {
   $number = rand(1,100);
}
3 голосов
/ 13 февраля 2009

Это из-за этой опечатки?

$numbe  = $_POST['number'];
//numbe -> number
2 голосов
/ 13 февраля 2009

Я понимаю, что вы, вероятно, только начинаете, но чем раньше вы изучите этот материал, тем лучше:

echo "<br />Random Number:".$number."<br />";

Это оставляет вас открытым для атаки XSS - я могу отправить $_POST['number'] как <script> doSomethingBad(); </script>

Вы должны либо привести его к целому числу ($number = (int)$_POST['number']), либо экранировать свой вывод (echo htmlspecialchars($_POST['number']);)

То же самое относится и к $guess, конечно.

Интересно, что если вы используете mod_rewrite, $_SERVER['PHP_SELF'] также можно манипулировать, чтобы сделать то же самое.

1 голос
/ 13 февраля 2009

сделать что-то вроде:

$number  = $_POST['number'];
if ($number == null) {
    $number = rand(1,100);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...