Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbank Abfrage funktioniert nur über Artikelnummer

Einklappen

Neue Werbung 2019

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

  • Datenbank Abfrage funktioniert nur über Artikelnummer

    Guten Abend,

    ich habe mir für den Informatikunterricht zwei Webseiten erstellt, die mit einer Datenbank (mySQL) verknüpft sind. Auf der ersten Website soll der User die Abfrage bestimmen, indem er auswählen kann aus welcher Tabelle und mit welcher Bedingung (Attribut, Attributwert) Datensätze ausgegeben werden sollen. Die zweite Seite führt dann die Abfrage durch. Bisher wird nur etwas ausgegeben, wenn der User als Attribut --> Artikelnummer ausgibt.
    Als Fehler wird angegeben, dass etwas in der Zeile mit foreach nicht stimmen soll. Doch ich weiß nicht was dort falsch gemacht wurde.

    Hier ist mein Quellcode:
    Erstes Dokument:

    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <
    html>
    <
    head>
    <
    title></title>
    <
    meta name="author" content="norma">
    <
    meta name="editor" content="html-editor phase 5">
    </
    head>
    <
    body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    Mit den folgenden Eingabeoptionen kannst du auf Datensaetze der Datenbank zugreifen.
    <
    p></p>
    Optionen:<p></p>
    TabelleArtikel oder Kunde<br />
    Attribut bei Tabelle ArtikelArtikelnummerArtikelnameArtikelbeschreibungPreisKonzernname<br />
    Attribut bei Tabelle KundeKundennummerVornameNachnameTarifname<p></p>


    <
    form action="lkdbwebAbfrage.php" method="POST">

             
    Tabelle
             
    <input type="text" name="tabelle" />
             <
    p></p>
             
    Attribut
             
    <input type="text" name="attribut" />
             <
    p></p>
             
    Attributwert
             
    <input type="text" name="attributwert" />
             <
    p></p>
             <
    input type="submit" value="Abfragen..." />

    </
    form>



    </
    body>
    </
    html
    Zweites Dokument:
    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title></title>
    <meta name="author" content="norma">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

    <?php
             $tabelle 
    $_POST['tabelle'];
             
    $attribut $_POST['attribut'];
             
    $attributwert $_POST['attributwert'];

             
    $pdo = new PDO('mysql:host=localhost;dbname=lkdb','root','');

             
    $sql "SELECT Artikelnummer, Artikelname, Artikelbeschreibung, Preis, Konzernname FROM artikel WHERE $attribut = $attributwert";
             foreach (
    $pdo->query($sql) as $row)
             {
              echo   
    "<b>Artikelnummer: ".$row['Artikelnummer'].
                     
    "<br />Artikelname: ".$row['Artikelname'].
                     
    "<br />Artikelbeschreibung: ".$row['Artikelbeschreibung'].
                     
    "<br />Preis: ".$row['Preis'].
                     
    "<br />Hersteller: ".$row['Konzernname'].
                     
    "<br />"."<br /></b>";


             }





    ?>
    </body>
    </html>



    Vielen Dank an die, die sich mit meinem Thema beschäftigen!

  • #2
    Anzumerken ist: ich weiß, dass es noch nicht mit Kunde funktioniert. Allerdings möchte es auch bei anderen Attributen der Relation Artikel keine Ausgabe tätigen.

    Kommentar


    • #3
      Den genauen Fehler magst du uns nicht verraten?

      Kommentar


      • #4
        Doch gerne

        Warning
        : Invalid argument supplied for foreach() in
        C:\xampp\htdocs\lkdbwebAbfrage.php
        on line
        18

        Kommentar


        • #5
          Deine Query schlägt fehl. Warum müsstest du herausfinden.

          Grundsätzlich:
          - Dein HTML-Gerüst ist hoffnungslos veraltet
          - Datenbankabfragen sollte man nie innerhalb der Ausgabe ausführen. Zuerst die Logik (Abfragen, etc.), anschliessend die Ausgabe.

          Kommentar


          • #6
            Okay, ich werde es versuchen! Danke, dass du dir Zeit genommen hast.

            Kommentar


            • #7
              Bzgl. des Markups (HTML) aus der Zeit der Christenverfolgung: Die aktuelle Version wäre HTML 5.

              Dein foreach erwartet ein Array, das die PDO Abfrage wohl nicht zurückliefert. Meistens liegt das daran, dass die zusammengebaute SQL-Abfrage 'ne Macke hat. Am besten mal mit

              PHP-Code:
              echo $sql
              schauen, wie Deine Abfrage aussieht und sie über PHP-MyAdmin mal testen.
              [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

              Kommentar


              • #8
                SQL-Injection ist auch noch ein Thema.

                Kommentar


                • #9
                  Gegen SQL-Injection, PDO-Prepared Statements nutzen: https://php-de.github.io/jumpto/pdo/ bzw. https://www.php-rocks.de/thema/49-ei...tatements.html

                  Und bitte E-V-A beachten: Eine DB Abfrage in mitten der HTML Ausgabe hat dort nichts verloren. https://php-de.github.io/jumpto/eva-prinzip/
                  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


                  • #10
                    html-editor phase 5

                    Damit fängt das Dilemma an, man nimmt ein Template daraus und dann ...
                    Gute Nacht.
                    Verwende mal einen zeitgemässen Editor. Im Forum hier werden auch oft welche empfohlen,

                    Kommentar

                    Lädt...
                    X