Ankündigung

Einklappen
Keine Ankündigung bisher.

Drop Down Feld mit Daten aus MySQL Datenbank

Einklappen

Neue Werbung 2019

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

  • Drop Down Feld mit Daten aus MySQL Datenbank

    Hallo Zusammen,
    ich zermatere mir seit zwei Abenden (und Nächten) den Kopf, wie ich das folgende Problem gelöst bekomme (ich habe bereits zwei PHP-Bücher und ein MySQL-Buch zu Rate gezogen, sowie diverse Foren). Leider finde ich keine Lösungen, weil ich die Codebeispiele die ich gefunden habe nicht umsetzen kann.

    Nun zu meinem Thema:
    Ich habe eine Datenbank, in der ich eine Tabelle habe (Pflegestufe).
    Nun möchte ich ein Formular ausfüllen, und dabei die Einträge aus der Tabelle pflegestufe in einer Drop Down Box zur Verfügung stellen.
    Die Tabelle enthält 2 Felder: IdPflegestufe und Pflegestufe
    Die IdPflegestufe wird per AUTO_INCREMENT gesetzt und ist der Primärschlüssel, Pflegestufe ist Text, den ich selber eintrage.

    Ich habe hier mal ein Listing angehangen, dass ich geschrieben habe, aber nicht funktioniert .

    Ich gehe tagsüber zur Schule, weshalb meine Antworten eventuell etwas später kommen.

    Datenbankname: pflege
    Tabellenname: pflegestufe
    Felder: IdPflegestufe, Pflegestufe

    Listing:

    PHP-Code:
    <html>
            <head>
                    <title>
                            Dropdown
                    </title>
            </head>
            <body>
                    <form action="<?= $PHP_SELF ?>" method="post">
                            Pflegestufe:
                            <select name = "Pflegestufe">
                                    <?php
                                            
    // Datenbankverbindung herstellen
                                            
    $pdo = new PDO('mysql:host=localhost;dbname=pflege''benutzer''passwort');

                                            
    // Einfache Abfrage der Pflegestufen
                                            
    $sql "SELECT * FROM pflegestufe";
                                            
    $result $pdo->query($sql);
                                            while (
    $row mysql_fetch_array($result)) {
                                                    echo 
    "<option>"$row['Pflegestufe']"</option>";
                                            }
                                    
    ?>
                            </select>
                    </form>
            </body>
    </html>

  • #2
    PHP-Code:
    // Falsche Syntax
    echo "<option>"$row['Pflegestufe']"</option>";

    // Verkettungen erfolgen mit einem . (Punkt)
    echo "<option>".$row['Pflegestufe']."</option>"
    und bevor du dir weiteren Ärger einfängst beim SELECt nie mit * arbeiten, sondern explizit die Felder angeben die du haben möchtest. Auch dann wenn du alle Felder haben möchtest.

    Kommentar


    • #3
      Danke für Deine Hilfe.
      Ich habe Deine Tips berücksichtigt.

      Einen Teilerfolg hatte ich bereits: Es wird mir ein Drop Down angezeigt.
      Allerdings ohne Inhalt (die MySQL-Tabelle enthält fünf Datensätze).

      Hat noch jemand eine Idee?

      Kommentar


      • #4
        Ja frag die Datensätze auch ab. Du mischt PDO und mysql Funktionen. Das kann nicht funktionieren.

        PHP-Code:
        $result $pdo->query($sql);
        while (
        $row $result->fetch(PDO::FETCH_ASSOC);) 

        Kommentar


        • #5
          SELECT * ist pfui. Zähle immer alle Felder auf, die du dann im Ergebnis auch tatsächlich haben willst. https://php-de.github.io/jumpto/code-smells/#select-all
          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
            Lehrbeipiel
            PHP-Code:
            // Datenbankverbindung herstellen
            $mysqli = new mysqli("localhost", "user", "password", "pflege");

            // Verbindung prüfen und Zeichensatz einstellen
            if ($mysqli->connect_errno) {
                printf("Datenbankverbindung fehlgeschlagen: %s\n", $mysqli->connect_error);
                exit();
            else{
                $mysqli->set_charset("utf8");
            }

            // Einfache Abfrage der Pflegestufen
            $sql = "SELECT 'id', 'bezeichnung' FROM 'pflegestufe'";
            $result = $mysqli->query($sql);

            // Optionsliste zusammenbauen
            $options = '';
            while($row = $result->fetch_array(MYSQLI_ASSOC))
            {
                $options .= "<option value=" . "$row['id'] . ">" . $row['Pflegestufe'] . "</option>\n";
            }

            // Ausgabe an HTML
            ?>

            <!DOCTYPE HTML>
            <html lang="de">
            <head>
                <meta charset="UTF-8">
                <title>Dropdown</title>
            </head>
            <body>
                <form method="post">
                    <label>Pflegestufe:</label>
                    <select name = "Pflegestufe">
                        <?=$options?>        
                    </select>
                </form>
            </body>
            </html>
            Lernbezug
            PHP:

            EVA-Prinzip einhalten
            mysqli-Datenbankabfrage
            Stringverkettung oder concanation
            UTF8 Einstellung
            SQL select Abfrage
            Warum PHP_SELF gefährlich ist

            HTML
            Doctype HTML5
            meta charset
            select-Element

            bitte schaue dir diese Themen noch einmal an, da du dort anscheinend Wissenslücken hast.
            Nutze dazu die Wissenssammlung, oben verlinkt, oder eine Suchmaschine im Netz

            Kommentar


            • #7
              Hallo Zusammen, danke erst mal für die Antworten. Ich komme gerade aus der Schule und habe mich direkt an den PC gesetzt.

              Leider bekomme ich die beiden Vorschläge nicht ans Laufen .
              PDO ist mir noch neu und ich musste mich zwangsläufig damit beschäftigen, weil ein Buch nur PDO-Beispiele beinhaltet. Das andere Buch ist so alt, dass es noch den abgekündigten MySQL-Konnektor beinhaltet.

              Ich habe versucht, beide Vorschläge umzusetzen.
              Leider klappt keines der beiden Listings.
              Ich bekomme (egal welcher Browser und welcher PC) immer eine leere Seite angezeigt (die Individuellen Einträge wie Benutzer, Passwort und Felder habe ich natürlich angepasst, sowie im letzten Listing ein <?php ergänzt und in der Zeile $options .= einmal die zuviel gesetzten Anführungszeichen entfernt).

              Aber irgendwie klappt es nicht .

              Was mich aber nervt: Ich habe gefühlte dreimillionen Quellen durchforstet, mindestens 100.000 Varianten kennengelernt, aber es läuft immer noch nicht.

              Kommentar


              • #8
                "Klappt nicht", "funktioniert nicht" sind keine gültigen Fehlerbeschreibungen.

                Debugge und finde heraus warum: https://php-de.github.io/jumpto/faq/#debugging

                Und zu PDO hier noch etwas leichtes für den Einstieg zur Augabe der Daten: https://php-de.github.io/jumpto/pdo/

                Im Grunde musst du ja nur die Ausgabe der DB in HTML verpacken, das der Browser dann sauber darstellen kann. Beachte dazu auch das EVA-Prinzip ( https://php-de.github.io/jumpto/eva-prinzip/ ) gleich von Anfang an sauber. Ein DB Connect innerhalb der HTML Ausgabe hat da nichts verloren.
                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


                • #9
                  Hast du Error-Reporting eingeschaltet wie im Link von hausl beschrieben? Zeige mal deinen Code den du bis jetzt umgesetzt hast.

                  Kommentar


                  • #10
                    Hallo, leider hat die Antwort etwas länger auf sich warten lassen, aber ich arbeite nebenbei in der Pflege und dann dauert es schonmal :-/ .
                    Ich habe das Errorreporting nach der Anleitung eingeschaltet, erhalte aber leider immer noch eine komplett weiße Seite, wenn ich das Programm ausführe .
                    Ich habe jetzt zwei Varianten erstellt, aber keine funktioniert:

                    Variante 1:
                    PHP-Code:
                    <html>
                            <head>
                                    <title>
                                            Dropdown
                                    </title>
                            </head>
                            <body>
                                    <form action="<?= $_SERVER['PHP_SELF'?>" method="post">
                                            Pflegestufe:
                                            <select name = "Pflegestufe">
                                                    <?php
                                                            error_reporting
                    (-1);
                                                            
                    ini_set('display_errors'true);
                                                            
                    // Datenbankverbindung herstellen
                                                            
                    $pdo = new PDO('mysql:host=localhost;dbname=pflege''benutzer''passwort');

                                                            
                    // Einfache Abfrage der Pflegestufen
                                                            
                    $sql "SELECT IdPflegestufe, Pflegestufe FROM pflegestufe";
                                                            
                    $result $pdo->query($sql);
                                                            while (
                    $row $result->fetch(PDO::FETCH_ASSOC);) {
                                                            
                    //while ($row = mysql_fetch_array($result)) {
                                                                    
                    echo "<option value =".$row['IdPflegestufe']. ">".$row['Pflegestufe']."</option>";
                                                            }
                                                    
                    ?>
                                            </select>
                                    </form>
                            </body>
                    </html>
                    Variante 2:
                    PHP-Code:
                    <?php
                    error_reporting
                    (-1);
                    ini_set('display_errors'true);
                    // Datenbankverbindung herstellen
                    $mysqli = new mysqli("localhost""benutzer""passwort""pflege");

                    // Verbindung prüfen und Zeichensatz einstellen
                    if ($mysqli->connect_errno) {
                        
                    printf("Datenbankverbindung fehlgeschlagen: %s\n"$mysqli->connect_error);
                        exit();
                    else{
                        
                    $mysqli->set_charset("utf8");
                    }

                    // Einfache Abfrage der Pflegestufen
                    $sql "SELECT 'IdPflegestufe', 'Pflegestufe' FROM 'pflegestufe'";
                    $result $mysqli->query($sql);

                    // Optionsliste zusammenbauen
                    $options '';
                    while(
                    $row $result->fetch_array(MYSQLI_ASSOC))
                    {
                        
                    $options .= "<option value=" $row['IdPflegestufe'] . ">" $row['Pflegestufe'] . "</option>\n";
                    }

                    // Ausgabe an HTML
                    ?>

                    <!DOCTYPE HTML>
                    <html lang="de">
                    <head>
                        <meta charset="UTF-8">
                        <title>Dropdown</title>
                    </head>
                    <body>
                        <form method="post">
                            <label>Pflegestufe:</label>
                            <select name = "Pflegestufe">
                                <?=$options?>
                            </select>
                        </form>
                    </body>
                    </html>
                    Mir geht es erst einmal darum zu verstehen, wie ich Informationen aus einer MySQL-Datenbank in einem Dropdown Feld darstellen kann. Das wird auch nicht die endgültige Datei, sondern ist sozusagen ersteinmal die Vorstufe, um überhaupt Daten zu erhalten. Ich suche eine allgemeingültige Syntax nach dem Motto: Daten aus MySQL-Tabelle in Dropdownfeld. Ich dachte immer, dass dies mit einem einfachen "Zweizeiler" abgehandelt wäre, aber dem scheint wohl nicht so

                    Kommentar


                    • #11
                      Du musst MySQL auch fragen, ob es ein Problem gibt. Mach mal aus
                      PHP-Code:
                      $result $mysqli->query($sql); 
                      das hier:
                      PHP-Code:
                      $result $mysqli->query($sql)
                          or die (
                      "MySQL-Error: " $mysqli->error); 
                      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                      Kommentar


                      • #12
                        So, ich habe nochmal von vorne angefangen und eine Lösung gefunden .
                        Für alle, denen ich ggf. damit helfen kann, hier das Listing:

                        PHP-Code:
                        <?php
                        // Datenbankverbindung herstellen
                        $pdo = new PDO('mysql:host=localhost;dbname=pflege''benutzer''passwort');

                        // Daten abfragen
                        $sql "SELECT IdPflegestufe, Pflegestufe FROM pflegestufe";

                        // Daten an Formular übergeben (in diesem Fall: die selbe Datei)
                        echo "<form method="POST" action="".$PHP_SELF."">";

                        // Dropdown-Box erstellen und mit Werten füllen
                        echo "<p>Pflegestufe: <select name = "pflegestufe">";
                        foreach (
                        $pdo->query($sql) as $row) {
                                
                        // echo $row['IdPflegestufe']." ".$row['Pflegestufe']."<br />";
                                
                        echo "<option value =".$row['IdPflegestufe']. ">".$row['Pflegestufe']."</option>";
                        }
                        echo 
                        "</select></p>";

                        // Auswahl übermitteln
                        echo "<input type="submit"/><br />";

                        // Ausgabe der Auswahl
                        echo "Auswahl: ".$_POST["pflegestufe"];
                        ?>
                        Wie gesagt, es ist nur ein Zwischenziel (Daten aus MySQL-Datenbank sollen in Dropdown-Box dargestellt werden, Auswahl soll ausgegeben werden).
                        Jetzt werde ich als nächstes diese gewonnen Erkenntnisse in das Hauptprogramm einpflegen .

                        Kommentar


                        • #13
                          Du missachtest halt EVA völlig.
                          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


                          • #14
                            Zum letzten Post:
                            Das mag sein!

                            Ich habe alle mir zur Verfügung stehenden Bücher gewälzt, die mir angebotenen Links in diesen Posts genutzt und auch versucht die Beispiele umzusetzen.
                            Leider waren mir diese Informationen zu abstrakt.

                            Vielleicht wäre ein Beispiellisting (wie das von protestix oder die Vorschläge von TessaKavanagh) etwas hilfreicher gewesen.
                            Ich habe nun ein Listing gepostet, das funktioniert (wenn es auch nicht den allgemeingültigen Regeln entspricht).
                            Gerne kann man dieses Listing modifiziert oder korrigiert weiterhin hier posten.

                            Soweit ich weiß, ist dieser Bereich des Forums für Einsteiger gedacht.

                            So einer bin ich!

                            Dass ich die unterbreiteten Vorschläge berücksichtigt habe, ist (glaube ich) nicht zu übersehen. Leider hat die Umsetzung aber nicht funktioniert (weil mir an dieser Stelle eventuell das Wissen fehlt oder ich auch Sachen vermische). Als Anfänger kann das passieren.

                            Allerdings sind verweise auf Prinzipien und Vorgehensweisen nicht immer zielführend, vor allen Dingen, wenn man nicht weiß, welches Wissen das Gegenüber hat oder auch nicht hat.

                            Ich persönlich hätte mir gewünscht, dass ein Beispiellisting erstellt worden wäre (oder mein Listing editiert worden wäre) und anhand des Listings erklärt worden wäre, wofür genau dieser Schritt ist (in ungefähr so, wie ich es jetzt mit meinem Listing gemacht habe).

                            Aber eine Aussage wie "Du missachtest EVA völlig!" ist weder zielführend noch gut gemeint!
                            Da kann ich mit einer Unterstützung durch z.B. protestix wesentlich mehr anfangen, weil sie in meinen Augen wesentlich konstruktiver ist (an dieser Stelle danke dafür).

                            Wenn Hilfeersuchen so beantwortet werden, finde ich das mehr als traurig!

                            Kommentar


                            • #15
                              Zitat von Caraboules Beitrag anzeigen
                              Aber eine Aussage wie "Du missachtest EVA völlig!" ist weder zielführend noch gut gemeint!
                              Wenn man denn mal Tante google fragen würde, könnte man sogar Informationen finden: https://de.wikipedia.org/wiki/EVA-Prinzip

                              Eine gewisse Selbstständigkeit ist beim Programmieren unabdingbar und wird hier auch vorrausgesetzt.

                              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                              Kommentar

                              Lädt...
                              X