Stephanie G.: werte werden nicht in feld gespeichert

ich kopiers mal schnell rein, hab im augenblick leider wenig zeit..ihc hoffe, jemand kann weiterhelfen.

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

// Formular erstellen, geratene Zahl einlesen, Formular beenden
echo '<form action="'.$PHP_SELF.'" method="post" target="">';

// Zufallszahl definieren und ausgeben
srand((double)microtime()*1000000);
$zzahl = rand() % 1000 + 1;
echo "Die Zufallszahl lautet: <b>$zzahl</b><br>";
echo "Bitte geben Sie hier die Wurzel ein: <input type="Text" name="g_zahl">";
echo "<input type="submit" name="senden" value="Senden">";

echo "<br>Die eingegebene Zahl lautete: $g_zahl";

// Berechnung und Ausgabe der Versuche
if($senden)
$anzahl = $_POST['anzahl'] + 1;

$rest = 10 - $anzahl;
echo "<br>Anzahl der verbleibenden Versuche: $rest";
echo '<input type = "hidden" name = "anzahl" value = "'.$anzahl.'">';

$tp = array();
switch($anzahl)
{
case 0:
$tp = array();
$tp[0] = $zzahl;
echo "<br>Keine Eingabe vorhanden";
break;

case 1:
$tp = array();
$tp[1] = $zzahl;
echo "<br>$tp[0]";
break;

case 2:
$tp = array();
$tp[2] = $zzahl;
echo "<br>$tp[1]";
break;

case 3:
$tp = array();
$tp[3] = $zzahl;
echo "<br>$tp[2]";
break;

case 4:
$tp = array();
$tp[4] = $zzahl;
echo "<br>$tp[3]";
break;

case 5:
$tp = array();
$tp[5] = $zzahl;
echo "<br>$tp[4]";
break;

case 6:
$tp = array();
$tp[6] = $zzahl;
echo "<br>$tp[5]";
break;

case 7:
$tp = array();
$tp[7] = $zzahl;
echo "<br>$tp[6]";
break;

case 8:
$tp = array();
$tp[8] = $zzahl;
echo "<br>$tp[7]";
break;

case 9:
$tp = array();
$tp[9] = $zzahl;
echo "<br>$tp[8]";
break;

case 10:
$tp = array();
$tp[10] = $zzahl;
echo "<br>$tp[9]";
break;
}

if($anzahl == 10)
echo "<br>Sie haben das Ende des Ratespiels erreicht!";

Das obere ist eher unwichtig, hier erklärung wie das ganze funktionieren soll:

Eine zufallszahl wird ausgegeben, beim jeden klick auf den "sende"-button wird die variable anzahl um 1 erhöht. ist die variable anzahl auf 10, wird eine meldung ausgegeben, dass das spiel beendet ist (hier müsste ich auch noch den button inaktiv machen).

als 1. wird eine zufallszahl ausgegeben, anzahl ist null, weil man ja noch nicht geklickt hat. vor der switch-anweisung ist das feld $tp definiert.
kommt man in die switch-anweisung (anzahl = 0) wird die zufallszahl in $tp[0] gespeichert und die switch-anweisung verlassen.

danach wird anzahl erhöht, man kommt wieder in die switch-anweisung, case 1, die zufallszahl wird in $tp[1] gespeichert.

immer weiter, bist anzahl 10 ist, jetzt sollte in $tp[0] bis $tp[9] alle zufallszahlen stehen, die während en 10 versuchen erstellt wurden.

wenn ich aber zb. in case 1 $tp[0] ausgeben will (das ja schon gespeichert sein sollte) wird nichts ausgegeben....

warum werden die werte nicht gespeichert?

  1. Hallo auch Du,

    wenn ich aber zb. in case 1 $tp[0] ausgeben will (das ja schon gespeichert sein sollte) wird nichts ausgegeben....

    warum werden die werte nicht gespeichert?

    Wo "speicherst" ( sagen wir lieber merkst ) Du Dir denn Dein Array?
    Wie übergibst Du es an den nächsten Aufruf?

    Gruß Chris

    1. Hallo auch Du,

      wenn ich aber zb. in case 1 $tp[0] ausgeben will (das ja schon gespeichert sein sollte) wird nichts ausgegeben....

      warum werden die werte nicht gespeichert?

      Wo "speicherst" ( sagen wir lieber merkst ) Du Dir denn Dein Array?
      Wie übergibst Du es an den nächsten Aufruf?

      Gruß Chris

      Da sind wir jetzt durch probieren auch schon draufgekommen; die erste Abfrage sieht nun so aus:

      =>>

      $tp = array();

      if($anzahl == 0)
          {
              $tp[0]= $zzahl;
              echo "Keine Eingabe";
              echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
          }else{
           [...]

      funktionieren tuts aber trotzdem nicht.
      könnt das dran liegen, dass ich vor der if-anweisung $tp=array(); definiere und es somit bei jedem durchlauf neu definiert wird und die alten werte überschrieben werden? ich habe auch schon versucht, die felddefinition wegzulassen, aber das funktioniert ebenso wenig....

      1. Hallo auch Du noch einmal,

        Da sind wir jetzt durch probieren auch schon draufgekommen; die erste Abfrage sieht nun so aus:

        =>>

        $tp = array();

        if($anzahl == 0)
            {
                $tp[0]= $zzahl;
                echo "Keine Eingabe";
                echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
            }else{
             [...]

        funktionieren tuts aber trotzdem nicht.
        könnt das dran liegen, dass ich vor der if-anweisung $tp=array(); definiere und es somit bei jedem durchlauf neu definiert wird und die alten werte überschrieben werden? ich habe auch schon versucht, die felddefinition wegzulassen, aber das funktioniert ebenso wenig....

        ich weiss ;-)

        Nun gut, Du hast ein Array an dass Du fortlaufend Deine Zufallszahlen  anhängst.
        So wie Du es oben gemacht hast kannst Du Dir das (Array) sparen und nur die Werte mittels, jeweils neu erzeugtem input weitergeben.
        Hat halt den Nachteil dass es eine Routine braucht die schaut was schon mitgegeben wurde.

        An Deiner Stelle würde ich beim ersten Aufruf das Array "tp" initialisieren. Und es dann in einem hidden input mitgeben.
        Also Auslesen -> Bearbeiten (Zufallszahl anhängen) -> Abschicken.

        Und weil Du Arrays nicht ohne weiteres übergeben kannst schaue Dir im PHP Manual die Funktionen serialize und unserialize an.

        Am Ende sollte es so aussehen:
        Auslesen -> unserialize -> Bearbeiten -> serialize -> Abschicken.

        Gruß Chris

        1. An Deiner Stelle würde ich beim ersten Aufruf das Array "tp" initialisieren. Und es dann in einem hidden input mitgeben.

          Sieht nun so aus:
              if($anzahl == 0)
              {
                  $tp = array();
                  $tp[0]= $zzahl;
                  echo "<br>Keine Eingabe";
                  echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
              }
          Passt das so? Oder sollte ich bei hidden den namen in alle 10 fällen auf "tp" ändern?

          Also Auslesen -> Bearbeiten (Zufallszahl anhängen) -> Abschicken.

          Entspricht mein obiger Ausschnitt deinem ablauf?

          Und weil Du Arrays nicht ohne weiteres übergeben kannst schaue Dir im PHP Manual die Funktionen serialize und unserialize

          eeeehm...von der funktion hör ich zum ersten mal was. wie soll ich die anwenden?
          so? ->

          if($anzahl == 0)
              {
                  $tp = array();
                  $tp[0]= $zzahl;
                  $tp[0] = unserialize ($tp[0]);
                  echo "<br>Keine Eingabe";
                  echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
              }

          öder könntest du mir anhand einem bsp sagen, wie du das meinst?
          ich kenn mich in php echt fast nix aus und kann dementsprechend wenig mit dem anfangen....

          1. Du solltest Dir in erster Linie klar machen was ein Array ist und wie es aufgebaut ist.

            Sieht nun so aus:
                if($anzahl == 0)
                {
                    $tp = array();
                    $tp[0]= $zzahl;
                    echo "<br>Keine Eingabe";
                    echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
                }
            Passt das so? Oder sollte ich bei hidden den namen in alle 10 fällen auf "tp" ändern?

            Also:

            Beim ersten Aufruf $anzahl == 0, erzeugst Du ein Array namens "tp", wie oben auch, dieses heisst die ganze Zeit "tp" nicht "tp0" oder sonst wie! Und enthält beim ertsen Aufruf auch keinen Wert. Wenn User seine Daten abschickt, gibst Du alles relevante mit Deinen hidden inputs mit -> Anzahl, Zufallszahl, das mit serialize behandelte Array , etc.

            Beim nächsten Aufruf liest Du alles aus:
            Anzahl, Zufallszahl, Dein Array tp und um es bearbeiten zu können verwendest Du ... genau ... unserialize.
            Die Anzahl zählst Du hoch, die Zufallszahl vom letzten request hängst Du an Dein Array und das Spiel geht von vorne los.

            eeeehm...von der funktion hör ich zum ersten mal was. wie soll ich die anwenden?
            so?

            if($anzahl == 0)
                {
                    $tp = array();
                    $tp[0]= $zzahl;
                    $tp[0] = unserialize ($tp[0]);
                    echo "<br>Keine Eingabe";
                    echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
                }

            Nö ;-) Zum Verständnis schaue Dir folgendes an:

            if($anzahl == 0) {

            $tp = array();
            $tp_als_string = serialize($tp);

            }
            else {
            $tp = unserialize($_POST['meinarraytp']);
            array_push($tp, $letzte_Zufallszahl); // hängt die letzte Zufallszahl  an Dein Array
            $tp_als_string = serialize($tp);
            }

            echo '<input type="hidden" name="meinarraytp" value=".$tp_als_string.">';

            Also immer nur das "ganze" Array und nicht irgendwelche Teile a lá $tp[n].

            Du kannst Dir so gar die Variable $anzahl sparen, denn alles was Du wissen musst steht auch in Deinem Array. Entweder das Ding existiert noch nicht dann ist es der erste Aufruf oder es existiert und dann kannst mittels $werte_im_array = count($tp); raus finden wo Du gerade stehst.

            Gruß Chris

            1. if($anzahl == 0)
                  {

              $tp = array();
                  $tp_als_string = serialize($tp);

              }
                  else{
                  $tp = unserialize($_POST['meinarraytp']);
                  array_push($tp, $zzahl); // hängt die letzte Zufallszahl  an Dein Array
                  $tp_als_string = serialize($tp);
                  }
                  echo '<input type="hidden" name="meinarraytp" value=".$tp_als_string.">';

              ich hab jetzt einfach mal das eingefügt...
              wie füg ich jetzt die if-abfrage "$anzahl == 1" ein? und wo?
              es tut mir leid dass ich so blöd fragen muss....aber....mir sagt das ganze überhaupt nichts; array, array_push, dann irgendwo ist da noch ein serialize und unserialize dabei, irgendwo anders wird irgendwas irgendwohin übergeben....

              blank. aber total. ich hab keinen tau wie ich das machen soll.
              es würd mir jetzt auch nicht wirklich was bringen mir zu erklären wie genau ich das machen soll, weil ich mit dem noch nie was zu tun gehabt habt und eh nicht ganz verstehen würd worums geht. ich hab versucht mit den hints selbst was zusammenzubringen, aber mir fehlt die ganze kenntnis drumherum um überhaupt zu verstehen was genau ich da tu.

              könntest du mir sagen, wie ich in den obigen ansatz die abfrage "anzahl == 1" einfügen kann und wie dass dann halt so weitergeht, bis ich "anzahl == 9" hab...?`

              danke..

              1. ich hab jetzt einfach mal das eingefügt...

                Hehe ... dazu war es auch nicht gedacht sondern wie auch geschrieben zum Verständnis wie Du an Dein Array einen neuen Wert dranhängst und es dann übergibst ;-)

                wie füg ich jetzt die if-abfrage "$anzahl == 1" ein? und wo?

                Das weisst Du vielleicht gleich selbst.

                Am Anfang hast Du Deine Zufallszahl,
                die Ominöse Wurzel,
                das Array zum merken der Zufallszahl (momentan noch "leer")
                und den Zähler der auf 0 steht.

                Dann wird das ganze abgeschickt:

                Und Du hast Zugriff auf :
                Zufallszahl = $_POST['zzahl']
                Wurzel = $_POST['g_zahl']
                Array "tp" = $_POST['meinarraytp']
                Zähler = $_POST['anzahl']

                Das wichtigste ist für Dich jetzt zu wissen ob etwas übergeben wurde,
                wenn Dein $_POST['anzahl'] vom ersten Abschicken kommt hat es die "0" und Du zählst eins hoch und schreibst es in Dein hidden feld.
                Folglich steht dort nach dem zweiten Abschicken eine "1" and so on ...

                Deine letzte Zufallszahl hast Du im $_POST['zzahl'] stehen, die hängst Du an Dein Array an ... für den Anfang vielleicht einfacher zu verstehen als array_push() ist das zuweisen in dieser Art:

                $tp[$_POST['anzahl']] = $_POST['zzahl'];

                wäre nach dem ersten abschicken also $tp[0] = $_POST['zzahl'];
                und nach dem fünften mal $tp[4] = $_POST['zzahl'];

                Wenn Dein Zähler $_POST['anzahl'] irgendwann mal auf "9" steht lässt Du Dir halt Dein "Sie haben das Ende des Ratespiels erreicht" ausgeben.

                es tut mir leid dass ich so blöd fragen muss....aber....mir sagt das ganze überhaupt nichts; array, array_push, dann irgendwo ist da noch ein serialize und unserialize dabei, irgendwo anders wird irgendwas irgendwohin übergeben....

                Yeap ... das mag sein aber ohne wirst Du wohl nicht zum gewünschten Ergebniss kommen ;-)

                blank. aber total. ich hab keinen tau wie ich das machen soll.

                Ruhig bleiben.

                es würd mir jetzt auch nicht wirklich was bringen mir zu erklären wie genau ich das machen soll, weil ich mit dem noch nie was zu tun gehabt habt und eh nicht ganz verstehen würd worums geht. ich hab versucht mit den hints selbst was zusammenzubringen, aber mir fehlt die ganze kenntnis drumherum um überhaupt zu verstehen was genau ich da tu.

                Kenntnis drumrum gibts gut erklärt und for free, da -> http://tut.php-q.net/

                Ausserdem solltest Du Dir dort durchlesen warum man alles was mittels $_POST und $_GET reinkommt prüfen sollte.

                könntest du mir sagen, wie ich in den obigen ansatz die abfrage "anzahl == 1" einfügen kann und wie dass dann halt so weitergeht, bis ich "anzahl == 9" hab...?

                Den Ansatz hast Du eben gelesen.

                danke..

                Nicht wirklich oder ;-) ... ich weiss self suckt manchmal aber es wirkt früher oder später!

                Gruß Chris

                1. Danke für die ausführliche Hilfestellung....

                  Ich hör jetzt auf mit dem, mir reichts. Ich sitz seit 5std davor und hab genau nichts weitergebracht.
                  Mal davon abgesehen dass ich mit allen möglich Hilfen eh nichts zusammenbring weil ich keine ahnung hab wie ich was einsetzen muss um was zu bewirken.

                  ein bekannter von mir programmiert php, dem geb ichs heut und er solls fertigmachen. mir reichts.

                  trotzdem danke für die hilfe....
                  ich werd meinem php-lehrer nahelegen, seinen unterricht zu überdenken.

                  1. Ich hör jetzt auf mit dem, mir reichts. Ich sitz seit 5std davor und hab genau nichts weitergebracht.

                    Du willst mir doch nicht sagen dass alle meine Bemühungen für den A... waren ;-)

                    ich werd meinem php-lehrer nahelegen, seinen unterricht zu überdenken.

                    Ich würde mir das Tutorial anschauen, das was Du schon weisst noch mal durch den Kopf gehen lassen und ihm ein Brett von Script an den Kopf werfen ... dann überdenkt er von ganz alleine.

                    Gruß Chris

                    1. Du willst mir doch nicht sagen dass alle meine Bemühungen für den A... waren ;-)

                      Nene, war es nicht! :)
                      Ich grabe mich eh grad durch das Tut, bin grad bei den arrays angekommen ^^'
                      werd später das ganze nochmal versuchen....

                      Ich würde mir das Tutorial anschauen, das was Du schon weisst noch mal durch den Kopf gehen lassen und ihm ein Brett von Script an den Kopf werfen ... dann überdenkt er von ganz alleine.

                      Gruß Chris

                      Ich hoffe es zumindest....der Unterricht jetzt ist ein Horror. Und wir haben auch schon mit mySQL angefangen. Yeah :)

                    2. Ich hab mir das tut, dass du mir empfohlen hast, durchgelesen, ich habe den Aufbau geplant...ich habs eingegeben...und es hat funktioniert :D
                      frag mich bitte nicht WIE es funktioniert hat - ich brauch eigentlich nichteinmal das feld, weil ich nur $tp[0] in anspruch nehme....
                      hier mal der code:

                      if($anzahl == 0)
                          {
                              $tp = array(0);
                              $tp_als_string = serialize($tp);
                              echo '<input type = "hidden" name = "zzahl" value = "'.$zzahl.'">';
                              echo '<input type = "hidden" name = "meinarray" value = "'.$tp_als_string.'">';
                          }else{
                                if($anzahl == 1)
                                {
                                    $tp = unserialize($_POST['meinarray']);
                                    $tp[$_POST['anzahl']] = $_POST['zzahl'];
                                    $tp_als_string = serialize($tp);
                                    echo '<input type = "hidden" name = "zzahl" value = "'.$zzahl.'">';
                                    echo '<input type = "hidden" name = "meinarray" value = "'.$tp_als_string.'">';
                                    // print_r($tp);
                                    echo "<br>Die vorherige Zufallszahl lautet: <b>$tp[0]</b>";
                                }
                          }

                      Am Anfang des php-files habe ich noch --->
                      $zzahl = $_POST['zzahl'];
                      hinzugefügt.

                      Einziger Haken: Der Zähler funktioniert nicht mehr, er bleibt auf 10 stehen. mhh....

                      Trotzdem danke vielmals!! :D

        2. Habs mal versucht und sieht jetzt so aus:

          if($anzahl == 0)
              {
                  $tp = array();
                  $tp[0]= $zzahl;
                  $tp[0] = unserialize ($tp[0]);
                  echo "<br>Keine Eingabe";
                  $tp[0] = array (serialize($tp));
                  echo '<input type = "hidden" name = "tp0" value = "'.$tp[0].'">';
              }else{
                    if($anzahl == 1)
                    {
                        $tp[1] = $zzahl;
                        $tp[1] = unserialize ($tp[1]);
                        echo "<br>tp0 = $tp[0]";
                        $tp[1] = array (serialize($tp));
                        echo '<input type = "hidden" name = "tp1" value = "'.$tp[1].'">';
                    }
              }

          Ausgeben wird trotzdem nichts, es steht einfach
          "tp0=" da.

  2. Ich weiß nicht, ob es damit zusammenhängt, aber benutz doch mal statt $PHP_SELF $_SERVER['PHP_SELF']

    1. Ich weiß nicht, ob es damit zusammenhängt, aber benutz doch mal statt $PHP_SELF $_SERVER['PHP_SELF']

      sieht jetzt so aus =>

      echo '<form action="'.$_SERVER['PHP_SELF']'" method="post" target="">';

      gibt fehlermeldung aus, dass der strichpunkt unerwartet is...

      1. Hallo Stephanie.

        echo '<form action="'.$_SERVER['PHP_SELF']'" method="post" target="">';

        gibt fehlermeldung aus, dass der strichpunkt unerwartet is...

        Soll hier aber heißen, dass ein Punkt fehlt.

        Einen schönen Mittwoch 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]
  3. Hallo,

    zuerstmal sollten Sie eine Begrüßung verfassen, bevor es zur Fragestellung kommt.
    Desweiteren hat es mir damals sehr geholfen, wenn ich von meinem eigentlichen Projekt weggegangen bin, und mir die einzelnen Funktionen mal ganz simpel angeschaut habe, und vorallem probiert habe, was machen Sie.

    Das sollten Sie auch tun. Es wird sich hier sicher keiner finden der Ihnen den kompletten Code postet. Fehler werden Sie immmer machen, und es gibt sicher viele Lösungen. Die eine ist eben etwas umständlich, die andere dagegen von Kopf bis Fuß durchdacht. Wie das Script zum Schluß funktioniert, spielt dabei keine Rolle.

    Also, versuchen Sie sich mit den einzelnen Funktionen vertraut zu machen, und probieren Sie einwenig damit herum. Logischerweise in Verbindung mit anderen Funktionen.

    Lesen, ist das eine, Verstehen das andere. Beides ist Pflicht um später ein funktionierendes Script zu haben.

    Gruß
    der offene
    koFFer

    .................
    written by koFFer

    1. Normalerweise poste ich auch eine Begrüssung, aber ich war dieses mal sehr in eile....

      natürlich würde ich mir normalerweise die funktionen im einzelnen ansehen und mich mit ihnen vertraut machen.
      das problem ist, dass morgen abgabe-termin des projektes ist.
      davor hatten wir insg. 6 stunden unterricht in php.
      viele elementare verhältnisse von php etc wurden uns nicht erklärt.
      und mit diesen mehr als geringen kenntnissen sollen die schüler nun ein projekt erstellen. ich hoffe, sie verstehen irgendwo, dass ich zurzeit nur nach irgendeiner funktionierenden lösung suche.....