Ankündigung

Einklappen
Keine Ankündigung bisher.

Array wird gelöscht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array wird gelöscht

    Hi,

    vorab: ich bin völlig neu in PHP, habe aber gute Kentnisse in anderen Sprachen.

    Nun möchte ich mit folgendem Code auf Knopfdruck eine Tabelle neu aufbauen da sich beim Knopfdruck eine Zeile hinzufügt:

    PHP-Code:
    $team '';
    $stil '';
    $anzahl '';
    $ateam = array();
    $astil = array();
    $aanzahl = array();

    if (isset(
    $_REQUEST['add'])) {
        
    $team $_POST['team'];
        
    $stil $_POST['stil'];
        
    $anzahl $_POST['anzahl'];

        
    array_push($ateam$team);
        
    array_push($astil$stil);
        
    array_push($aanzahl$anzahl);

        
    $count count($team);
        echo 
    "<table width=\"$width\" border=\"$border\">\n";

           for (
    $i 0$i $count$i++)
           {
               echo 
    "  <tr>\n";
               echo 
    "  <td>\n";
               echo 
    $ateam[$i];
               echo 
    "  </td>\n";
               echo 
    "  <td>\n";
               echo 
    $astil[$i];
               echo 
    "  </td>\n";
               echo 
    "  <td>\n";
               echo 
    $aanzahl[$i];
               echo 
    "  </td>\n";
               echo 
    "  </tr>\n";
           }
           echo 
    "</table>\n"

    nun mein Problem ist, dass bei jedem Knopfdruck, die Tabelle zwar neu aufgebaut wird, die Arrays $ateam, $astil und $aanzahl jedoch leer sind bzw. immer nur der gerade in diesem Aufruf hinzugefügte Wert (z.B. array_push($ateam, $team)) im Array gespeichert ist. Es scheint als ob das entsprechende Array zu irgend einem Zeitpunkt gelöscht wird.

    Für Infos / Tipps bin ich sehr dankbar!

    Grüsse dollar


  • #2
    Dein Skript wird genau so ausgeführt, wie es im Quellcode steht. Dein Array wird also hier zurückgesetzt, so wie du es eben auch programmiert hast:
    PHP-Code:
    <?php
    $ateam 
    = array(); 
    $astil = array(); 
    $aanzahl = array(); 
    ?>
    Wenn du etwas über die Skriptlaufzeit hinaus speichern möchtest, benutz die Session.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Wenn du die Seite neulädst ist es doch allzu normal, dass das Array wieder leer ist? oder Speicherst du das Array in der Session o.a. ? Allzu normal?! das klingt wie Günther Netzer o_O

      Kommentar


      • #4
        HTTP ist Zustandslos, d.h. zwischen 2 Requests vergisst der Server alles von einem vorherigen Request.

        Verwende Sessions, um Daten Request-übergreifend zu speichern.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          ..dann muss ich mich wohl oder übel zuerst in sessions einarbeiten..hmmm

          Kommentar


          • #6
            PHP ist keine normale Programmiersprache ..

            erinnere dich bei solchen Sachen immer an die Arbeitsweise von WebServern

            1) Client schickt http-request -> (Webserver ist da eigentlich noch in Ruhe - sprich PHP läuft nicht)
            2) WebServer empfängt request und leitet ihn im Falle von php an den php-interpreter weiter

            3) der bearbeitet den request , in dem er "einmal" dein script abarbeitet - da dies für ihn jedesmal wie das erste mal ist , daher sind deine Variablen leer, - du müsstest die also irgendwo SICHER ablegen, zb Datenbank . oder wenigstens "!in" der Session, also im Session-Cookie ...

            4) php generiert dabei die HTML-Antwort, übergibt sie an den Webserver

            der
            5) schickt html-Antwort an den Browser im Client und der stellt sie dar .



            ALSO .. Datenbank oder Datei (sry hab ich eben vergessen ^^) oder SESSION zum speichern nehmen, sonst "vergisst" PHP wieder alles
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

            Kommentar


            • #7
              die Einarbeitungszeit in Sessions sollte für dich gering sein... erzeuge sie am Anfang deines Skriptes mittels session_start();

              Danach steht dir die Superglobale $_SESSION zur Verfügung, in die du alles rein packen kannst, was du magst.

              Kommentar


              • #8
                vorsicht - beim wiederauspacken ist das Kram erstmal alles nur eine Zeichenkette - also Zahlen am besten mit intval / floatval casten
                "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                Kommentar


                • #9
                  Zitat von eagle275 Beitrag anzeigen
                  vorsicht - beim wiederauspacken ist das Kram erstmal alles nur eine Zeichenkette - also Zahlen am besten mit intval / floatval casten
                  Das stimmt so allerdings nicht. Die serialize()-Funktion kann durchaus eine Typunterscheidung machen und entsprechend wiederherstellen.
                  "Mein Name ist Lohse, ich kaufe hier ein."

                  Kommentar


                  • #10
                    schwer ist diese session nun wirklich nicht zu verstehen, dennoch funktioniert nicht alles wie es sollte. nachdem ich die neuen werte den arrays hinzugefügt habe, speichere ich die arrays in der $_SESSION und hole sie gleich wieder raus:

                    PHP-Code:
                    $_SESSION['team'] = $ateam;
                    $_SESSION['stil'] = $astil;
                    $_SESSION['anzahl'] = $aanzahl;

                    $ateam $_SESSION['team'];
                    $ateam $_SESSION['stil'];
                    $ateam $_SESSION['anzahl']; 
                    danach baue ich dann wieder meine Tabelle auf:

                    PHP-Code:
                    $count count($ateam);
                        echo 
                    "<table width=\"$width\" border=\"$border\">\n";

                           for (
                    $i 0$i $count$i++)
                           {
                               echo 
                    "  <tr>\n";
                               echo 
                    "  <td>\n";
                               echo 
                    $ateam[$i];
                               echo 
                    "  </td>\n";
                               echo 
                    "  <td>\n";
                               echo 
                    $astil[$i];
                               echo 
                    "  </td>\n";
                               echo 
                    "  <td>\n";
                               echo 
                    $aanzahl[$i];
                               echo 
                    "  </td>\n";
                               echo 
                    "  </tr>\n";
                           }
                           echo 
                    "</table>\n"

                    ja, wie soll ich sagen, dass Ergebnis ist genau das selbe..

                    Kommentar


                    • #11
                      Zitat von dollar Beitrag anzeigen
                      schwer ist diese session nun wirklich nicht zu verstehen, dennoch funktioniert nicht alles wie es sollte. nachdem ich die neuen werte den arrays hinzugefügt habe, speichere ich die arrays in der $_SESSION und hole sie gleich wieder raus:

                      [PHP]
                      $_SESSION['team'] = $ateam;
                      $_SESSION['stil'] = $astil;
                      $_SESSION['anzahl'] = $aanzahl;[php]
                      Wenn du das immer noch bei jedem Scriptaufruf machst, ohne dass die $a...-Variablen immer Werte haben - dann ist das von der Logik her immer noch der gleiche Käse ...

                      Kommentar


                      • #12
                        Du musst eine Fallunterscheidung machen: Erster Aufruf (Session leer), folgender Aufruf (Session nicht leer). Gespeichert werden nur Werte die im $_SESSION-Array stehen, wenn du eine Zuweisung daraus machst ($a = $_SESSION["a"]) wird eine Kopie des Wertes erzeugt, wenn du $a also danach erweiterst, hat das keinen Einfluß auf die Session.

                        Schreib das vor dein Skript (sowieso immer!):
                        PHP-Code:
                        <?hphp
                        error_reporting(E_ALL | E_STRICT);
                        ini_set("display_errors", 1);
                        ?>
                        "Mein Name ist Lohse, ich kaufe hier ein."

                        Kommentar


                        • #13
                          Zitat von ChrisB Beitrag anzeigen
                          Wenn du das immer noch bei jedem Scriptaufruf machst, ohne dass die $a...-Variablen immer Werte haben - dann ist das von der Logik her immer noch der gleiche Käse ...
                          wird den wenn ich auf den Button klicke der gesamte PHP Code oder nur der Code unter if (isset($_REQUEST['add'])) aufgerufen?

                          Kommentar


                          • #14
                            dein PHP Code beginnt jedesmal von ganz vorne - du kannst den Fluss nur etwas beeinflussen durch if-Blöcke oder so
                            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                            Kommentar


                            • #15
                              geilo, ich habs. ich musste also nur die deklarierung der arrays aus der "tabellen erstellen funktion" herausnehmen.

                              PHP-Code:
                              if(isset($_SESSION['team']))
                              {
                                 
                              $ateam $_SESSION['team'];
                              }
                              if(isset(
                              $_SESSION['stil']))
                              {
                                 
                              $astil $_SESSION['stil'];
                              }
                              if(isset(
                              $_SESSION['anzahl']))
                              {
                                 
                              $aanzahl $_SESSION['anzahl'];


                              herzlichen dank allen beteiligten für die hilfestellungen, geile community hier!

                              Kommentar

                              Lädt...
                              X