Undefined variable

Status
Niet open voor verdere reacties.

Royy212

Gebruiker
Lid geworden
19 jan 2011
Berichten
183
Hoi, ik heb een probleem met een undefined variable. Ik heb een voorbeeld in mijn boek, waarin ik een nummer heb, die je moet raden met behulp van een form. Op dit moment moet ik een counter maken, zodat ik kan tellen hoeveel keer de user heeft moet raden om bij het goede getal te komen. Dit is de code:

PHP:
<?php
$num_to_guess = 42;
$num_tries = (isset($_POST['num_tries'])) ? $num_tries + 1 : 1;
if (!isset($_POST['guess'])) {
    $message = "Welcome to the guessing machine!";
} elseif (!is_numeric($_POST['guess'])) {
    $message = "I don't understand that response.";
} elseif ($_POST['guess'] == $num_to_guess) {
    $message = "Well done!";
} elseif ($_POST['guess'] > $num_to_guess) {
    $message = $_POST['guess']." is too big! Try a smaller number.";
} elseif ($_POST['guess'] < $num_to_guess) {
    $message = $_POST['guess']." is too small! Try a larger number.";
} else {
    $message = "I am terribly confused.";
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>A PHP number guessing script</title>
    </head>
    <body>
        <h1><?php echo $message; ?></h1>
        <p><strong>Guess number:</strong><?php echo $num_tries; ?></p>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <p><label for="guess">Type your guess here:</label><br/>
        <input type="text" id="guess" name="guess" /></p>
        <input type="hidden" name="num_tries" value="<?php echo $num_tries; ?>" />
        <button type="submit" name="submit" value="submit">Submit</button>
        </form>
    </body>
</html>

Wanneer ik deze code run, krijg ik de error undefined variable, het gaat hier om lijn 3.
Toen ik dit zag, had ik tussen line 2 en 3 dit gezet: $num_tries = 0; . Hierdoor gaat de error weg, maar de counter count niet, en daarnaast heb ik gehoord dat dit ook niet de oplossing is. Omdat elke keer wanneer ik de pagina overnieuw laad, word $num_tries weer 0.

Nu is deze code overgenomen van het boek die ik heb, ik heb de code meerdere keren gecheckt, dus ik denk dat er misschien iets outdated is of dat de code gewoon niet klopt.

Ik hoop dat jullie mij hierbij kunnen helpen. (De counter moet counten en de undefined variable moet weg)
 
Laatst bewerkt:
Probeer dit eens:
PHP:
$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;
Dan reken je tenminste verder met de doorgegeven waarde :)

Let wel op dat de enige juiste manier om te controleren of er een formulier verzonden is deze is:
PHP:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Formulier verzonden
}
 
Oke met dit stukje code, is de undefined error probleem opgelost:
PHP:
$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;

Maar ik snap niet, precies hoe ik de andere code moet invoeren. (Dit heb ik dus geprobeerd)
PHP:
<?php
$num_to_guess = 42;

$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;
if ($_SERVER['guess'] == 'POST') {
    $message = "Welcome to the guessing machine!";
} elseif (!is_numeric($_POST['guess'])) {
    $message = "I don't understand that response.";
} elseif ($_POST['guess'] == $num_to_guess) {
    $message = "Well done!";
} elseif ($_POST['guess'] > $num_to_guess) {
    $message = $_POST['guess']." is too big! Try a smaller number.";
} elseif ($_POST['guess'] < $num_to_guess) {
    $message = $_POST['guess']." is too small! Try a larger number.";
} else {
    $message = "I am terribly confused.";
}
 
De andere code moet toegevoegd worden zoals hij er staat :)

Hij zal dus zo moeten worden:
PHP:
<?php
$num_to_guess = 42;
 
$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;
$message = "Welcome to the guessing machine!";

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!is_numeric($_POST['guess'])) {
        $message = "I don't understand that response.";
    } elseif ($_POST['guess'] == $num_to_guess) {
        $message = "Well done!";
    } elseif ($_POST['guess'] > $num_to_guess) {
        $message = $_POST['guess']." is too big! Try a smaller number.";
    } elseif ($_POST['guess'] < $num_to_guess) {
        $message = $_POST['guess']." is too small! Try a larger number.";
    } else {
        $message = "I am terribly confused.";
    }
} else {
    // Hier formulier tonen
}
 
Ik heb echt geen idee hoe ik het nu verder moet aanpakken, ik heb dit geprobeerd:
PHP:
<?php
$num_to_guess = 42;
 
$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;
$message = "Welcome to the guessing machine!";
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!is_numeric($_POST['guess'])) {
        $message = "I don't understand that response.";
    } elseif ($_POST['guess'] == $num_to_guess) {
        $message = "Well done!";
    } elseif ($_POST['guess'] > $num_to_guess) {
        $message = $_POST['guess']." is too big! Try a smaller number.";
    } elseif ($_POST['guess'] < $num_to_guess) {
        $message = $_POST['guess']." is too small! Try a larger number.";
    } else {
        $message = "I am terribly confused.";
    }
} else {
<!DOCTYPE html>
<html>
    <head>
        <title>A PHP number guessing script</title>
    </head>
    <body>
        <h1><?php echo $message; ?></h1>
        <p><strong>Guess number:</strong><?php echo $num_tries; ?></p>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <p><label for="guess">Type your guess here:</label><br/>
        <input type="text" id="guess" name="guess" /></p>
        <input type="hidden" name="num_tries" value="<?php echo $num_tries; ?>" />
        <button type="submit" name="submit" value="submit">Submit</button>
        </form>
    </body>
</html>
}
?>

Maar dat geeft een aantal errors, ik heb ook geprobeerd de laatste else statement weg te laten, dan krijg ik geen error maar count de counter niet.
 
Je hebt nu HTML tussen je PHP code staan. De PHP interpreter probeert dat ook uit te voeren als PHP code, maar omdat het geen PHP is lukt dat niet. Je moet het PHP deel afsluiten na de else en weer starten voor de laatste '}':

PHP:
<?php
$num_to_guess = 42;
 
$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;
$message = "Welcome to the guessing machine!";
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!is_numeric($_POST['guess'])) {
        $message = "I don't understand that response.";
    } elseif ($_POST['guess'] == $num_to_guess) {
        $message = "Well done!";
    } elseif ($_POST['guess'] > $num_to_guess) {
        $message = $_POST['guess']." is too big! Try a smaller number.";
    } elseif ($_POST['guess'] < $num_to_guess) {
        $message = $_POST['guess']." is too small! Try a larger number.";
    } else {
        $message = "I am terribly confused.";
    }
} else {
?>
<!DOCTYPE html>
<html>
    <head>
        <title>A PHP number guessing script</title>
    </head>
    <body>
        <h1><?php echo $message; ?></h1>
        <p><strong>Guess number:</strong><?php echo $num_tries; ?></p>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <p><label for="guess">Type your guess here:</label><br/>
        <input type="text" id="guess" name="guess" /></p>
        <input type="hidden" name="num_tries" value="<?php echo $num_tries; ?>" />
        <button type="submit" name="submit" value="submit">Submit</button>
        </form>
    </body>
</html>
<?php
}
?>
 
Ik dacht dat ik dat gisteren ook had geprobeerd, maar dat er niks gebeurde. Nu probeer ik hetzelfde en ik krijg weliswaar geen error.
Maar nadat ik iets of niets in het form vul en op de submit button druk, verdwijnt de page en krijg ik een blanco page tevoorschijn.

EDIT: Is deze voorbeeld misschien outdated?
 
Laatst bewerkt:
Aangezien het formulier opnieuw getoond moet worden is de laatste else niet nodig:
PHP:
<?php
$num_to_guess = 42;
 
$num_tries = isset($_POST['num_tries']) ? (int) $_POST['num_tries']++ : 1;
$message = "Welcome to the guessing machine!";
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!is_numeric($_POST['guess'])) {
        $message = "I don't understand that response.";
    } elseif ($_POST['guess'] == $num_to_guess) {
        $message = "Well done!";
    } elseif ($_POST['guess'] > $num_to_guess) {
        $message = $_POST['guess']." is too big! Try a smaller number.";
    } elseif ($_POST['guess'] < $num_to_guess) {
        $message = $_POST['guess']." is too small! Try a larger number.";
    } else {
        $message = "I am terribly confused.";
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>A PHP number guessing script</title>
    </head>
    <body>
        <h1><?php echo $message; ?></h1>
        <p><strong>Guess number:</strong><?php echo $num_tries; ?></p>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <p><label for="guess">Type your guess here:</label><br/>
        <input type="text" id="guess" name="guess" /></p>
        <input type="hidden" name="num_tries" value="<?php echo $num_tries; ?>" />
        <button type="submit" name="submit" value="submit">Submit</button>
        </form>
    </body>
</html>
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan