29725
Goto Top

Dropdown wird dynamisch mit Tables aus Datenbank gefüttert - Troubles bei Erzeugung von Submenü

Guten Tag,

Es existiert eine Datenbank (MariaDB / MySQL). Die Tabellen werden dynamisch in einem Dropdown-Menü erzeugt. Alles funktioniert soweit einwandfrei, lesen-schreiben-berechtigungen.

Mein Problem ist nun folgendes:
Bei der dynamischen Erzeugung des Dropdowns (Also alle vorhandenen Tabellen aus der Datenbank) soll ein zweites Dropdownmenü generiert werden - nämlich soll entsprechend der Auswahl aus dem ersten Dropdownmenü eine Unterkategorie auswählbar sein - und darauf auch noch ein drittes Dropdown mit einem weiteren Filter. Wie bereits erwähnt funktioniert die dynamische Erzeugung des ersten Dropdowns (mit den Namen der Tabellen aus der Datenbank) - Mit der Auswahl lässt sich aber nicht weiterarbeiten....

Meine Überlegung ist es entweder mit einer Javascript-"onchange=this.value" zu arbeiten da es sich ja auch um ein Clientseitiges Verfahren handelt. Oder die Anfrage über php mit einer einfachen if-else Abfrage über isset(). Ich komme allerdings nicht drauf wie ich den Dropdowninhalten eine Variable zuweisen kann. Welche Variante hältst Du denn für die Bessere ? Stecke seit etwa 1 Monat bei diesem Punkt fest und komme nicht vorwärts ... Hast du evtl. eine Lösung ? Ursprünglich war meine Überlegung dass sich "name='Auswahl_1'" in der if-Schleife als Variable ansteuern lässt, das liegt so nahe für mich, da eine direkte Eingabe im Code (wie hier zB in Auswahl_3 mit Mathematik und Grundrechnungsarten dargestellt) per POST bzw. GET korrekt von Ausgabe.php verarbeitet werden. Soll heißen die Auswahl aller 3 Dropdowns wird per Submit() korrekt an Ausgabe.php übergeben wenn ich die Vorauswahl im direkt im Code treffe. Vermutlich liegt hier auch mein entscheidender Logik-Fehler....

Danke schon mal im Voraus für Eure Hilfe! Falls mehr Informationen gebraucht werden, bitte bitte einfach bescheid sagen....

Beim Thema bin ich mir echt nicht sicher wo ich es hintun soll - Eigentlich gehört es ja in PHP/Javascript/MySQL/Webentwicklung aber entsprechend meinem derzeitigen Code stellt es sich wohl als Datenbank-Anfragen-Frage dar....


Hier ist mein derzeit vorhandener Code:
<body>
<?php
include_once('./connectToMYSQL.php');  

$SQLInsert = "SHOW TABLES FROM $MYSQLDB";  
$Temp = "";  

if ($Tables = mysqli_query($DB,$SQLInsert)) {

         echo"<form action='./Ausgabe.php' method='get'><label><select onchange='' name='Auswahl_1'>";  

         $i=0;
         while($daten = mysqli_fetch_row($Tables)){
                 echo "<option value='$daten'>{$daten}</option>\n<br>";  
                 $i++;
         }

         echo"</select><br>";  

                 $SQLQuery_Thema = "SELECT DISTINCT Thema FROM $Auswahl_1 ORDER BY Thema ASC";  
                 $Topic = mysqli_query($DB,$SQLQuery_Thema);
                 echo "<select name='Auswahl_2'>";  

                 while($entrys_Thema = mysqli_fetch_row($Topic)){
                         echo"<option value='$entrys_Thema'>{$entrys_Thema}</option>\n<br>";  
                 }

         echo"</select><br>";  

                 $SQLQuery_Filter = "SELECT DISTINCT Filter1 FROM Mathematik WHERE Thema='Grundrechnungsarten' ORDER BY Filter1 ASC";  
                 $Filter = mysqli_query($DB,$SQLQuery_Filter);
                 echo "<select name='Auswahl_3'>";  

                 while($entrys_Filter = mysqli_fetch_row($Filter)){
                         echo"<option value='$entrys_Filter'>{$entrys_Filter}</option>\n<br>";  
                 }

         echo"</select><input type='submit' value='Start'></label></form>";  



         $anzahl=mysqli_num_rows($Tables);
         printf("Es stehen %d Rubriken zur Auswahl.", $anzahl);  
         mysqli_free_result($Tables);
}
else { echo "Auflistung der Datenbank-Rubriken fehlgeschlagen!" . $DB->error;}  
mysqli_close($DB_DB);
?>
</body>


Meine derzeitige Ausgabe sieht so aus:

ausgabe

Content-Key: 339792

Url: https://administrator.de/contentid/339792

Printed on: April 24, 2024 at 00:04 o'clock

Mitglied: 133417
133417 Jun 04, 2017 updated at 15:59:57 (UTC)
Goto Top
Hi.

Würde ich mit Ajax machen.
  • Eine Backend.php schreiben an die man via Post den Namen der gewünschten Tabelle schickt und welche dann die DB Abfrage macht und dann die Daten als JSON zurückliefert.
  • Im Frontend dann beim onChange-Event der Combos den Namen der Tabelle via POST an die backend.php schicken und das JSON in ein Datenobjekt wandeln und mit for-Schleife ins Dropdown schreiben.

Ein extra neu Laden der Seite ist damit dann überflüssig und wäre ja sowieso auch nicht mehr "State of the Art".

Schau hier mal im Forum, da gibt es einige Beispiele zu Ajax/jQuery &Co.

Gruß

Stecke seit etwa 1 Monat bei diesem Punkt fest
Wow, das muss man auch erst mal schaffen face-wink
Mitglied: 29725
29725 Jun 06, 2017 at 08:24:09 (UTC)
Goto Top
Problem gelöst!

Habe Temporäre Variablen kreiert die mir die Dropdown-Auswahl per submit(this.value) übernehmen. Zusätzlich habe ich eine if-else Abfrage in der while-Schleife für die dynamische <option>.....</option> Erzeugung implementiert in der die Value von submit(this.value) mit dem Attribut selected abgeglichen wird. Dadurch wird sichergestellt dass die getroffene Auswahl beim Neuladen der Seite gespeichert bleibt. Am Ende wurde noch ein Link erzeugt der mir die Variablen für das ausführende Script erzeugt. Der Button "Auswählen" ist notwendig um Datensätze aus dem Dropdown zu bestätigen falls lediglich eine Option vorhanden ist - da submit(this.value) erst ab zwei Einträgen funktioniert. Die Variable $dslimit ist für die MYSQL Anweisung LIMIT $dslimit,1 um immer nur einen Datensatz anzuzeigen....

Liebe Grüße und danke für´s lesen.


...
$Temp_1 = htmlspecialchars($_GET['Auswahl_Rubrik']);  
$Temp_2 = htmlspecialchars($_GET['Auswahl_Thema']);  
$Temp_3 = htmlspecialchars($_GET['Auswahl_Filter']);  
...

...
         $i=0;
         while($daten = mysqli_fetch_row($Tables)){
                 if ($Temp_1 == $daten) {
                         echo "<option selected value='$daten'>{$daten}</option>\n<br>";  
                 }
                 else {
                         echo "<option value='$daten'>{$daten}</option>\n<br>";  
                 }
         $i++;
         }
...

...
echo"<a href='./Ausgabe.php?Auswahl_Rubrik=$Temp_1&Auswahl_Thema=$Temp_2&Auswahl_Filter=$Temp_3&dslimit=-1'>Starte Quiz</a>";  
...