Voneinander abhängige Dropdowns
peacock
- php
0 EKKi0 peacock
0 luti- javascript
Hallo.
Bin relativ neu, was php Programmierung angeht und habe schon ein Problem. Hab auch überall nach gesucht, jedoch keine Antwort gefunden.
Folgendes Problem: Ich habe ein Dropdown Menü, welches durch Daten aus einer SQLDatenbank gefüttert wird.
Wenn ich hier jetzt eins auswähle, öffnet sich ein neues Dropdown. Bsp: 1.Dropdown Bundesliga/Premier League etc. 2.Dropdown Bayern Bremen etc bei Auswahl Bundesliga.
Das hab ich auch hinbekommen, jedoch mit einer if- Abfrage für das 2. Dropdown. Das muss doch auch iwie einfacher und übersichtlicher gehen oder? Danke für eure Hilfe.
Mahlzeit peacock,
Wenn ich hier jetzt eins auswähle, öffnet sich ein neues Dropdown.
Was bedeutet "öffnet sich ein neues Dropdown"? Da Du im Bereich PHP postest, gehe ich davon aus, dass Du aus einer Auswahlliste eine Möglichkeit auswählst und anschließend das Formular, in dem sich die Auswahlliste befindet, abschickst. Das PHP-Skript, dass dieses Formular verarbeitet, soll jetzt anhand der gewählten Option ein (neues) Formular generieren, das eine andere/weitere Auswahlliste enthält. Bis hierhin richtig geraten?
Das hab ich auch hinbekommen, jedoch mit einer if- Abfrage für das 2. Dropdown.
"Für das 2. Dropdown"? Du meinst, dass Du den Wert der ersten Auswahlliste anhand einer/mehrerer if-Abfragen auswertest und je nach Wert eine entsprechende 2. Auswahlliste generierst?
Das muss doch auch iwie einfacher und übersichtlicher gehen oder?
Jein. Je nachdem, wieviele Einträge sich in der ersten Auswahlliste befinden, könntest Du es z.B. auch mit switch versuchen.
Danke für eure Hilfe.
Es wäre einfacher zu helfen, wenn Du Dein Anliegen klarer, deutlicher, eindeutiger und unmissverständlicher beschreiben würdest, damit Deine Leser nicht raten müssen, was Du meinst.
MfG,
EKKi
Hallo.
Entschuldigt bitte für meine undeutliche Problemerklärung.
Bis hierhin richtig geraten?
Jop. Richtig geraten.
"Für das 2. Dropdown"? Du meinst, dass Du den Wert der ersten Auswahlliste anhand einer/mehrerer if-Abfragen auswertest und je nach Wert eine entsprechende 2. Auswahlliste generierst?
Richtig.
Jein. Je nachdem, wieviele Einträge sich in der ersten Auswahlliste befinden, könntest Du es z.B. auch mit switch versuchen.
Habe es jetzt mit switch versucht und werde mich vorerst damit zufrieden geben.
Danke nochmal.
Gz peacock
Hallo,
Wenn ich hier jetzt eins auswähle, öffnet sich ein neues Dropdown. Bsp: 1.Dropdown Bundesliga/Premier League etc. 2.Dropdown Bayern Bremen etc bei Auswahl Bundesliga.
ich glaube Du meinst "verkettete Auswahllisten", oder? Das läßt sich mit JavaScript lösen und ist auch bei SelfHTML beschrieben. Wo Du schon PHP erwähnst: Pear's HTML_QuickForm bietet auch so eine Funktionalität.
Grüße, luti
Hallo,
SelfHTML beschrieben. Wo Du schon PHP erwähnst: »»
Grüße, luti
Hei luti!
danke viel mals für den Link! Das bin ich schon seit Tagen am suchen!
Jetzt hab ich nur noch eine kurz frage. Vielleicht kennst du oder sonst jemand eine Lösung oder immerhin einen Ansatz (ich bin echt am verzweifeln)
Rodney Rehm hat in seiner Lösung alle "Datensätze" (infos in den Dropdowns) manuell in der Datei terminAuswahl.js eingegeben
Code beispiel:
var terminAuswahl = {
'professor' : {
'p23' : ['p23', 'Albers, Alfred'],
'p24' : ['p24', 'Braun, Berta'],
'p25' : ['p25', 'Drachenzaun, Doris'],
'p26' : ['p26', 'Müller, Stephan'],
'p27' : ['p27', 'Meier, Manfred']
},
In meinem Fall, sind alle infos in einem CSV gespeichert. dh ich muss sie via PHP auslesen.
Da JavaScript ja Clientseitig funktioniert, kann ich das ja nicht einfach in der Datei terminAuswahl.ja ausgeben
zb. ungefähr So:
<?php
echo "var terminAuswahl = {";
echo "'professor' : {";
$handle = fopen('test.csv', 'r');
$index=0;
while($data = fgetcsv($handle, 1000, ';'))
{
if($index!="0"){
$id=$data[0];
$name=$data[1];
echo "'".$id."' : ['".$id."', '".$name."'],";
}
$index++;
}
fclose($handle);
echo "};";
?>
Wo (welche Datei? in der gleichen, in einer anderen etc) soll ich die Daten aus dem CSV auslesen und ausgeben bzw im array speichern?
Danke schonmals im voraus
kati
Hallo kati,
danke viel mals für den Link! Das bin ich schon seit Tagen am suchen!
Das freut mich ;)
(Nicht, dass Du am Suchen bist, sondern dass ich Dir helfen konnte ...)
In meinem Fall, sind alle infos in einem CSV gespeichert. dh ich muss sie via PHP auslesen.
Zwischenfrage: Erzeugst Du das CSV irgendwie dynamisch, d.h. ändern sich die Angeben darin? Oder sind die gleichbleibend? Im letzteren Fall würde ich die Angaben darin einfach einmalig in eine JS-Datei umschrieben, schon wärst Du fertig. Zur Not müsstest Du bei extrem vielen Einträgen dazu ein PHP-Sktipt basteln (so wie von Dir unten skizziert).
Da JavaScript ja Clientseitig funktioniert, kann ich das ja nicht einfach in der Datei terminAuswahl.ja ausgeben
Wieso nicht?
Wo (welche Datei? in der gleichen, in einer anderen etc) soll ich die Daten aus dem CSV auslesen und ausgeben bzw im array speichern?
Wenn Du eine dynamische Lösung zur Auslese der Daten brauchst (weil diese sich anderweitig ändern) erzeugt die .js Datei doch einfach dynamisch. Das wäre auch das Mittel zur Wahl, wenn Du die Kombinationseinträge aus einer DB auslesen wollen würdest.
Packe also Dein Codebeispiel (habe ich jetzt nicht getestet) in die .js-Datei und sorge dafür, dass .js an PHP gepars(el)t wird. Oder nenne die Datei in .js.php um und inkludiere diese dann stattdessen.
Übrigens geht das ganze mit der von mir angesprochenen Pear-Klasse wirklich sehr viel einfacher (für die faulen unter uns!).
Noch Fragen???
Grüße, luti
Zwischenfrage: Erzeugst Du das CSV irgendwie dynamisch, d.h. ändern sich die Angeben darin?»»
Das CSV ist dynamisch. Dh die Einträge verändern sich fast täglich!
Wieso nicht?
Weil die Datei clientseitig geladen wird und nicht noch einmal vom Server geladen wird. (glaube ich jedenfalls, sonst würde es ja gehen)
erzeugt die .js Datei doch einfach dynamisch.
Ok.. das tönt schon mal gut. Mach ich das so, wie du beschrieben hast? dynamisch mit php generieren und dann includieren? oder muss ich das zusätzlich etwas beachten?
Übrigens geht das ganze mit der von mir angesprochenen Pear-Klasse wirklich sehr viel einfacher (für die faulen unter uns!).
ich habs schon mit fertigen Losungen probiert, aber irgendwie bring ich die nie ganz so hin, wie ichs will. mit dem code von Rodney Rehm ists viiel besser. Den kapier ich und kann ich so umändern, dass es nach meinem Gusto funktioniert.
Noch Fragen???
siehe oben ;)
Gruss Kati
Hallo kati,
Das CSV ist dynamisch. Dh die Einträge verändern sich fast täglich!
Ok. Aber vielleicht wäre dafür eine Datenbank eher das Mittel der Wahl ... Gehen wir aber mal von der CSV-Lösung aus, Du kannst die Daten ja mit PHP einlesen.
»» erzeugt die .js Datei doch einfach dynamisch.
Ok.. das tönt schon mal gut. Mach ich das so, wie du beschrieben hast? dynamisch mit php generieren und dann includieren? oder muss ich das zusätzlich etwas beachten?
Ich glaube, da gibt es gar kein Problem! ;) Einfach noch mal im Klartext:
In der html-Datei steht:
...
<script type="text/javascript" src="/meinedaten.js.php"></script>
<script type="text/javascript" src="/linkedselection.js"></script>
<script type="text/javascript">
function deineFunktionHier(selected)
{
/* falls nötig */
}
window.onload = function()
{
var vk = new LinkedSelection(['liste1', 'liste2', 'liste3'], deineFunktionHier, kombinationen);
}
</script>
...
Die linkedselection.js ist die Datei, die Du bei diesem Rodney herunterladen kannst.
Die meinedaten.js.php Datei ließt jetzt die Daten aus der CSV-Datei aus und schreibt sie als Liste von Link-Kombinationen. Das Ergebnis der Ausgabe sollte in etwa so aussehen:
var kombinationen = {
'liste1' : {
'wert1' : ['id1', 'name1'],
'wert2' : ['id2', 'name2'],
...
},
'liste2' : {
'id1' : [['ida', 'namea'], ['idb', 'nameb']],
...
/* und so weiter */
Damit sollte es gehen! Poste doch noch mal, ob es dann geklappt hat ...
Grüße, luti
Hei Luti!
Funktioniert alles Super... im firefox ;)
Der IE7 macht beim Aufruf der onload Funktion schlapp
window.onload = function()
{
var vk = new LinkedSelection( [ 'first', 'second' ], ergebnisZeigen, terminAuswahl );
}
u
und liest die Daten nicht aus der Datei daten.js.php aus.
Das ganze mit der Fehlermeldung "terminAuswahl ist nicht definiert".
Was ich geändert habe, ist:
die Datei terminAuswahl.js --> PHP generiert
Aktion nach Beendigung der Auswahl (location.href)
und sonst eigentlich nichts. Auch nichts in der Datei LinkedSelection.js
Kann es sein, dass der IE mit der Datei terminAuswahl.js.php ein Problem macht?
Gruss Kati
Hallo ka-ti,
Funktioniert alles Super... im firefox ;)
Das freut mich ...
Der IE7 macht beim Aufruf der onload Funktion schlapp
window.onload = function()
{
var vk = new LinkedSelection( [ 'first', 'second' ], ergebnisZeigen, terminAuswahl );
}
> u
> und liest die Daten nicht aus der Datei daten.js.php aus.
> Das ganze mit der Fehlermeldung "terminAuswahl ist nicht definiert".
In der Datei daten.js.php ist "terminAuswahl" aber korrekt definiert, nehme ich an? (Sonst würde es wohl im FF nicht funktionieren.)
> und sonst eigentlich nichts. Auch nichts in der Datei LinkedSelection.js
Du hast auch nicht die Reihenfolge geändert? Also die daten.js.php wird vor dem anderen Sktirp geladen?
> Kann es sein, dass der IE mit der Datei terminAuswahl.js.php ein Problem macht?
Kann ich mir wirklich nicht erklären ... Es sei denn, der IE würde die onload-Funktion tatsächlich "onload" ausführen und nicht auf die "daten.js.php" warten ... Bei mir funktioniert's aber auch im IE. Vielleicht ist noch ein anderer Fehler drin!? Hast Du die Seite schon irgendwo online?
Grüße, lu-ti