hohm: Formular mit abhängigen selectboxen

Hallo erstmal

Ich habe mir gerade einige Threads in diesem Forum angeschaut und - ehrlich gesagt - ich weiß nicht so recht, ob ich mit meiner Frage nicht gleich ordentlich eine vor´n Latz kriege. Da gibt´s ja Dinger!!

Ich suche jetzt seit Wochen nach einem guten Beispiel, anhand dessen sich nachvollziehen lässt, wie man am elegantesten "related listboxes" auf ein Formular bekommt, die jeweils aus einer MySQL-Datenbank gefüllt werden.
Mal wird das Ganze als heterogene PHP-Javascript-Lösung propagiert, mal wird komplett davon abgeraten, client- und serverseitige Scripts zu kombinieren.
Also wär mir sehr geholfen, wenn mir jemand mit einem guten Ratschlag und einem plausiblen Beipiel etwas unter die Arme greifen könnte.

Danke

Gruß
hohm

  1. Hallo hohm,

    Ich habe mir gerade einige Threads in diesem Forum angeschaut und - ehrlich gesagt - ich weiß nicht so recht, ob ich mit meiner Frage nicht gleich ordentlich eine vor´n Latz kriege. Da gibt´s ja Dinger!!

    Es ging in letzter Zeit sehr heiß her hier, bis vor kurzem war das Forum auch dicht gewesen und jetzt häufen sich die Trolle... :-(

    Deine Fragestellung erscheint mir zumindest sinnvoll gestellt, deshalb bekommst Du von mir mit Sicherheit keinen vor den Latz, von den anderen denke ich auch nicht.

    Ich suche jetzt seit Wochen nach einem guten Beispiel, anhand dessen sich nachvollziehen lässt, wie man am elegantesten "related listboxes" auf ein Formular bekommt, die jeweils aus einer MySQL-Datenbank gefüllt werden.
    Mal wird das Ganze als heterogene PHP-Javascript-Lösung propagiert, mal wird komplett davon abgeraten, client- und serverseitige Scripts zu kombinieren.

    Also: Meiner Ansicht spricht erst einmal nichts gegen eine heterogene PHP-JavaScript-Lösung. Allerdings muss auch die Möglichkeit bestehen, bei deaktiviertem JavaScript damit zu arbeiten.

    Daher mein Vorschlag: Du schreibst das erste <select> normal in die Datei rein. Dann erstellst Du einen <script>-Bereich direkt dahinter, der die zweite <select> ausgibt. Dies geschieht dann natürlich nur, wenn JavaScript aktiviert ist. Dahinter kommt ein <noscript>-Bereich, der einen Submitbutton enthält, der auf dem Server bewirkt, dass auch die zweite <select> direkt ausgegeben wird. In der ersten <select> ist dann noch der onChange-Handler.

    Also beim ersten Aufruf:

    <select name="erste_auswahl" onchange="...">...</select>
    <script type="text/javascript">
    document.writeln ('<select name="zweite_auswahl">...</select>');
    </script>
    <noscript>
    <input type="submit" name="zweite_aktualisieren" value="Weiter">
    </noscript>

    Falls JS aktiviert ist, greift der onchange-Handler sowie das direkte ausgeben des zweiten <select>s. Beispiele wie das zu realisieren ist, gibt es genug, z.B. http://www.xs4all.nl/~ppk/js/options.html Den JavaScript-Code kannst Du dynamisch mit PHP erstellen.

    Falls JS deaktiviert ist, sieht der Benutzer einen <select> und einen Submitbutton. Wenn er etwas auswählt und das Formular dann abschickt, dann sollte der Server folgenden Code ausgeben:

    <select name="erste_auswahl">...</select>
    <input type="submit" name="zweite_aktualisieren" value="Weiter">
    <select name="zweite_auswahl">...</select>

    Mit dem Submitbutton in der Mitte kann der Uesr nocheinmal die zweite Selectbox aktualisieren, mit dem <select> unten kann er die abhängige Auswahl treffen.

    In PHP könnte dann das ganze etwa so aussehen:

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (isset ($_POST["zweite_aktualisieren"])) {
        zeige_formular_mit_zweiter_box ($_POST["erste_auswahl"]);
      } else {
        verarbeite_formular ($_POST["erste_auswahl"], $_POST["zweite_auswahl"]);
      }
    } else {
      zeige_anfangs_formular ();
    }

    So würde ich es machen, so wäre es denke ich am komfortabelsten für den Benutzer.

    Das ganze kann natürlich analog mit drei, vier, fünf, n... Auswahllisten funktionieren, allerdings wird das dann etwas komplizierter.

    Viele Grüße,
    Christian