Abhängige Listen 3x

Xarfai

Mitglied
Hi ich habe hier im Forum danach gesucht habe aber leider keine Antwort auf meine Lösung gefunden.

Mein Problem liegt darin das ich ein Menue basteln soll welches über 3 Listboxen hinweg geht.

Listbox 1 : Länder
Listbox 2: Städte
Listbox 3: Firmen

wählt man nun ein Land aus sollen nurnoch die Städte des Landes in Listbox 2 stehen. Hab ich hingekriegt mit Hilfe eines Tutorials ;)

so nun aber der schritt das wenn man eine Stadt auswählt der die Listbox 3 ändert.

Ich hole mir die Datensätze aus 3 MySQL Tabellen die wie folgt aufgebaut sind:

laender: ld_id , name
staedte: st_id, name, ld_id
firmen: ext_ag_id , name , st_id

so und nun hier der Quelltext...

PHP:
    $rs=mysql_query("select * from staedte;");
    $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($zeile=mysql_fetch_assoc($rs)) {
        echo "\tliste2[$n][0]=".$zeile['st_id'].";\n"
        . "\tliste2[$n][1]='".$zeile['name']."';\n"
		. "\tliste2[$n][2]=".$zeile['ld_id'].";\n";
        $n++;
    }
	
	$rs2=mysql_query("select * from ext_agentur;");
    $rows2=mysql_num_rows($rs2);
    echo "\tvar liste3=new Array($rows2)\n"
    . "\tfor(var i=0;i<liste3.length;i++)\n"
    . "\t\tliste3[i]=new Array(2);\n";
    $n=0;
    while($zeile=mysql_fetch_assoc($rs2)) {
        echo "\tliste3[$n][0]=".$zeile['ext_ag_id'].";\n"
        . "\tliste3[$n][1]='".$zeile['name']."';\n"
		. "\tliste3[$n][2]='".$zeile['st_id']."';\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[document.frm_auswahl.drp2.length]=NeuerEintrag;
        }
    }
}

function update_drp3() {
    var x=document.frm_auswahl.drp3.length;
    for(var n=0; n<x; n++)
        document.frm_auswahl.drp3.options[0]=null;
    for(n=0; n<liste3.length; n++) {
        if(liste2[n][2]==document.frm_auswahl.drp2.value) {
            var NeuerEintrag=new Option(liste3[n][1], liste3[n][0]);
            document.frm_auswahl.drp3.options[document.frm_auswahl.drp3.length]=NeuerEintrag;
        }
    }
}


-->
</script>

soweit die Scripte und hier der code für die Listboxen:

HTML:
	<form name="frm_auswahl">
	<select name="drp1" class="agenturen" onChange="update_drp2()">
   <?php
        $rs=mysql_query("select * from laender");
        while($zeile=mysql_fetch_assoc($rs)) {
            echo "<option value=\"".$zeile['ld_id']
            . "\">".$zeile['name']."</option>\n";
        }
    ?>
	</select><br>
	
	    <select name="drp2" size="1" class="agenturen" onChange="update_drp3()">
        <option>Start</option>
    </select><br>
	
    <select name="drp3" size="1" class="agenturen">
        <option>Start</option>
    </select><br>
	</form>
	
	<script type="text/javascript">
<!--
    update_drp2();
	update_drp3();
-->
</script>

Meine Überlegung ist das ich in der Funktion update_drp2() den options auch die dazugehörigen Values geben muss nur wie?

Danke für die Hilfe MFG Xarf

*edit*

Code:
         document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length].value=liste2[n][0];

das klappt nit soviel zu meiner überlegung =/
 
Zuletzt bearbeitet:
Hi,

mein Vorschlag. Übergib der Funktion das Select-Objekt, das aktuell aktiv ist. Weiterhin als Integerwert die Nummer
des Select-Objektes, das bearbeitet werden soll.
Mit eval und elements lässt sich so alles in einer einzigen Funktion zusammenfassen.

JS:
Code:
function update_drp(objSel, intListe) {
  eval("var arrHelp = liste" + intListe);

  var objDrop = document.frm_auswahl.elements["drp"+intListe];
  objDrop.options.length = 0;

  for(n=0; n<arrHelp.length; n++) {
    if(arrHelp[n][2] == objSel.options[objSel.selectedIndex].value) {
      var NeuerEintrag = new Option(arrHelp[n][1], arrHelp[n][0]);
      objDrop.options[objDrop.length] = NeuerEintrag;
    }
  }

  // Falls die Städte-Liste aktualisiert werden muss
  if(intListe == 2)
    update_drp(eval("document.frm_auswahl.drp"+2), 3);
}
Der HTML-Teil dazu würde wie folgt aussehen:
Code:
<form name="frm_auswahl">
<select name="drp1" class="agenturen" onChange="update_drp(this, 2)">
 <?php
      $rs=mysql_query("select * from laender");
      while($zeile=mysql_fetch_assoc($rs)) {
          echo "<option value=\"".$zeile['ld_id']
          . "\">".$zeile['name']."</option>\n";
      }
  ?>
</select><br>

    <select name="drp2" size="1" class="agenturen" onChange="update_drp(this, 3)">
      <option>Start</option>
  </select><br>

  <select name="drp3" size="1" class="agenturen">
      <option>Start</option>
  </select><br>
</form>

<script type="text/javascript">
<!--
  update_drp(document.frm_auswahl.drp1, 2);
  update_drp(document.frm_auswahl.drp2, 3);
-->
</script>
Weiterhin erstellt Du im PHP-Teil Arrays mit der Dimension zwei, diese müsste jedoch um Eins erhöht werden.
Code:
. "\t\tliste2[i]=new Array(3);\n";
Vielleicht kannst Du damit etwas anfangen.

Ciao
Quaese
 
ich danke dir =)

das hat funktioniert :) auf die Idee mit dem eval wär ich nicht gekommen vielen vielen dank =)

und der array fehler *argh* xD naja habs bereinigt danke =)
 

Neue Beiträge

Zurück