Bei Selected DropDown Menue SQL Abfrage und zweites DropDown Menue füllen

Nikolai Berenbrock

Grünschnabel
Hallo zusammen,

ich steh derzeit vor einem Problem und hoffe ihr könnt mir helfen. Die Suche sowie Google habe ich schon benutzt aber leider bisher noch nicht wirklich was passendes oder für mich verständliches gefunden.

Ich habe auf einer Website für ein Schulprojekt 3 DropDown Menues, die ihre Inhalte aus der Datenbank per MySQL abfrage beziehen. Diese Funktionieren soweit einwandfrei.

Nun soll das ganze so ablaufen, dass sich der Inhalt des 2 und 3 DropDown Menues sich erst läd, wenn man das jeweils vorherige selected hat.

Also:
Man wählt im Ersten Menue ein Land, darauf hin sollen im zweiten Menue die Bundersländer erscheinen, wenn man nun im zweiten Menue ein Bundesland auswählt, sollen im dritten Menue die Städte erscheinen.

Hier mal mein bisheriger Code:

PHP:
<select style="width:200px" name="land">
<?php
include("config.php");
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
$sql = "SELECT name FROM land";
    $result = mysql_query($sql) OR die(mysql_error());
echo "<option>" . "Land wählen..." . "</option>";
        while($row = mysql_fetch_assoc($result)) {
echo "<option>" . $row['name'] . "</option>"; 
}
?>
</select>




<select style="width:200px" name="Bundesland">
<?php
include("config.php");
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
$sql = "SELECT name FROM bundesland";
    $result = mysql_query($sql) OR die(mysql_error());
echo "<option>" . "Bundesland wählen..." . "</option>";
        while($row = mysql_fetch_assoc($result)) {
echo "<option>" . $row['name'] . "</option>"; 
}
?>
</select>



<select style="width:200px" name="region">
<?php
include("config.php");
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
$sql = "SELECT name FROM region";
    $result = mysql_query($sql) OR die(mysql_error());
echo "<option>" . "Region wählen..." . "</option>";
        while($row = mysql_fetch_assoc($result)) {
echo "<option>" . $row['name'] . "</option>"; 
}
?>
</select>

Leider hören hier dann meine Kentnisse auf.. so das ich an der Stelle nun selber nicht mehr weiter komme, wie und womit ich das ganze umsetzen kann.

Ich hoffe mir kann da jemand weiter helfen bzw. mir ein hilfreiches Tutorial anbieten.

Danke schonmal im vorraus :)
 
Mit PHP alleine kommst du hier nur bedingt zum gewünschten Ziel.

Beim Laden der Seite wird das Listenfeld "land" gefüllt.
Wählt man hier jetzt einen Eintrag aus und klickt auf dem Button zum Senden des Formulars, wird der gewählte Eintrag ja als POST- oder GET-Wert übergeben. Damit werden dann die Einträge für die Liste "Bundesland" ermittelt.

Wird dann ein Bundesland ausgewählt und die Seite erneut abgeschickt, können die Einträge für die Liste "region" ermittelt und angezeigt werden.

PHP:
<select style="width:200px" name="land"> 
<?php 
include("config.php"); 
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen"); 
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); 
$sql = "SELECT name FROM land"; 
    $result = mysql_query($sql) OR die(mysql_error()); 
echo "<option>" . "Land wählen..." . "</option>"; 
        while($row = mysql_fetch_assoc($result)) { 
echo "<option>" . $row['name'] . "</option>";  
} 
?> 
</select> 




<select style="width:200px" name="Bundesland"> 
<?php
if (isset($_POST["land"]) { 
  include("config.php"); 
  $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen"); 
  mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); 
  $sql = "SELECT name FROM bundesland WHERE land ='" .mysql_real_escape_string($_POST["land"] ."'"; 
  $result = mysql_query($sql) OR die(mysql_error()); 
  echo "<option>" . "Bundesland wählen..." . "</option>"; 
  while($row = mysql_fetch_assoc($result)) { 
    echo "<option>" . $row['name'] . "</option>";  
  } 
}
?> 
</select> 



<select style="width:200px" name="region"> 
<?php 
if (isset($_POST["Bundesland"])) {
  include("config.php"); 
  $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen"); 
  mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); 
  $sql = "SELECT name FROM region WHERE bundesland ='" .mysql_real_escape_string($_POST["bundesland"] ."'"
  $result = mysql_query($sql) OR die(mysql_error()); 
  echo "<option>" . "Region wählen..." . "</option>"; 
  while($row = mysql_fetch_assoc($result)) { 
    echo "<option>" . $row['name'] . "</option>";  
  }
} 
?> 
</select>

Im Beispiel fehlt natürlich noch die FORM selber und auch der SUBMIT Button, ansonsten sollte es so aber klappen. Nur noch die SQL-Anweisungen müssen eventuell an deine Datenbank angepasst werden.

Die vielen include-Anweisungen sind nicht nötig. Es reicht wenn du es einmal zu Beginn der Seite machst. Gleiches gilt für die Verbindung zur Datenbank.
 
Erstmal danke für deine Antwort.

Geht das ganze auch ohne Submit button?

In der Theorie soll es halt direkt so funktionieren, dass wenn ich im ersten eine Auswahl treffe, dass dazu führt, das im zweiten dann die Abfrage ausgeführt wird. Ohne das man noch einen Button drücken muss.
 
Das würde dann nur mit AJAX bzw. JavaScript funktionieren.
Du schickst einen Request an das PHP-Skript und dieses liefert dir die neuen Daten.

Bevor ich hier eventuell überflüssigen Code schreibe, nutzt du irgendein Toolkit?
 
Ich meinte Toolkit im Sinne von einer Bibliothek mit Hilfsfunktionen wie z.B. jQuery.
Das hat aber nichts mit dem Editor zu tun.

In meinen früheren Projekten habe ich folgende Funktion benutzt, um ein XMLHTTPRequest-Objekt zu bekommen:
Javascript:
function getRequestObject()
{
  var ro;
  if (window.XMLHttpRequest)
  {
    try
    {
      ro = new XMLHttpRequest();
    }
    catch(e)
    {
      ro = null;
    }
  }
  else
  {
    try
    {
      ro = new ActiveXObject("Msxml2.Xmlhttp");
    }
    catch(e)
    {
      try
      {
         ro = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        ro = null;
      }
    }
  }
  if (ro == null)
  {
    alert ('Ihr Browser unterstützt leider kein AJAX');
  }
  return ro;
}
Dann musst du eben diese Funktion aufrufen und einen Request schicken.
Hier z.B. ein möglicher GET-Request:
Javascript:
function x()
{
   r_obj = getRequestObject();
   r_obj.onreadystatechange = function()
   {
      if (r_obj.readyState==4 && r_obj.status==200)
      {
         alert(x);
      }
   }
   r_obj.open("GET", "script.php?x=y");
   r_obj.send(null);
}
Bei deinem Anwendungsfall würde ich beim PHP-Skript JSON-Daten zurückgeben, diese dann mit JavaScript verarbeiten und schließlich in die Selectbox einfügen.
 
Zurück