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



## Malchor (30. September 2011)

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.


```
<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


----------



## jannicars (30. September 2011)

dir ist schon klar, dass du es absenden musst?
Oder halt Javascript benutzen.


----------



## Malchor (1. Oktober 2011)

Da ich es ja nicht erst absenden möchte, kann mir jmd. sagen  wie ich das mit Java Unterstützung anstelle?


----------



## jannicars (1. Oktober 2011)

Zwischen Java und JavaScript gibt es einen riesen Unterschied.

Vielleicht hilft dir ja das weiter:
http://www.tutorials.de/php/379149-drop-menue-programmierung.html


----------



## Malchor (3. Oktober 2011)

Leider nicht so wirklich, verstehe da mehr oder weniger nur Bahnhof


----------



## Coof (7. Oktober 2011)

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


----------



## Coof (7. Oktober 2011)

Das wäre das Auswahlfeld 1:

```
<select name="find_flight_departure" onchange="ayax(document.FormName.find_flight_departure.value);">
	$options
</select>
```

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


```
<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


```
$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:


```
<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.


----------



## Malchor (7. Oktober 2011)

Ist noch aktiv und ich lese mir dein BSp. in Kürze durch


----------



## Malchor (7. Oktober 2011)

Ich komme damit leider immer noch nicht ganz klar


----------



## Coof (7. Oktober 2011)

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: (
	
	
	



```
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.

```
$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>"; 
         }
    }
```


----------



## Malchor (9. Oktober 2011)

Ich habe das jetzt mal eingefügt und angepasst.

```
<?php
    $options = "";
    $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>";  
    } 
?> 
        <select name="find_flight_departure" id="find_flight_departure"  onchange="submit()">
        <option>Choose Departure</option>
        <option>---------------------</option>
        <?php echo $options; ?>
    </select><br>
 <?php  
  if(empty($_REQUEST['senden']) && $_REQUEST['find_flight_departure']) // Dann erstelle nur die zweite liste.. 
  
 $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>"; 
         }
    }  
  ?>
```

Leider erscheint nur ein Auswahlfeld und wenn ich einen Flughafen auswähle, wechselt die Seite auf eine leere.


----------



## jannicars (9. Oktober 2011)

Du hast ja auch noch keine submit() Funktion.


----------



## Malchor (10. Oktober 2011)

Ich hatte verstanden die sollte nicht eingebaut werden, weil ich halt sonst auf einer leeren Seite lande?!


----------



## Coof (10. Oktober 2011)

Ein submit braucht es schon das ist richtig. Wenn das Submit nun ausgeführt wird muss mit der abfrage

```
if(empty($_REQUEST['senden']) && $_REQUEST['find_flight_departure'])
```
sichergestellt werden, dass nicht die neue seite geladen wird, sondern nur das neue auswahlfeld initialisiert wird. Du musst diese abfrage also zu oberst bei der Funktion einbauen, welche bei einem Submit in diesem Formular aufgerufen wird. Wenn die Abfrage ein True ergibt, so soll nur das Auswahlfeld aufgebaut werden, dazu kannst Du irgend auf eine andere Funktion verweisen.

diese Abfrage: 
	
	
	



```
if($_REQUEST['find_flight_departure'] == $row[1]){
```
 kommt nicht bei der Auswahlliste 2, sondern bei der Auswahlliste 1, damit nach dem Submit noch das richtige Feld ausgewählt ist. Denn bei einem Submit wird ja alles zurückgestellt. (Aus diesem Grund wäre auch das AJAX besser gewesen, da dadurch nicht alles neu geladen wird.)

Ich hoffe das kann dir etwas weiterhelfen.


----------



## jannicars (10. Oktober 2011)

Ich meine die javascript submit() Funktion.


----------



## Coof (10. Oktober 2011)

ach soo. Es sollte ohne diese gehen. Das onchange='submit()' macht einfach, dass das Formular abgesendet wird.. wenn das Formular abgesendet wird, jedoch kein $_REQUEST['senden'] zurückgibt, so weiss man, dass man das menu aufbauen soll und nicht alle daten an die nächste Seite weitergeben soll..
bis jetzt habe ich es jedenfalls immer so gemacht..


----------



## jannicars (10. Oktober 2011)

achso..Ich dachte du wolltest mit Ajax arbeiten?!


----------



## Coof (10. Oktober 2011)

ahh. tut mir leid.
ja ich würde schon mit ajax arbeiten, keine frage.
Aber so wie ich gelesen habe wollte dies Malchor nicht, daher habe ich noch eine andere Variante ohne Ajax bereitgestellt.


----------



## Malchor (11. Oktober 2011)

Îch würde schon wollen aber ich verstehe das mit Ajax nicht und ich kann euch ja schlecht bitten mir dasd komplette Skript zu schreiben


----------



## jannicars (11. Oktober 2011)

Bitten geht immer, aber ob's gemacht wird, ist eine andere Frage 
Habe gerade leider keinen PC mit lokalem Webserver zur Verfügung, sonst hätte
Ich mich vielleicht rangesetzt.


----------



## Malchor (12. Oktober 2011)

Sicherlich würde ich sehr gerne jmd. bitten und die nötigen Skripte bzw. den gewünschten Ablauf mit den tabellennamen zur verfügung stellen, aber ich möchte mich auch nicht aufdrängen oder so.


----------

