Ankündigung

Einklappen
Keine Ankündigung bisher.

Datensatzabfrage mit while-Schleife

Einklappen

Neue Werbung 2019

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

  • Datensatzabfrage mit while-Schleife

    Hallo liebe PHP-Gemeinde,
    ich lese mit einer while-Schleife per arrays Datensätze aus einer Tabelle und möchte innerhalb dieser Schleife noch einmal weiter unten auf ein bereits ausgelesenes Array zugreifen.
    Während die Ausgabe in der Tabelle ohne Probleme funktioniert, klappt es unten im hidden-Feld nicht.
    Fehlermeldung: Undefined array key "id".

    PHP-Code:
    echo "<table>";
    while(
    $row mysqli_fetch_assoc($result)) {
        echo 
    "<tr>";
        echo 
    "<td>".$row['id']."</td>";
        echo 
    "<td>".$row['event']."</td>";
        echo 
    "<td>".$row['untertitel']."</td>";
        if(
    $row['datefrom'] != NULL) {
        echo 
    "<td>";
        echo 
    date_mysql2german($row['datefrom']);
        }
        echo 
    "</td>";    
        echo 
    "<td>".$row['timefrom']."</td>"
        
    .....
        echo 
    '<td><form><input type="hidden" name="password" id="password" value="'.$row['id'].'">
            <input type="hidden" name="password" id="password" value="'
    .$row['event'].'">
            <input type="submit" class="buttonSubmit2" name="edit" id="edit" value="bearbeiten"></form></td>'
    ;

       echo 
    "</tr>";
       }
        echo 
    "</table>"
    Kann ein Array-Wert nur einmal abgerufen werden? Was denke ich falsch?
    Andreas

  • #2
    Habe oben schon korrigiert. Aber nicht problemrelevant.

    Kommentar


    • #3
      Zitat von Karamba19395 Beitrag anzeigen
      ich lese mit einer while-Schleife per arrays Datensätze aus einer Tabelle und möchte innerhalb dieser Schleife noch einmal weiter unten auf ein bereits ausgelesenes Array zugreifen.
      Während die Ausgabe in der Tabelle ohne Probleme funktioniert, klappt es unten im hidden-Feld nicht.
      Fehlermeldung: Undefined array key "id".
      Elemente aus Arrays können beliebig oft ausgelesen werden, das Problem liegt wohl in dem Code den du nicht zeigst (das was statt der Punkte nach dem Syntayfehler steht).

      PHP-Code:
      echo '<td><form><input type="hidden" name="password" id="password" value="'.$row['id'].'">
      <input type="hidden" name="password" id="password" value="'
      .$row['event'].'"> 
      Das wird nicht so funktionieren wie du dir das vmtl. vorstellst: der id-Wert wird beim Abschicken des Formulars nicht beim Zielscript angekommen da er von dem event-Wert überschrieben wird - zweimal der gleiche Name für ein Formularfeld funktioniert (ohne eckige Klammern) nicht.

      Zitat von Karamba19395 Beitrag anzeigen
      Habe oben schon korrigiert. Aber nicht problemrelevant.
      Bahnhof.

      Kommentar


      • #4
        angesichts diesen und deinem ersten Thread hier,

        https://www.php.de/forum/webentwickl...weiten-tabelle

        bei dem eine Rückmeldung den Helfern gegenüber übrigens höflich wäre,

        möchte ich dich auf das Kapitel

        https://php-de.github.io/#debugging

        in der wissensammlung hinweisen.

        Kommentar


        • #5
          Versuch es mal wie folgt:

          value=".$row['id']."

          Kommentar


          • #6
            Schon mal allen Helfern vielen Dank. Alle Tipps blieben leider bisher erfolglos.

            Kommentar


            • #7
              Zitat von Karamba19395 Beitrag anzeigen
              Schon mal allen Helfern vielen Dank. Alle Tipps blieben leider bisher erfolglos.
              Alle Helfer freuen´ sich auf die Dokumnentation Deiner Bemühungen

              Kommentar


              • #8
                vielleicht suchst du prepared Statements?

                Code:
                <?php
                /*
                ! Setze in meinem Beispiel Postgre-SQL ein!
                */
                $conn = pg_connect("host=127.0.0.1 dbname=test user=postgres");
                $sql = pg_query($conn, "select * from generate_series(1, 10)");
                while($row = pg_fetch_row($sql)) {
                echo "<p>Normale while-Schleife: $row[0]</p>";
                }
                
                /*
                geht nichtmehr!
                while($row = pg_fetch_row($sql)) {
                echo "<p>$row[0]</p>";
                }
                */
                $sql = pg_prepare($conn, "query", "select * from generate_series(1, 10)");
                $result1 = pg_execute($conn, "query", array());
                $result2 = pg_execute($conn, "query", array());
                
                while($row = pg_fetch_row($result1)) {
                echo "<p>Result 1: $row[0]</p>";
                }
                while($row = pg_fetch_row($result2)) {
                echo "<p>Result 2: $row[0]</p>";
                }
                /*
                geht! einfach die Abfrage ausführen und zu verschiedenen Parametern binden
                */
                ?>
                Result sind 3 mal 1-10, einmal in einer normalen Schleife, zweimal aus dem prepared Statement!

                LG

                EDIT:
                Nach zweitem mal durchlesen genauer draufgekommen, was du möchtest, geht aber auch:

                Code:
                <?php
                    $conn = pg_connect("host=127.0.0.1 dbname=test user=postgres");
                
                    $sql = pg_prepare($conn, "query", "select * from generate_series(1, 10)");
                
                    $result1 = pg_execute($conn, "query", array());
                  
                    while($row = pg_fetch_row($result1)) {
                        echo "<p>Result: $row[0] und $row[0]</p>";
                    }
                ?>
                RESULT:
                Code:
                Result: 1 und 1
                
                Result: 2 und 2
                
                Result: 3 und 3
                
                Result: 4 und 4
                
                Result: 5 und 5
                
                Result: 6 und 6
                
                Result: 7 und 7
                
                Result: 8 und 8
                
                Result: 9 und 9
                
                Result: 10 und 10

                Kommentar


                • #9
                  der Fehler „Undefined array key 'id'“ bedeutet, dass zu dem Zeitpunkt, an dem du auf $row['id'] zugreifen willst, dieser Schlüssel nicht existiert – nicht, dass du ihn „nur einmal verwenden darfst“. PHP-Arrays dürfen beliebig oft verwendet werden, solange sie noch existieren und der Schlüssel gesetzt ist.
                  Wahrscheinlichste Ursache:

                  Dein Code funktioniert beim Ausgeben der Tabelle, aber weiter unten im Skript (nach dem while) versuchst du eventuell nochmal auf $row['id'] zuzugreifen – außerhalb der Schleife. Das Problem: Nach der while-Schleife ist $row nicht mehr gültig, weil mysqli_fetch_assoc($result) beim letzten Durchlauf false zurückgibt und dann in $row steht.

                  Nebenbei: Du hast 2 input-Felder mit derselben id="password"
                  sorry, shift-taste kaputt

                  Kommentar


                  • #10
                    Mit den Arrays hat es nach wie vor nicht geklappt.
                    Ich habe jetzt den Arrays innerhalb der while-Schleife eine Variable zugewiesen und diese in das Feld als value gesetzt. Dann klappts.
                    Aber den Grund, warum es anfangs mit den arrays nicht klappte, habe ich nicht finden können.

                    Vielen Dank.

                    Kommentar

                    Lädt...
                    X