Pulldowns in HTML-Tabelle mit Werten aus Datenbank füllen (Werte abhängig von Datensatz_IDs anzeigen)


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
#1
Hallo,

ich habe ein neues Problem aufgetan, und finde keine Lösung dazu.
Ich hoffe, es möglichst verständlich zu beschreiben.

Ich habe eine normalisierte Datenbank, worin ich eine Tabelle mit vielen Schlüsseln habe, und dazu die Detailtabellen mit den Werten dazu.

Ein leichtes Beispiel dazu:
Adresstabelle:
Adressen_ID (=PK)
Name
Strassen_ID (=FK)
PLZ_ID (=FK)

Strassentabelle
Strassen_ID (=PK)
Strassenname

PLZtabelle
PLZ_ID (=PK)
Ort

Nun möchte ich alle Datensätze Tabellarisch in meiner Webseite zum editieren zeigen.
Dabei soll die Strasse und der Ort durch ein Pulldown auswählbar sein.

Was ich kann:
Tabellendaten aus MySQL auslesen und Tabellarisch anzeigen.
Pulldowns einzeln mit den Werten aus Strassentabelle und PLZtabelle befüllen.

Wo ist nun mein Problem?
Ich möchte, das im Pulldown der Wert(value) aus der Detailtabelle (Strasse oder PLZ) mit dem Wert der Adresstabelle vorbelegt ist, und angezeigt wird (name).
Daran scheitere ich gerade. Verständlich, was ich meine?

Ich kriege es nicht zusammen, das ich dem Pulldown sage, Datensatz 1 aus der Adresstabelle hat als Strassen_ID = 5, also zeige die "Hauptstrasse" an. Datensatz 2 aus der Adresstabelle hat als Strassen_ID = 10, also zeige die "Bahnhofstrasse" an. Sowie das diese Werte dann auch wieder zurück in die DB geschrieben werden. (Grundsätzlich kann ich ein Pulldown bzw. dessen gewählten Wert auslesen und in die DB schreiben. Nur das Zusammenspiel hier mit den bereits vorhandenen Daten der adresstabelle macht es mir gerade schwierig...)

Für eure Hilfe wäre ich sehr sehr dankbar !!!!!

Schöne Grüße
Oliver
 

Sempervivum

Erfahrenes Mitglied
#2
Dazu brauchst Du nur bei der richtigen Option das Attribut "selected" zu setzen. Weil ich keine passende Datenbank zur Hand hatte, habe ich ein Demo mit Arrays gemacht:
PHP:
        $adressen = [
            ["name" => "meier", "strassen-id" => 1],
            ["name" => "mueller", "strassen-id" => 2],
            ["name" => "schulze", "strassen-id" => 3]
        ];
        $strassen = [
            1 => "Hamburger Str.",
            2 => "Gifhorner Str.",
            3 => "Leipziger Str."
        ];
        echo '<table>';
        foreach($adressen as $dieadresse) {
            echo '<tr><td>' . $dieadresse['name'] . '</td><td><select>';
            $strassenid = $dieadresse['strassen-id'];
            foreach ($strassen as $key=>$diestrasse) {
                // das folgende ist der Kern der Sache: Stimmt die ID in der Tabelle strassen
                // mit dem in der aktuellen Adresszeile ueberein, setzen wir das Attribut "selected"
                if ($key == $strassenid) $selected = ' selected';
                else $selected = '';
                echo '<option' . $selected . '>' . $diestrasse . '</option>';
            }
            echo '</td></tr>';
        }
        echo '</table>';
Sollte sich problemlos auf eine Version mit Datenbank übertragen lassen.
 
Zuletzt bearbeitet:
#3
Hi, vielen Dank für dein Beispiel, das hat mir schon sehr viel Weitergeholfen !!!

Aber (ohne Aber geht es nicht ;-) ), ich komme an einer Stelle nicht weiter, das auf meine Bedürfnisse anzupassen (bzw. bin an der gleichen Stelle des "nicht-verstehens" wie vorher):

Wenn ich dein Beispiel an meine Bedürfnisse anpasse, muss ich das Array "$strassen" um folgendes erweitern:

Code:
        $strassen = [
            ["strassen_id" => 3, "Strassenname" => "Leipziger Str."],
            ["strassen_id" => 2, "Strassenname" => "Gifhorner Str."],
            ["strassen_id" => 1, "Strassenname" => "Hamburger Str."]
        ];
(reihenfolgenänderung war ein kleiner Test, hier nicht relevant).

Und da fängt es für mich an, kniffelig zu werden.

In deinem Beispiel nimmst du das array $strassen und weist es der Variablen $key zu, wobei du dann ja (wenn ich es richtig verstehe) das Element des $key mit dem $diestrasse['strassen-id'] vergleichst. (if ($key == $strassenid)

wenn ich versuche, das mit dem neuen Array $strassen nachzubauen, schlägt es bei mir fehl:

Code:
                if ($key[0] == $strassenid)
So wird mir im Pulldown nur dreimal "Array" in jedem Pulldown angezeigt ... :-/

Hättest du noch einen entscheidenden Hint für mich?

Vielen Dank,

Oliver
 
#4
So bekomme ich nur Leere Pulldowns, jedoch mit drei leeren Zeilen:

Code:
       $adressen = [
            ["name" => "meier", "strassen-id" => 1],
            ["name" => "mueller", "strassen-id" => 2],
            ["name" => "schulze", "strassen-id" => 3]
        ];
        $strassen = [
            ["strassen_id" => 3, "Strassenname" => "Leipziger Str."],
            ["strassen_id" => 2, "Strassenname" => "Gifhorner Str."],
            ["strassen_id" => 1, "Strassenname" => "Hamburger Str."]
        ];
        echo '<table>';
        foreach($adressen as $dieadresse) {
            echo '<tr><td>' . $dieadresse['name'] . '</td><td><select>';
            $strassenid = $dieadresse['strassen-id'];
//            foreach ($strassen as $key=>$diestrasse) {
            foreach ($strassen as $key) {
                // das folgende ist der Kern der Sache: Stimmt die ID in der Tabelle strassen
                // mit dem in der aktuellen Adresszeile ueberein, setzen wir das Attribut "selected"
                if ($key->strassen_id == $strassenid) $selected = ' selected';
                else $selected = '';
                echo '<option' . $selected . '>' . $diestrasse . '</option>';
            }
            echo '</td></tr>';
        }
        echo '</table>';
Hm, irgendwie fehlt mir noch ein puzzleteil, damit es klappt ...
 

Sempervivum

Erfahrenes Mitglied
#5
Ich hoffe schon, da war mir wohl die Struktur der Datenbank nicht so richtig klar. So funktioniert es bei mir:
PHP:
        echo '<table>';
        foreach($adressen as $dieadresse) {
            echo '<tr><td>' . $dieadresse['name'] . '</td><td><select>';
            $strassenid = $dieadresse['strassen-id'];
            foreach ($strassen as $diestrasse) {
                if ($diestrasse['strassen_id'] == $strassenid) $selected = ' selected';
                else $selected = '';
                echo '<option' . $selected . '>' . $diestrasse['Strassenname'] . '</option>';
            }
            echo '</td></tr>';
        }
        echo '</table>';
Mit deinem letzten Code warst Du schon sehr nahe dran, nur diese Syntax: $key->strassen_id bezieht sich auf ein Objekt und nicht auf ein ass. Array. Sonst habe ich nur $key in $diestrasse geändert weil es mir semantisch passender erschien, denn diese Variable ist ja der ganze Datensatz und nicht mehr der Schlüssel.
 
#6
Hourray, das wars. Ich hatte dieses Konstrukt mit dem $key in bezug auf das ass.Array auch nicht nachvollziehen können, hatte aber immer (fälschlicherweise) das als Objekt gedacht statt Array.

super, vielen Dank für die Hilfen, das hat mich ein großes Stück weitergebracht !!!! :) :)

Merci,
Oliver
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge