Ankündigung

Einklappen
Keine Ankündigung bisher.

Einzelnen Datensatz aus Tabelle mittels übergebener ID ausgeben

Einklappen

Neue Werbung 2019

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

  • Einzelnen Datensatz aus Tabelle mittels übergebener ID ausgeben

    Hi!

    Ich habe es jetzt geschafft Daten in eine Tabelle zu schreiben, die gesamte Tabelle anzeigen zu lassen und die Übergabe der ID des jeweiligen Eintrages realisiert. Nun möchte ich für die explizite ID hinterlegte Tabellendaten bearbeiten also ändern und speichern können. So wie es verstanden habe geht das grundlegend mit SELECT und dann UPDATE.

    Ich scheitere jedoch kläglich daran mir für die übergebene ID den einzelnen Datensatz anzeigen zu lassen und dreh mich seit Stunden im Kreis^^

    Momentan sieht es so aus:
    PHP-Code:
    <?php
    #ID Übernehmen aus Link
    $id $_GET["id"];

    #Datensatz mit ID abfragen aus Tabelle
    $sql "SELECT * FROM a2 WHERE ID is $id";

    #Daten der ausgewählten ID ausgeben.
    foreach ($verbindung->query($sql) as $row) {
    echo 
    $row['A1']." ".$row['A2']."<br />";
    }
    ?>
    Ich habe verstanden, dass es am "foreach" liegt da dies nur für einen Array angewendet werden kann. Den habe ich hier ja nicht. Ich h abe aber nicht gefunden was ich dann anstelle von "foreach" angeben kann. Ich vermute mal, dass es für meine Bedarfe so gar nicht geht. Bitte um Hilfe bzw. Stichworte wo ich mich weiterarbeiten kann.

    Desweiteren würde ich gerne wissen, welche Seite ihr mir empfiehlt um die einzelnen PHP / SQL Befehle nachzuschlagen. Leider bin ich im Zuge des Problem und in meiner Recherche mehrfach auf´s Glatteis geführt worden. Beispielsweise mysql und mysqli. Ziemllich ärgerlich wenn man nach einer Stunde feststellt, dass man mit veralteten Befehlen arbeitet und es gar nicht klappen kann...

    Grüße!

  • #2
    Der Code den du uns hier zeigst ist unvollständig. $verbindung "hängt in der Luft". Schau hier wie mit PDO gearbeitet wird.
    foreach kann auch auf bestimmte Objekte angewndet werden, nicht nur auf Arrays. Dann hast du kein error_reporting aktiviert.
    Schau dir dazu das Thema Debugging an.
    Und zum dritten sollte hier besser nicht SELECT * benutzt werden, sondern statt * eine Liste der Feldnamen verwendet werden.

    Kommentar


    • #3

      Hi,

      PHP-Code:
      <?php
      //$sql = "SELECT * FROM a2 WHERE ID is $id"; <---

      $sql "SELECT * FROM a2 WHERE ID = $id";
      ?>

      Kommentar


      • #4
        Günni

        was willst du damit sagen?

        Kommentar


        • #5
          Nimm besser gleich PDO und auf jeden Fall Prepared Statemants. Du hast da eine SQL-Injection Lücke und ausserdem sonst noch einige Fehler/Unschönheiten, wie tlw. oben schon erwähnt. Fehler werden dann auch ausgegeben, und gewöhn dir gleich an richtige Bezeichner zu verwenden. a2 A2 ist Mist, das sagt nichts aus. Wenn du dir nur einen Datensatz per ID holst brauchst du nicht über das Resulset in einer Schleife fetchen, es gibt ja nur einen - wenn du hoffentlich den Index in der DB korrekt gesetzt hast.

          Noch eines: https://www.php-rocks.de/thema/49-ei...tatements.html

          Das ist auch (wie das andere oben erwähnte) von einem Forenusern hier erstellt.

          Hier zur Form-Verarbeitung https://php-de.github.io/#form

          Und FormFelder vorbelegen (für die Werte aus der DB brauchst du das) https://php-de.github.io/jumpto/text...en-der-eingabe

          Und bei der Ausgabe von "Text" aus der DB zu HTML immer htmlspecialchars() nutzen, sonst hast du gleich noch eine XSS Lücke auch noch.
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            WHERE ID is $id
            ist Phantasie-Syntax oder genauer ungeeignet für eine Id. Hab ich aber auch nicht bemerkt. Zu SQL gibt es so massenhaft Tuturials, da hab ich keines verlinkt.

            Kommentar


            • #7
              Hallo zusammen, danke für Eure Unterstützung. Der Weg über PDO ist für mich verständlicher und sehr direkt. Danke für den Tipp!

              Aufgefallen ist mir, dass man die Instanzierung, also der der Befehl die Verbindung mit einem Datenbankserver aufnehmen, welche ja in der Regel immer gleich ist nicht in eine "db_connect" packen kann da sonst die Verbindungsoptionen fehlen. Die ich ja da auch nicht reinpacken kann da diese ja von Fall zu Fall unterschiedlich sind. Ich denke es ist so gewollt da ansonsten direkt bei ausführen von ..include.. eine Verbindung zur Datenbank hergestellt wird... unnötigerweise eventuell.

              Was mir jedoch fehlt ist ein Fehlermanagement für diese Art Verbindungsaufbau. Ich habe hierzu am Ende noch eine if Schleife verwendet. Im Nachhinein beim nachschlagen der Verbindungsoptionen bin ich jedoch auf "
              PHP-Code:
              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
              gestoßen. Reicht das als Errorhandling und kann ich damit meine if else Lösung entfernen? Hier der neue (und funktionierende ) Code. Gibt es bis auf die Namensvergebung weitere Verbesserungsvorschläge?

              Desweiteren habe ich nicht verstanden was mit "Platzhaltern" gemeint ist.

              PHP-Code:
              <!-- Funktion der Seite: -->

              <!-- Changelog: -->

              <?php

              // vorbereitende Variablen für den Verbindungsaufbau
              include 'db_connect.php';

              // zusätzliche Optionen
              $aOptions = array(
              PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
              PDO::ATTR_EMULATE_PREPARES => false,
              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
              );

              #ID Übernehmen aus Link und gleichzeitig das Suchkriterium in der Datenbankabfrage
              $id $_GET["id"];

              // Verbindung mit dem Datenbank-Server aufnehmen
              $pdoObject = new PDO$sDsn$sUsername$sPassword$aOptions );

              // Prepared Statement instanziieren (SQL Abfrage)
              $pdo $pdoObject->prepare"SELECT clients_audit_time, clients_audit_id, A1 FROM a2 WHERE clients_audit_id=:id" );
              $pdo->bindParam':id'$idPDO::PARAM_STR );

              // SQL Abfrage ausführen und in Tabelle suchen
              $pdo->execute();
              if(
              $pdo->errorCode() == 0) {

              // Ausgabe meiner Tabellendaten
              while ( $dsRow $pdo->fetch() ) {
              echo 
              $dsRow->clients_audit_time '<br />';
              echo 
              $dsRow->clients_audit_id '<br />';
              echo 
              $dsRow->A1 '<br />';
              }
              } else {
              $errors $pdo->errorInfo();
              echo(
              $errors[2]);

              }

              ?>

              Kommentar


              • #8
                Aufgefallen ist mir, dass man die Instanzierung, also der der Befehl die Verbindung mit einem Datenbankserver aufnehmen, welche ja in der Regel immer gleich ist nicht in eine "db_connect" packen kann da sonst die Verbindungsoptionen fehlen. Die ich ja da auch nicht reinpacken kann da diese ja von Fall zu Fall unterschiedlich sind. Ich denke es ist so gewollt da ansonsten direkt bei ausführen von ..include.. eine Verbindung zur Datenbank hergestellt wird... unnötigerweise eventuell.
                Warum nicht?
                Die Startoptionen gehören ebenfalls in die "db_connect"... und wenn du nicht willst, das eine DB Verbindung aufgebaut wird, dann include "db_connect" halt nicht.

                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                Wenn du in den Exception mode schaltest, dann solltest du deinen Code auch mit try/catch umschliessen. Nur dann kannst du einen Fehler abfangen und behandeln.
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar

                Lädt...
                X