abhängige Auswahllisten mit DBdaten füllen

Brokiss

Grünschnabel
Hallo ich bin neu hier im Forum und auch noch ein richtiger JS Anfänger.
Nun zu meinem Problem.
Ich habe ein Formular mit zwei Auswahllisten, wobei die zweite Liste eine multiple Selectbox ist. Ich möchte nun das die zweite Liste sich abhängig von der Auswahl der ersten Liste ändert.
Mein Versuch bis jetzt:

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <title>Kundendaten</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="Design.css" />
<script language="javascript" type="text/javascript"> 
    <!--
    var arrKat = new Array();

   // Erste Komponente - Kategorie-ID ist Index
      arrKat["1"] = new Array();
  // Unterkategorien zur ersten Kategorie-ID
      arrKat["1"][0] = "lipo-med";
      arrKat["1"][1] = "heinzsoft";
      arrKat["1"][2] = "Uni";
  // Zweite Komponente - Kategorie-ID ist Index
      arrKat["2"] = new Array();
  // Unterkategorien zur ersten Kategorie-ID
      arrKat["2"][0] = "Bacardi.mpeg";
      arrKat["2"][1] = "Children.avi";
      arrKat["2"][2] = "JurrasicFart.wmv";


function updateSub(objForm, strKey){
       var objSelSub = objForm.Anzeigezone;

      // Bestehende Liste löschen
         objSelSub.options.length = 0;

     // Falls der default-Zustand gewählt wird
        if(strKey == "default") return;

    // Unterkategorie-Array durchlaufen
       for(var i=0; i<arrKat[strKey].length; i++){
    // Neues Options-Objekt (value = Hauptkat_Unterkat)
       objOption = new Option(arrKat[strKey][i], arrKat[strKey][i], false, false);
    // Option in Liste einhängen
       objSelSub.options[objSelSub.length] = objOption;
  }
}
  -->
</script>
</head>
  <body bgcolor="#000077"><br>
            <select name="Aufteilung" size=1  onchange="updateSub(this.form, this.value)">
                                   <option value="default">Bitte w&auml;hlen</option>
                                   <option value="1">Werbung</option>
                                   <option value="2">Video</option>
            </select>
  </body>
</html>

das klappt ja jetzt auch so lange ich selbst die Werte in die Arrays schreibe.
Ich möchte nun aber, dass die Werte der zweiten Liste aus einer Datenbank gelesen werden. Im Netz habe ich auch schon was gefunden und es an mein Script angepasst, aber erstens wird die zweite Liste nicht gefüllt und zweitens verstehe ich es auch nicht.

HTML:
<?php
session_start();
  require("connect.inc.php");//einbinden der Datei connect.inc.php
?>
<html>
<head>
<title>Test der Formularfunktion</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
<?php
// abhängiges Kombifeld erzeugen
    global $PHP_SELF, $dbName, $frm_auswahl;
    $rs=mysql($dbName, "SELECT name,bezeichner,format FROM daten");
    //$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"
    . "\t\tliste2[i]=new Array(2);\n";
    $n=0;
    while(list($name,$bezeichner,$format) = mysql_fetch_row($rs)){
    //while($zeile=mysql_fetch_assoc($rs)) {
        echo "\tliste2[$n][0]=".$name.";\n"
        . "\tliste2[$n][1]=".$bezeichner.";\n"
        . "\tliste2[$n][2]=".$format.";\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_auswahl.drp2.options[]=NeuerEintrag;
        }
    }
}
</script>

</head>

<body>

<form name="frm_auswahl">
    <select name="drp1" size="1" onChange="update_drp2()">
                                    <option value="default">Bitte w&auml;hlen</option>
                                    <option value="1">Werbung</option>
                                    <option value="2">Video</option>
                                    </select>
    </select>
    
    <select name="drp2" size="1">
        <option>Start</option>
    </select>
</form>
<script type="text/javascript">
<!--
    update_drp2()
-->
</script>


</body>
</html>

Ich hab eine Datenbanktabelle die aus 4 Spalten besteht "datenid", "name", "bezeichner" und "format" und ich möchte halt nun das wenn ich in der ersten Liste "Werbung" auswähle das dann in der zweiten Liste alle "bezeichner" angezeigt werden die "format" = HTML haben und als value soll "name" übergeben werden, da ich ja die Werte später noch mit php weiterverarbeiten will.
Konform dazu soll dann wenn ich dann Video in der ersten Liste auswähle eben alle Werte angezeigt werden die "format"=Video haben.

Ist das irgendwie möglich? Wie gesagt ich bin noch Anfänger und verstehe manche Zusammenhänge noch nicht so genau.
Und ich würde mich sehr freuen wenn mir jemand helfen würde.
 
Hallo

ich hatte vor einiger Zeit was ähnliches programmiert.

1) Die Liste wird sich im zweitem Dropdownmenü erst anzeigen wenn du so zusagen bescheid sagst dass sich da was in der ersten Liste änderte

Das kann man mit onChange. also onChange = "javaSkriptfunktion()"

damit neu Daten aus der Datenbank geladen werden per php - soll eigentlich das ganze zum Server geschickt werden und das erreicht man so:

Code:
Liste_1 <select name = " " onchange = 'this.form.submit() ' >

dann wird ausgewählte ID oder Name das in Value stand zum Server geschickt und somit kann neue Anfrage gemacht werden - und die zweite Liste entsprechend der ausgewählten Value - Wert ausgefuelt.
(mit Hilfe einer Schleife die man in php programmiert.. so ähnlich wie im php Code was du hier gepostet hast - ich hab ihn mir aber nicht genau angekuckt )

Danach wird Seite quasi neu geladen.

Wenn du möchtest kann ich ein Beispiel Code schicken aber
es währe hilfreich wenn du erzählst in wie weit du dich mit php auskennst,
und welche Datenbank du benutzt - ich nehme aber an mysql - in wie weit kennst du dich mit mysql aus und wie die zwei Tabelen in Datenbank verknüpft sind
 
oh entschuldigung du hast ja bereits Onchange benutzt ;)

aber es mus glaub ich schon zum Server geschieckt werden um Anfrage an DB zu machen...

also durch Änderung submit auflösen - und da php sowiso nur Serverseitig arbeitet muss man das eh
 
Ich arbeite mit phpmyadmin und einer mysql Datenbank. Und angesprochen werden muss auch nur eine Tabelle, da ja die erste Liste nur aus zwei Auswahlmöglichkeiten besteht und diese fest in den HTML code geschrieben sind.
Mit PHP kenn ich mich zumindest besser aus als mit Javascript ich weiss ja auch wie ich mit PHP die gewünschten Daten aus der Datenbank abfrage.

PHP:
<select name="Video[]" size=7 multiple>
                                <option value="noselect" checked>--Bitte w&auml;hlen--</option>
                    <?php
                      global $PHP_SELF, $dbName, $daten;
                      $result=mysql($dbName, "SELECT name,bezeichner FROM daten WHERE 
                                              format='Video'ORDER BY bezeichner");
                      while(list($name,$bezeichner) = mysql_fetch_row($result))
                      {
                      echo "<option value=\"".$name."\">".$bezeichner."</option>";
                      }
                      mysql_free_result($result);
                    ?>
                                 </select>

bzw.

PHP:
<select name="HTML" size=1>
                    <?php
                      global $PHP_SELF, $dbName, $daten;
                      $result=mysql($dbName, "SELECT name,bezeichner FROM daten WHERE 
                                              format='HTML'ORDER BY bezeichner");
                      while(list($name,$bezeichner) = mysql_fetch_row($result))
                      {
                      echo "<option value=\"".$name."\">".$bezeichner."</option>";
                      }
                      mysql_free_result($result);
                    ?>
                                 </select>

ich weiss halt nur nicht wie ich die dann mit JS in ein Array speichern kann um sie dann abzurufen wie wenn ich sie direkt in das Array speichere.

HTML:
var arrKat = new Array();

// Erste Komponente - Kategorie-ID ist Index
arrKat["1"] = new Array();
// Unterkategorien zur ersten Kategorie-ID
arrKat["1"][0] = "lipo-med";
arrKat["1"][1] = "heinzsoft";
arrKat["1"][2] = "Uni";
// Zweite Komponente - Kategorie-ID ist Index
arrKat["2"] = new Array();
// Unterkategorien zur ersten Kategorie-ID
arrKat["2"][0] = "Bacardi.mpeg";
arrKat["2"][1] = "Children.avi";
arrKat["2"][2] = "JurrasicFart.wmv";

Du kannst mir aber gerne mal nen PHP Codeschnipsel schicken vielleicht versteh ja dann besser was du meinst.
 
Was du auf jeden Fall machen solltest ist, den PHP-Code zu verändern, dass in den Array-Bezeichnern keine Anführungszeichen mehr stehen.

Man könnte auch einen ganz anderen Ansatz verwenden: Du schreibst für jeden Punkt in der Auswahlbox ganz normal mit PHP entsprechende Auswahlboxen mit den richtigen Werten rein und gibst ihnen style="display:none". Javascript blendet dann eine der Auswahlboxen ein, je nachdem, was in der Hauptbox vom Benutzer ausgewählt wurde. So kannst du mit php arbeiten und brauchst Javascript nicht so intensiv zu benutzen. Zu der Methode siehe auch hier: http://www.tutorials.de/tutorials214587.html&highlight=option
 
Zuletzt bearbeitet:
con-f-use hat gesagt.:
Was du auf jeden Fall machen solltest ist, den PHP-Code zu verändern, dass in den Array-Bezeichnern keine Anführungszeichen mehr stehen.

Man könnte auch einen ganz anderen Ansatz verwenden: Du schreibst für jeden Punkt in der Auswahlbox ganz normal mit PHP entsprechende Auswahlboxen mit den richtigen Werten rein und gibst ihnen style="display:none". Javascript blendet dann eine der Auswahlboxen ein, je nachdem, was in der Hauptbox vom Benutzer ausgewählt wurde. So kannst du mit php arbeiten und brauchst Javascript nicht so intensiv zu benutzen.
Ja das wäre auch eine Möglichkeit ich kanns ja mal ausprobieren ich hab ja jetzt schließlich das ganze Wochenende zeit. Aber trotzdem schonmal Danke.
 
Zuletzt bearbeitet:
Hab meinen Beitrag nochmal editiert und ihn mit einem Link versehen, der die Methode nochmal beschreibt. Vielleicht bekommst du's ja selber hin.
 
con-f-use hat gesagt.:
Hab meinen Beitrag nochmal editiert und ihn mit einem Link versehen, der die Methode nochmal beschreibt. Vielleicht bekommst du's ja selber hin.
Habe deinen Vorschlag grad eben mal ausprobiert und es funktioniert auch wirklich prächtig. Das einzige was mich stört ist halt das die Selectboxen weil sie ja versteckt sind dann auch an unterschiedlichen stellen erscheinen und sich halt nicht einfach nur der Inhalt ändert. Aber damit kann ich leben, wenigstens funktioniert es jetzt schonmal um die Schönheit kümmere ich mich dann später.
Ich danke für die schnellen und hilfreichen antworten.
 

Neue Beiträge

Zurück