abhängige Listen

In einem Formular sollen neben mehreren anderen Eingabefeldern auch zwei Listen (Select-Felder) zum Einsatz kommen. Dabei soll der Inhalt der zweiten Liste vom gewählten Wert der ersten Liste abhängig verändert werden.

Beispiel:
Die erste Liste enthält verschiedene Artikelgruppen (z.B. Monitore, Festplatten usw) und die zweite Liste die entsprechenden Produkte (120GB, 160 GB usw...).

Zur Realisierung mit reinem HTML/PHP wäre eine Verarbeitung des Formulars nach jeder Änderung der ersten Liste erforderlich, damit die zweite Liste neu erstellt werden kann. Hierbei gehen jedoch sämtliche weiteren Eingaben in anderen Formularfeldern ebenfalls verloren, bzw. müssten wieder in die Felder geschrieben werden. Außerdem tritt eine Unterbrechung für den User ein. Im folgenden Beispiel soll eine Lösung mit JavaScript vorgestellt werden. JavaScript stellt kein unmittelbares Sicherheitsrisiko dar und kann daher ohne Bedenken eingesetzt werden. Surfer, die Javascript in ihrem Browser deaktiviert haben, können mit einer geeigneten Meldung auf die Unbedenklichkeit hingewiesen werden. Die verwendeten Befehle sollten son allen gängigen Browsern unterstützt werden.

Für das Beispiel benötigen wir zunächst zwei Tabellen - eine mit Artikelgruppen und eine mit den Artikeln selbst.

tbl_art_gruppen

art_grp_id int
art_gruppe varchar(30)

und tbl_artikel

art_id int
art_bez varchar(30)
art_grp int

Zunächst erzeugen wir eine Seite mit einem Formular und einem Select-Feld. Den Wert des Select-Feldes schreiben wir aus der Tabelle tbl_art_gruppen

<form name="frm_auswahl">
    <select name="drp1" size="1">
    <?php
        $rs=mysql_query("select * from tbl_art_gruppe");
        while($zeile=mysql_fetch_assoc($rs)) {
            echo "<option value="".$zeile['art_grp_id']
            . "">".$zeile['art_gruppe']."</option>n";
        }
    ?>
    </select>

Danach erstellen wir die abhängige Liste mit einem Startwert.

    <select name="drp2" size="1">
        <option>Start</option>
    </select>

Nach Abschluss des Formulars wird ein JavaScript-Bereich eingefügt um der zweiten Liste die entsprechenden Werte zu verpassen.

</form>
<script type="text/javascript">
<!--
    update_drp2()
-->
</script>

Die entsprechende Funktion und eine dazugehörige Wertliste wird im Head-Bereich der Seite erstellt:

<script type="text/javascript">
<!--
<?php
// abhängiges Kombifeld erzeugen
    $rs=mysql_query" select * from tbl_artikel;");
    $rows=mysql_num_rows($rs);
    echo "tvar liste2=new Array($rows)n"
    . "tfor(var i=0;i<liste2.length;i++)n"
    . "ttliste2[i]=new Array(2);n";
    $n=0;
    while($zeile=mysql_fetch_assoc($rs)) {
        echo "tliste2[$n][0]=".$zeile['art_id'].";n"
        . "tliste2[$n][1]='".$zeile['art_bez']."';n"
        . "tliste2[$n][2]=".$zeile['art_grp'].";n";
        $n++;
    }
?>
function update_drp2() {
    var x=document.frm_auswahl.drp2.length;
    for(var n=0; n<x; n++)
        document.frm_auswahl.drp2.options[0]=null;
    for(n=0; n<liste2.length; n++) {
        if(liste2[n][2]==document.frm_auswahl.drp1.value) {
            var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
            document.frm_auswhal.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
        }
    }
}
-->
</script>
</head>

Damit auch wirklich was passiert, müssen wir jetzt noch der Liste 'drp1' ein Ereignis zuweisen. Der neue Eintrag für die erste Liste sollte dann so aussehen:

<select name="drp1" size="1" onChange="update_drp2()">

Wie funktioniert es? Zuerst wird der komplette Inhalt für die abhängige Liste im JavaScript-Bereich in ein Array geschrieben. Die Funktion 'update_drp2' löscht zuerst alle Einträge (Optionen) der Liste. Im zweiten Schritt wird das zuvor erzeugte Array durchlaufen und die dritte Spalte (Verweis auf die Artikelgruppe) mit dem Optionswert der Liste1 verglichen (=Abhängigkeit!) Stimmen die beiden Werte überein wird der Liste2 eine neue Option zugefügt.

Diese Funktionen stammen von SELFHTML und sind dort ausführlich erläutert.

Zum Schluss noch ein Beispiel für die Inhalte der Tabellen:

tbl_art_gruppen:

art_grp_id art_gruppe
1 Monitore
2 Festplatten

tbl_artikel:

art_id art_bez art_grp
1 17 Zoll 1
2 19 Zoll 1
3 120 GB 2
4 160 GB 2

Ratings

There are no comments available yet.

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe

Related topics

How to effectively perform complex queries with SQL queries in MySQLi?

This MySQL tutorial explains how to efficiently perform complex SQL queries in MySQLi. We will look at various aspects of database querying and learn specific methods to fully utilise the power of MySQLi. ...

TheMax

Autor : TheMax
Category: mySQL-Tutorials

E-Mailprüfung mit JavaScript

In diesem Tutorial wird gezeigt, wie eine E-Mailüberprüfung in JavaScript realisiert werden kann ...

andy@

Autor : andy@
Category: Other tutorials

Hier ein kleines allgemeines Tutorial zu PHP

Die Einleitung ist in folgende Themen aufgeteilt: -Einleitung -Variablen -Parameterübergabe -Funktionen -Schleifen -IF-Abfragen Am besten Sie schauen sie sich der Reihenfolge nach an. ...

demiangrandt@

Autor : demiangrandt@
Category: PHP-Tutorials

MySQL Klasse

In meinem kleinen Tutorial zeige ich euch, wie ihr ganz einfach eine kleine MySQL Klasse schreiben könnt. ...

Borlabs

Autor : Borlabs
Category: mySQL-Tutorials

Joomla! Starterhilfe

Dieses Tutorial begleitet Sie bei dem Einstieg in die Welt von dem CMS Joomla!. ...

werninator

Autor : werninator
Category: mySQL-Tutorials

Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!

Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...

ndo@

Autor : ndo@
Category: PHP-Tutorials

Basics of views in MySQL

Views in a MySQL database offer the option of creating a virtual table based on the result of an SQL query. This virtual table can be queried like a normal table without changing the underlying data. ...

admin

Autor : admin
Category: mySQL-Tutorials

Definition of stored procedures - an introduction

Stored procedures are predefined SQL code blocks that are stored in a database and can be called up as required. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Category: mySQL-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial