Ankündigung

Einklappen
Keine Ankündigung bisher.

Datensätze aus bestimmter Kategorie auslesen

Einklappen

Neue Werbung 2019

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

  • Datensätze aus bestimmter Kategorie auslesen

    Hallo, als Neuling in der php Welt habe ich eine Frage....

    als kleines Projekt habe ich mich an einem Webshop versucht (ist irrelevant) jedenfalls ergab sich folgendes Problem:

    Ich versuche die einzelnen Artikel mittels Datenbank und einer Schleife "automatisch" generieren zu lassen für alle Artikel sieht das dann so aus:

    PHP-Code:
                Session_start();


                //Verbindung zur Datenbank

            $db = new mysqli("localhost","article, "", "artikel"); //verbindung

            if ($db->connect_errno) { //wenn fehlermeldung dann...
            die("Verbindung fehlgeschlagen: " . $db->connect_error);
            }
            else
             {


                for($i = 1; $i <= 6; $i++)
                {
                      $abfrage = "SELECT * FROM article WHERE Artikelnummer LIKE '$i'"; //pfad
                    $ergebnis = mysqli_query($db, $abfrage);            //(connection,query, resultmode)
                    while($row = mysqli_fetch_object($ergebnis))

    //solange ein Eintrag aus der Variable Ergebnis als Arrayinhalt in die Variable row geschrieben wird führe die Schleife aus

    {
                    $Artikelnr = $row->Artikelnummer;
                    $Artikelname = $row->Artikelname;
                    $Bild = $row->Bild;
                    $URL = $row->URL;
                    $Kategorie = $row->Kategorie;
                    $Preis = $row->Preis;
                    $Geschlecht = $row->Geschlecht;
                    }
                    ?>

                        <li>
                        <img src="bilder/<?php echo $Bild?>" alt="Vorschau" />
                        <p><a href="<?php echo $URL?>"><?php echo $Artikelname?> </a></p>
                        <p><?php echo $Preis?></P>
                        <p><?php echo $Kategorie?> </p>
                        </li>

                <?php
                 
    }
                
    mysqli_close($db);
             }
    Soweit funktioniert das auch (ich habe nur noch nicht herausgefunden wie ich die Artikelmenge abrufen kann, ist aber ein anderes Problem).

    In der Datenbank ist jedem Artikel noch eine Kategorie beigefügt und da kommt mein Problem, will ich nun nur diese Kategorie darstellen so versuchte ich das so:

    PHP-Code:
                Session_start();


                //Verbindung zur Datenbank

            $db = new mysqli("127.9.9.1","article", "", "artikel"); //verbindung

            if ($db->connect_errno) { //wenn fehlermeldung dann...
            die("Verbindung fehlgeschlagen: " . $db->connect_error);
            }
            else
             {

                      $abfrage = "SELECT * FROM article WHERE Geschlecht = 'Männer' "; //pfad
                    $ergebnis = mysqli_query($db, $abfrage);            //(connection,query, resultmode)
                    while($row = mysqli_fetch_array($ergebnis)) //solange ein Eintrag aus der Variable Ergebnis als Arrayinhalt in die Variable row geschrieben wird führe die Schleife aus
                    {
                    $Artikelnr = $row->Artikelnummer;
                    $Artikelname = $row->Artikelname;
                    $Bild = $row->Bild;
                    $URL = $row->URL;
                    $Kategorie = $row->Kategorie;
                    $Preis = $row->Preis;
                    $Geschlecht = $row->Geschlecht;    
                    }

                        <li>
                        <img src="bilder/<?php echo $Bild?>" alt="Vorschau" />
                        <p><a href="<?php echo $URL?>"><?php echo $Artikelname?> </a></p>
                        <p><?php echo $Preis?></P>
                        <p><?php echo $Kategorie?> </p>
                        </li>    
                mysqli_close($db);
             }
    Und das Funktioniert so natürlich nicht, da es mehrere Datensätze für "Männer" gibt und somit die Variablen keinen eindeutigen Wert haben ich habe es mit "foreach" versucht allerdings komme ich nicht weiter.

    LG


  • #2
    Datenbankabfragen haben inmitten der HTML-Ausgabe sowieso nichts verloren. Beachte das EVA-Prinzip.

    Außerdem sollte man niemals SELECT * verwenden, sondern im SELECT immer die Spalten angeben, die man im Ergebnis erwartet.

    Kommentar


    • #3
      PHP-Code:
                      $abfrage = "SELECT * FROM article WHERE Geschlecht = 'Männer' "; //pfad
                      $ergebnis = mysqli_query($db, $abfrage);            //(connection,query, resultmode)
                      while($row = mysqli_fetch_array($ergebnis)) //solange ein Eintrag aus der Variable Ergebnis als Arrayinhalt in die Variable row geschrieben wird führe die Schleife aus
                      {
                      $Artikelnr = $row->Artikelnummer;
                      $Artikelname = $row->Artikelname;
                      $Bild = $row->Bild;
                      $URL = $row->URL;
                      $Kategorie = $row->Kategorie;
                      $Preis = $row->Preis;
                      $Geschlecht = $row->Geschlecht;    
                      }

                          <li>
                          <img src="bilder/<?php echo $Bild?>" alt="Vorschau" />
                          <p><a href="<?php echo $URL?>"><?php echo $Artikelname?> </a></p>
                          <p><?php echo $Preis?></P>
                          <p><?php echo $Kategorie?> </p>
                          </li>    
                  mysqli_close($db);
      Die Ausgabe gehört auch in die Schleife.. du überschreibst dir oben die Variablen und gibst nur einmal die letzten aus. Warum machst du das mit den Variablen überhaupt so komisch doppelt? greif doch direkt auf die Werte aus der fetch-Schlefe zu.

      Generell noch.. der Code ist nicht sehr sauber.. EVA Prinzip beachten.. Siehe Link Wissenssammlung und du solltest die Ausgabe zu HTML auch escapen .. dh htmlspecialchars() nutzen. Das ist sonst eine potenzielle Fehlerquelle und XSS Lücke.
      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


      • #4
        PHP-Code:
        if ($db->connect_errno) { //wenn fehlermeldung dann...
                
        die("Verbindung fehlgeschlagen: " $db->connect_error); 
        Willst du das wirklich so deinen Anwender,. der vielleicht kein englisch kann vorsetzen. Ich denke kaum das damit jemand etwas anfangen kann, ausser Hacker vielleicht. Die Fehlerrmeldungen sind für den Programmierer gedacht nicht für den Benutzer deiner Anwendung, auch wenn man das immer wieder sieht.

        Kommentar


        • #5
          Zitat von protestix Beitrag anzeigen
          PHP-Code:
          if ($db->connect_errno) { //wenn fehlermeldung dann...
          die("Verbindung fehlgeschlagen: " $db->connect_error); 
          Willst du das wirklich so deinen Anwender,. der vielleicht kein englisch kann vorsetzen. Ich denke kaum das damit jemand etwas anfangen kann, ausser Hacker vielleicht. Die Fehlerrmeldungen sind für den Programmierer gedacht nicht für den Benutzer deiner Anwendung, auch wenn man das immer wieder sieht.
          Es soll ja nicht online gehen, ich habe mich einfach mal an sowas probiert ^^

          Kommentar


          • #6
            Zitat von hausl Beitrag anzeigen

            Die Ausgabe gehört auch in die Schleife.. du überschreibst dir oben die Variablen und gibst nur einmal die letzten aus. Warum machst du das mit den Variablen überhaupt so komisch doppelt? greif doch direkt auf die Werte aus der fetch-Schlefe zu.

            Generell noch.. der Code ist nicht sehr sauber.. EVA Prinzip beachten.. Siehe Link Wissenssammlung und du solltest die Ausgabe zu HTML auch escapen .. dh htmlspecialchars() nutzen. Das ist sonst eine potenzielle Fehlerquelle und XSS Lücke.
            Danke, es war wirklich nur die eine Klammer die anders gesetzt werden musste.

            An alle die blutige Augen bei dem Anblick vom Code bekommen, tut mir leid ich bin noch Anfänger. Ich nehme mir eure Ratschläge zu herzen und werde mir das EVA Prinzip anschauen und den Code überarbeiten. Nur habe ich nicht verstanden was falsch am php-Code im Html-Ausgang ist...

            Kommentar


            • #7
              Nicht am PHP Code sondern die DB Abfrage hat nichts im HTML verloren. HTML ist Ausgabe, der letzte Schritt von EVA

              https://php-de.github.io/jumpto/eva-prinzip/

              Als Erkenntnis ergibt sich, dass PHP die „umschließende“ Sprache ist, nicht HTML.
              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

              Lädt...
              X