Füllen eines 2 Dropdown Menüs nach Auswahl eines ersten

Malchor

Erfahrenes Mitglied
Hi,
habe versucht eine Skript zu schreiben, wonach ein zweites Menü durch das füllen des ersten Menüs Werte erhält. Leider klappt das nicht und menü zwei bleibt leer.

PHP:
<span class="yyy">Departure from:</span>: 
       <?php
    $options = "";
	$options2 = "";
    $abfrage  ="SELECT 
						`Flughafen`.`flughafenid`, 
						`Flughafen`.`flughname`,
						`Flugplan`.`flughafenid1`,
						`Flugplan`.`flughafenid2` 
				FROM 
						Flughafen, 
						Flugplan
				Where 
						`Flughafen`.`flughafenid` =  `Flugplan`.`flughafenid1` 
						 GROUP BY `Flughafen`.`flughname` ASC"; 
    $ergebnis = mysql_query($abfrage);
	
	    while($row = mysql_fetch_row($ergebnis)) 
    { 
        $options .= "<option value=\"".$row[1]." \">".$row[1]."</option>";  
    } 
	
$abfrage2  ="SELECT 
						`Flughafen`.`flughafenid`, 
						`Flughafen`.`flughname`,
						`Flugplan`.`flughafenid1`,
						`Flugplan`.`flughafenid2` 
				FROM 
						Flughafen, 
						Flugplan
				Where 
						`Flughafen`.`flughafenid` =  `Flugplan`.`flughafenid2` 
				AND
				         `Flugplan`.`flughafenid1` = '$options'
						 GROUP BY `Flughafen`.`flughname` ASC"; 
    $ergebnis2 = mysql_query($abfrage2);
	
	    while($row = mysql_fetch_row($ergebnis2)) 
    { 
        $options2 .= "<option value=\"".$row[1]." \">".$row[1]."</option>";  
    } 	
?> 
        <select name="find_flight_departure" id="find_flight_departure" >
        <option>Choose Departure</option>
        <option>---------------------</option>
        <?php echo $options; ?>
    </select><br>
    
       Arrival in:  
       <select name="find_flight_arrival" id="find_flight_arrival" >
        <option>Choose Arrival</option>
        <option>---------------------</option>
        <?php echo $options2; ?>
    </select>
    <br></td>
    </tr>
        <tr>
      <td height="17" bgcolor="#FFFFFF" align="center"></td>
    </tr>
    <tr>
      <td height="17" bgcolor="#999" align="center"><input type="submit" value="Show" /></td>
    </tr>
  </table></form>

Ich weiß nicht wo mein Fehler liegt
 
Hi, ist das Thema noch offen?
Willst du aufgrund der Auswahl im ersten Listefeld das zweite abfüllen? - In diesem Fall denke ich, würde ich es mit AJAX realisieren.

Wenn das Problem noch vorhanden ist und du es gerne einmal so probieren würdest, so kann ich Dir noch ein Beispiel mitliefern..

Gruss Coof
 
Das wäre das Auswahlfeld 1:
HTML:
<select name="find_flight_departure" onchange="ayax(document.FormName.find_flight_departure.value);">
	$options
</select>

Wenn die Auswahl wechselt, so wird das AJAX aufgerufen..

Code:
<script type="text/javascript">
	var http = null;
	
function ayax(flughafenid1){
	if (window.XMLHttpRequest) {
	   http = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
	   http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (http != null) {
	   http.open("GET", "datei.php?flughafenid1="+ flughafenid1, true); // hier wird die PHP Datei mti der Funktion, welche die Datenbank abfrage aufgerufen
	   http.onreadystatechange = ausgeben;
	   http.send(null);
	}
}

//Das ergebnis aus der Datenbank wird der zweiten Auswahlliste angefügt..
function ausgeben() {
   if (http.readyState == 4) {
   document.FormName.find_flight_arrival.options.length=0;
     var x = http.responseText;   //ergebnis aus der PHP Funktion
		 asd = x.split(",");
		for(i=0;i<asd.length; i++){
			if(asd[i].length != ""){
				var eintrag = document.createElement("option");
				eintrag.text = asd[i];
				eintrag.value = 1;
				document.FormName.find_flight_arrival.add(eintrag, null);
			}
		}
   }
}
</script>

Nun kommt noch das Serverseitige Skript.. in diesem Fall datei.php

PHP:
$fid= $_GET['flughafenid1'];
	$adata = db_select_flughafen( $fid );
	$flughafen = "";
  	if ( count($adata) ) {
  		foreach ( $adata as $value ) {
			$flughafen .= $value['flughafen'].",";
  		}
  	}
	echo $flughafen;

Als letztes wird das Ganze ja wider in eine Auswahlliste eingefügt.. diese sieht dann etwa so aus:

HTML:
<select name="find_flight_arrival">
$flughafen 
</select>

Es muss natürlich noch entsprechend angepasst werden, sollte aber im Grossen und Ganzen funktionieren. Ich hoffe dieser Input hat Dir etwas weitergeholfen.
 
Du kannst es auch alles mit PHP mache. Das heisst du machst auf der Liste ein onchange="submit()" und danach wird je nach Auswahl die zweite Liste aufgebaut.
Dann musst Du aber schauen, dass das Formular nicht abgesendet wird, sondern nur die Liste generiert.

Da machst du sowas wie: (
PHP:
 if(empty($_REQUEST['senden']) && $_REQUEST['find_flight_departure']) // Dann erstelle nur die zweite liste..

Wenn du es so machts musst du die Liste im PHP aufbauen und selektieren.
PHP:
$abfrage2  ="SELECT 
                        `Flughafen`.`flughafenid`, 
                        `Flughafen`.`flughname`,
                        `Flugplan`.`flughafenid1`,
                        `Flugplan`.`flughafenid2` 
                FROM 
                        Flughafen, 
                        Flugplan
                Where 
                        `Flughafen`.`flughafenid` =  `Flugplan`.`flughafenid2` 
                AND
                         `Flugplan`.`flughafenid1` = '$options'
                         GROUP BY `Flughafen`.`flughname` ASC"; 
    $ergebnis2 = mysql_query($abfrage2);
    
        while($row = mysql_fetch_row($ergebnis2)) 
    { 
         if($_REQUEST['find_flight_departure'] == $row[1]){
                    $options2 .= "<option value=\"".$row[1]." \" selected=true>".$row[1]."</option>"; 
         } else {
                    $options2 .= "<option value=\"".$row[1]." \">".$row[1]."</option>"; 
         }
    }
 
Zurück