Stephanie G.: Zahl wird nicht inkrementiert

Quelltext sieht mal so aus ->
Die wichtige Stelle ist mit "=" markiert.
Jedesmal, wenn der Button "Senden" gedrückt wurde, wird die Variable Anzahl um 1 erhöht und wird ausgegeben. Sollte sie zmd, denn es steht  immer nur 1, erhöht wird nichts.

<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 10.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="http://13.13.15.3/mitglied.lycos.dee/walnuss/layout.gif">
</div>

<div id=bg_calc>
<img width=400 height=160 src="http://13.13.15.1/mitglied.lycos.dee/walnuss/bg_calc.gif">
</div>

// Ergebnis / 10000 => Rest = zw. 0 und 9999. + 1 => zw. 0 und 10000
<div id=text2>

<?php

$g_zahl = $_POST['g_zahl'];
 $senden = $_POST['senden'];
 $anzahl = 0;

srand((double)microtime()*1000000);
 $zzahl = rand() % 10000 + 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"><br>';
 echo '<input type="Submit" name="senden" value="Senden">';

=======================================
        if($senden)
 {
 $anzahl = $_POST['anzahl'] + 1;
 }
         echo $anzahl;</b>

==========================================

echo '</div>';

echo '<div id=text3>';

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

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

mfg
Stephanie G.

  1. Hi,

    =======================================
            if($senden)
    {
    $anzahl = $_POST['anzahl'] + 1;
    }
             echo $anzahl;</b>

    ==========================================

    soooo, und nun hätt' ich da mal eine Frage: Wo ist denn das Formularfeld, wo $_POST['anzahl'] herkommen soll?

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
    1. $g_zahl = $_POST['g_zahl'];
       $senden = $_POST['senden'];
       $anzahl = 0;

      anzahl ist ganz oben definiert...oder wie meinst du das?
      sorry, ich bin in php blutiger anfänger, wir machen dass seit genau 6std in der schule....

      1. Hallo,

        sorry, ich bin in php blutiger anfänger, wir machen dass seit genau 6std in der schule....

        Sorry, dass ich dazwischenplatze. Ich hab zwar nix zum Thema beizutragen, aber hab ne Frage: In welcher Schule??? Und welche Klasse?

        Viele Grüße

        --
        Winning isn´t everything, it´s the only thing.
        1. Hallo,

          sorry, ich bin in php blutiger anfänger, wir machen dass seit genau 6std in der schule....

          Sorry, dass ich dazwischenplatze. Ich hab zwar nix zum Thema beizutragen, aber hab ne Frage: In welcher Schule??? Und welche Klasse?

          Viele Grüße

          Schule: HTL / Zweig Elektronik
          Klasse: 3. (von 5)

          mfg

          1. Hallo,

            Schule: HTL / Zweig Elektronik
            Klasse: 3. (von 5)

            Also eine weiterführende Schule? Keine Schule im klassischen Sinne (Klasse 1-10 bzw. 1-12)?

            Viele Grüße

            --
            Winning isn´t everything, it´s the only thing.
            1. Hallo,

              Schule: HTL / Zweig Elektronik
              Klasse: 3. (von 5)

              Also eine weiterführende Schule? Keine Schule im klassischen Sinne (Klasse 1-10 bzw. 1-12)?

              Viele Grüße

              Ahm naja ich bin Österreicherin....
              bis zur 4.klasse (=8. schulstufe) geht man gymnasium, dann kann man dieses weiterbesuchen, arbeiten gehen oder sich einen anderen schultyp (landwirtschaft, technik, tourismus, mode....) suchen.
              eine htl dauert 5 jahre und beeinhaltet eine allgemeine matura sowieso die technische matura. fertig ist man meist mit 18/19.

              1. Hallo,

                Ahm naja ich bin Österreicherin....
                bis zur 4.klasse (=8. schulstufe) geht man gymnasium, dann kann man dieses weiterbesuchen, arbeiten gehen oder sich einen anderen schultyp (landwirtschaft, technik, tourismus, mode....) suchen.
                eine htl dauert 5 jahre und beeinhaltet eine allgemeine matura sowieso die technische matura. fertig ist man meist mit 18/19.

                Und da lernt man mit dem Zweig Elektronik PHP? Ich gehe in die 10. Klasse eines deutschen Gymnasiums und wir haben letztes Jahr gerade mal ein paar Brocken Steinzeit-HTML gelernt, das war´s!

                Viele Grüße

                --
                Winning isn´t everything, it´s the only thing.
                1. Und da lernt man mit dem Zweig Elektronik PHP? Ich gehe in die 10. Klasse eines deutschen Gymnasiums und wir haben letztes Jahr gerade mal ein paar Brocken Steinzeit-HTML gelernt, das war´s!

                  Viele Grüße

                  Nunja, ich bin von der Schulstufe her auch eine Stufe über dir :)
                  und wir lernen hardware/software gleichermaßen, deshalb sind moderne programmiersprachen mit im programm.
                  wir machen das ganze aber nicht die 5 jahre durch; jedes jahr wird ein anderes thema behandelt.
                  die ersten 2 jahren waren c-programmierung, dieses jahr war html, php und mysql und nächstes jahr wird es wohl mit php und mysql weitergehen. ein buntes programm also :)

      2. Merhaba!

        Wenn $anzahl hier einfach auf 0 gesetzt wird, kommt beim späteren Inkrementieren richtigerweise 1 raus. Diese 1 wird aber nur ausgegeben und nirgendwo gespeichert. Deswegen nimmt der Server beim nächsten Aufruf wieder die 0, die da steht, inkrementiert sie und gibt wieder 1 aus... usw.

        Du mußt das Ergebnis so ablegen, daß es im nächsten Durchlauf weiterverwendet werden kann, z.B. (wohl am einfachsten) in einem Input-Feld:
        <input type="hidden" name="anzahl" value="<?php echo($anzahl); ?>">

        Und am Anfang des PHP-Scriptes setzt Du $anzahl nicht auf 0, sondern auf den Wert dieses Feldes:
        $anzahl = $_POST['anzahl']

        Dadurch wird die Zahl dann jedesmal weitergegeben und nicht immer wieder bei 0 angefangen. Ich hoffe, das hilft Dir weiter.

        Viele Grüße vom Længlich

        1. Hallo Længlich.

          Und am Anfang des PHP-Scriptes setzt Du $anzahl nicht auf 0, sondern auf den Wert dieses Feldes:
          $anzahl = $_POST['anzahl']

          Aber bitte nicht ohne Prüfung auf Existenz von $_POST['anzahl'].

          Einen schönen Montag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
          1. Ahoj!

            Klar, hast natürlich recht. Ich habe gerade beim Lesen von Rouvens Posting (der im Prinzip dasselbe empfiehlt) gemerkt, daß ich das vergessen habe. Sorry.

            Viele Grüße vom Længlich

        2. Und am Anfang des PHP-Scriptes setzt Du $anzahl nicht auf 0, sondern auf den Wert dieses Feldes:

          $anzahl = $_POST['anzahl']

          Das hab ich gemacht.

          Aber wo soll ich das <input type="hidden" ....>
          einfügen? und was bewirkt das eigentlich?
          Ich hab es mal in dem formular nach dem sende-button eingefügt - das hat nicht funktioniert...

          1. Ciao!

            Aber wo soll ich das <input type="hidden" ....>
            einfügen? und was bewirkt das eigentlich?

            Das bewirkt ein unsichtbares Formularfeld. Es muß irgendwo ins Formular (Überraschung!), aber wo genau, ist egal, da es ja sowieso unsichtbar ist. Und unsichtbar sollte es auf jeden Fall sein, damit der Benutzer nicht auf die schlaue Idee kommt, was einzugeben, was Dir nicht paßt.

            Dieses Formularfeld ist notwendig, damit $_POST['anzahl'] existiert. In diesem POST-Array stehen nämlich immer nur Werte aus Formularfeldern, d.h. wenn es kein Formularfeld mit dem Namen anzahl gibt, gibt es auch die entsprechende POST-Variable nicht. *

            Auf diese Weise (d.h. mit dem Formularfeld) kannst Du eine Variable (hier $anzahl) immer wieder zwischen Server und Client hin- und herschicken und weiterverarbeiten (z.B. inkrementieren), ohne daß zwischendurch ihr Wert verlorengeht.

            Ich hab es mal in dem formular nach dem sende-button eingefügt - das hat nicht funktioniert...

            Hmm, was genau heißt denn "nicht funktioniert"? Gab es eine Fehlermeldung oder kommt immer noch bei jedem Durchlauf 1 raus?

            Viele Grüße vom Længlich

            * ... davon ausgehend, daß der Client ein normaler Browser ist, der ein Formular abgeschickt hat, und nicht irgendein Hacker, der die Daten, die er dem Server schickt, nach Gutdünken selber schreibt. ;-)

      3. Hi,

        $anzahl = 0;

        *hüstel*, das ist ja noch schlimmer.
        Also im Klartext: Jedesmal, wenn das Skript aufgerufen wird, setzt du $anzahl auf 0. Weiter unten im Skript greifst auf auf ein nicht vorhandenes $_POST['anzahl'] zu (vielleicht kommt da freundlicherweise 0 als Antwort), erhöst diesen Wert um 1 auf 1 und schreibst das Ergebnis in $anzahl bzw. auf die Seite.
        Nun hast du ein Formular, wenn man das absendet wird das Skript neu gestartet (beachte Trennung zwischen client-seitigem Formular und serverseitigem Skript). Der Prozess beginnt von vorne (0 setzen, $_POST...).
        Was du eigentlich suchst (glaube ich zumindest), ist etwa der Gestalt:
        if (!isset($_POST['anzahl']))
           $anzahl = 0;
        else
           $anzahl = $_POST['anzahl'];

        und weiter unten:
        $anzahl++;
        echo "<input type="hidden" name="anzahl" value="$anzahl">$anzahl";
        -> Erhöhe anzahl um eins, schreib den Wert (versteckt) in ein Formular, damit er beim nächsten Aufruf auch wieder da ist und gebe ihn außerdem aus (wie bisher).

        MfG
        Rouven

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        1. Was du eigentlich suchst (glaube ich zumindest), ist etwa der Gestalt:
          if (!isset($_POST['anzahl']))
             $anzahl = 0;
          else
             $anzahl = $_POST['anzahl'];

          und weiter unten:
          $anzahl++;
          echo "<input type="hidden" name="anzahl" value="$anzahl">$anzahl";
          -> Erhöhe anzahl um eins, schreib den Wert (versteckt) in ein Formular, damit er beim nächsten Aufruf auch wieder da ist und gebe ihn außerdem aus (wie bisher).

          MfG
          Rouven

          aha, ich verstehe. php scheint ziemlich kompliziert zu sein...ich blicke noch nicht ganz durch...

          als statt $anzahl = 0 gebe ich dann

          if (!isset($_POST['anzahl']))
             $anzahl = 0;
          else
             $anzahl = $_POST['anzahl'];

          ein.

          und im formular füge ich nach dem Sende-Button

          $anzahl++;
          echo "<input type="hidden" name="anzahl" value="$anzahl">$anzahl";

          ein, richtig so?

          Ich werde es einmal versuchen.

          1. Es funktioniert noch immer nicht, ich krieg irgendwelche Fehlermeldungen und hab keine Ahnung was ich jetzt machen soll...

            könntest du deinen Code in den richtigen Stellen des Programms einfügen ? Das wäre wirklich sehr nett, ich verzweifel hier nämlich langsam...

            1. ¡Hola!

              Was sagen denn die Fehlermeldungen?

              Viele Grüße vom Længlich

              1. ¡Hola!

                Was sagen denn die Fehlermeldungen?

                Viele Grüße vom Længlich

                Irgendein Strichpunkt wird erwartet.
                Ich habe das Ganze jetzt eingefügt, es sieht jetzt so aus --->
                Neben dem Sende-Button steht jetzt immer "$anzahm" ohne die Anführungszeichen. Ich haben nirgendwo eine Variable namens $anzahm definiert!!

                das kanns doch ned geben....

                <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 10.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

                $g_zahl = $_POST['g_zahl'];
                 $senden = $_POST['senden'];

                if (!isset($_POST['anzahl']))
                    $anzahl = 0;
                 else
                    $anzahl = $_POST['anzahl'];

                srand((double)microtime()*1000000);
                 $zzahl = rand() % 10000 + 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"><br>';
                 echo '<input type="Submit" name="senden" value="Senden">';
                 $anzahl++;
                 echo '<input type="hidden" name="anzahl" value="$anzahl">';
                         echo "$anzahl";

                echo '</div>';

                echo '<div id=text3>';

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

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

                1. Privit!

                  Irgendein Strichpunkt wird erwartet.
                  Ich habe das Ganze jetzt eingefügt, es sieht jetzt so aus --->
                  Neben dem Sende-Button steht jetzt immer "$anzahm" ohne die Anführungszeichen. Ich haben nirgendwo eine Variable namens $anzahm definiert!!

                  das kanns doch ned geben....

                  Steht da wirklich "$anzahm" und nicht "$anzahl"?

                  $anzahl++;
                  echo '<input type="hidden" name="anzahl" value="$anzahl">';
                           echo "$anzahl";

                  In PHP macht es einen Unterschied, ob man Strings in einfache oder doppelte Anführungszeichen einschließt. In einfachen Anführungszeichen (Apostrophen, ') werden Variablennamen nicht ausgewertet, d.h. '$anzahl' wird genau so ausgegeben, wie es dasteht. In doppelten Anführungszeichen wird der Variablenname durch den Wert ersetzt.
                  Du mußt also in dem Codeschnipsel oben die ' durch " ersetzen und dann natürlich die " innerhalb des Strings durch ihre Escapesequenz " ersetzen.

                  Viele Grüße vom Længlich

                  1. Ja, das mit den ' und " war wirklich ein Problem.
                    Jetzt weiß ihc endlich, wie ich sie einsetzen muss...unserer Lehrer hat nie erklärt wann welche eingesetzt werden. Danke!

                    Die Aufgabenstellung des Programms an sich wurde verändert, "Anzahl" brauche ich jetzt nicht mehr. dafür ist ein anderes problem aufgetreten.
                    -----> http://forum.de.selfhtml.org/?t=128666&m=831565