Stephanie G.: Zahl sollte 0 sein, ist aber die Wurzel einer anderen Zahl

<html>
<head>
<title>
PHP Project
</title>
<META http-equiv=imagetoolbar content=no>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<link href="style.css" type="text/css" rel="stylesheet">
</head>
<body>
<div id=position>
<div id=window>

<div id=text1>
<b>Herzlich Willkommen zu meinem PHP-Projekt!</b><br>
Mit diesem Programm können Sie ihre Rechenfertigkeit trainieren.
Links wird eine Zufallszahl zwischen <i>1 und 1.000</i> ausgegeben. Überlegen
Sie im Kopf, wie groß die Wurzel dieser Zahl sein könnte, geben Sie sie rechts
ein und drücken Sie <i>"Senden".</i> Weiter unten wird der Fehler ihrer Überlegung
grafisch dargestellt. Sie können maximal <i>10</i> Versuche starten. <b>Viel Spaß!</b>
</div>

<div id=layout>
<img width=680 height=470 src="layout.gif">
</div>

<div id=bg_calc>
<img width=400 height=160 src="bg_calc.gif">
</div>

<div id=text2>

<?php

$senden = $_POST['senden'];

srand((double)microtime()*1000000);
    $zzahl = rand() % 1000 + 1;
    echo "Die Zufallszahl lautet: <b>$zzahl</b><br><br>";
    echo
         '<form action="'.$PHP_SELF.'" method="post" target="">'.
         'Bitte geben Sie hier die Wurzel ein: <input type="Text" name="g_zahl" value="0"><br>';
    echo '<input type="Submit" name="senden" value="Senden">';

echo "Das hier ist die eingegebene Zahl: $g_zahl";
    $wzzahl = sqrt($zzahl);
    echo "$wzzahl<br>";

if ($wzzahl > $g_zahl)
    { $fehler = $wzzahl/$g_zahl;
         echo "Wurzel > Wurzel geraten: $fehler<br>";
    }elseif ($wzzahl < $g_zahl){
     $fehler = $g_zahl/$wzzahl;
         echo "Wurzel geraten > Wurzel: $fehler<br>";
    }else{
     $fehler = 1;
    }

$proz = $fehler * 100 - 100;
    echo "Fehler in Prozent: $proz";

echo '</div>';

echo '<div id=text3>';

echo '</div>';
    echo '</div>';
    echo '</div>';

echo '</form>';
?>
</body>
</html>

Da ich hier
'Bitte geben Sie hier die Wurzel ein: <input type="Text" name="g_zahl" value="0"><br>';
die Variable g_zahl auf 0 gesetzt habe, sollte sie immer 0 sein.

Hier gebe ich die Variable aus:
echo "Das hier ist die eingegebene Zahl: $g_zahl";

Seltsamer wird aber nicht 0 ausgegeben, sondern exakt die Wurzel der generierten Zufallszahl.
Ich kann mir das nicht erklären.

Kann jemand helfen?
mfg
Stephanie G.

  1. Hi nochmal,

    Seltsamer wird aber nicht 0 ausgegeben, sondern exakt die Wurzel der generierten Zufallszahl.

    _wann_ wird das ausgegeben, nach dem Absenden des Formulares?
    Du hast g_zahl erst dann gesetzt, wenn das Formular abgeschickt wurde. Da es eine Textbox ist, die geändert werden kann, ist der Wert auch nicht notwendigerweise 0 sondern das, was zum Absendezeitpunkt im Textfeld stand.
    Ansonsten beschreibe mal bitte nochmal genau was da gerade schief läuft...

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
    1. Ich gebe im Browser die Adresse ein, das Programm wird aufgerufen.
      Im Textfeld g_zahl steht "0", wie es sein sollte (habe ja value=0 gesetzt).
      Eine Zufallszahl ist generiert, darunter steht schon die ausgegebene g_zahl (=Wurzel der Zufallszahl).

      Wenn ich jetzt auf "Senden" klicke, ohne dass sich eine Zahl in die Textbox ausgebe, wird eine neue Zufallszahl generiert und darunter steht wieder die ausgegebene g_zahl, die die Wurzel der Zufallszahl ist.

      Wenn ich auf "Senden" klicke und davor etwas in die Textbox eingegeben habe, wird wieder g_zahl ausgegeben, die die Wurzel der Zufallszahl ist, und in der Textbox steht wieder 0 (was ja eh so sein soll).

      Kurz und gut, g_zahl ist immer die Wurzel der Zufallszahl, egal was ich tue.

      1. Hi Stephanie,

        das musste ich doch tatsächlich erstmal selbst laufen lassen, aber jetzt ist klar.

        echo "Das hier ist die eingegebene Zahl: $g_zahl";
            $wzzahl = sqrt($zzahl);
            echo "$wzzahl<br>";

        Nene, deine $g_zahl ist immer noch nicht defininiert (du solltest mal die Warnings in deinem Skript anschalten: error_reporting).
        Was du siehst ist eigentlich
        "Das hier ist die eingegebene Zahl:" "<Inhalt von $g_zahl = leer>" "<$wzzahl = Wurzel>"

        MfG
        Rouven

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        1. Ah, ich habs verstanden!
          Im Textfeld steht zwar Name = g_zahl, aber die Variable g_zahl ist noch nicht definiert, deshalb wird auch nichts ausgegeben.

          Vielen Dank!
          (Nichtmal mein PHP-Lehrer hat den Fehler gefunden, als ich ihm das Script gezeigt hab....)