2009-02-13 10 views
1

Hé, je suis si proche d'affiner ma conjecture d'un jeu de nombres, très simple en PHP, mais pour une raison quelconque je suis coincé. Je stocke la variable sous une forme cachée, mais évidemment chaque fois que la page est envoyée, elle réinitialise le nombre de sorte que vous ne pouvez jamais obtenir le bon.Problèmes avec deviner un jeu de nombres

Des idées? Mon code est ci-dessous.

<?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> 
+0

vous avez une faute de frappe $ numbe – SilentGhost

+0

Oui, typo. Pour un exercice supplémentaire, vous devez convertir votre code pour utiliser method = "GET" mais toujours cacher la réponse dans l'URL. – kmkaplan

Répondre

3

Change:

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

Pour:

if(isset($_POST['number'])) { 
    $number = $_POST['number']; 
} else { 
    $number = rand(1,100); 
} 
+0

Merci de l'avoir fait fonctionner, et il n'est pas rafraîchissant à chaque fois grâce au conditionnel. Ryan – Coughlin

+0

En outre, la faute signalée par Ates doit être supprimée complètement avec cette solution (pas besoin de calculer un numéro, nous l'avons déjà défini). –

+0

Appréciez-le! Ryan – Coughlin

3

Est-ce à cause de cette faute de frappe?

$numbe = $_POST['number']; 
//numbe -> number 
1

faire quelque chose comme:

$number = $_POST['number']; 
if ($number == null) { 
    $number = rand(1,100); 
} 
2

Je sais que vous êtes probablement juste de commencer, mais plus tôt vous apprendre ce genre de choses, le mieux:

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

C'est en vous laissant ouvert à une attaque XSS - je pourrais envoyer $_POST['number'] comme <script> doSomethingBad(); </script>

Vous devez CAST à un nombre entier ($number = (int)$_POST['number']) ou échapper à votre sortie (echo htmlspecialchars($_POST['number']);)

Le il en va de même pour $guess bien sûr. Il est intéressant, si vous utilisez mod_rewrite, $_SERVER['PHP_SELF'] pourrait également être manipulé pour faire la même chose.

Questions connexes