Dynamische Formularelemente

MaxMara

Mitglied
Dynamische Formularelemente (Bitte ins JS-Forum verschieben)

Hallo!

Ich stehe derzeit vor einem kleinen Problem:

Ich habe eine MySQL-DB in der (unter anderem) 2 Tables sind:

die 1. Länder (land_id, land_name)
die 2. Bundesländer (bundl_id, bundl_land_id, bundl_name)

In Table1 ist Österreich und Deutschland drinnen.
In Table2 alle deutschen und österreichischen Bundesländer (bundl_land_id = land_id)

Jetzt möchte ich ein Formular mit einem SELECT, das mir bei einer Auswahl von Österreich bzw. Deutschland in einem 2. SELECT die richtigen Bundesländer reinschreibt.

Habe schon etliches Probiert, aber bis jetzt ist alles daneben gegangen.

Hoffe auf eure Hilfe.

Danke
Christian.
 
Zuletzt bearbeitet:
Hi,

also wenn man beim 1. Select zb. Deutschland auswählt soll ein 2. Select mit den Bundesländern Deutschlands erscheinen?
Also das müsstest du mit JS machen, es sei denn nach der Landauswahl wird das Formular abgeschickt und dann ein neues mit dem 2. Select angezeigt.

mfg
dmx
 
Ja - so ist es gedacht. Bzw. wenn der Benutzer "Österreich" im ersten SELECT auswählt, soll im 2. SELECT automatisch die österreichischen Bundesländer erscheinen.

OK. Das hab ich mir fast gedacht...Also vielleicht kann ein Admin ja diesen Beitrag ins JS-Forum verschieben? :)

Danke
 
"Du musst lernen Geduld zu üben, junger Jedi"

JavaScript als cliensteitige Sprach kann nicht auf Serverdaten (incl. Datenbanken) zugreifen. Dur wirst also die Einträge aus MySQL in ein JavaScript-Array schreiben müssen oder du schreibst die selectboxen Serverseitig und versteckst sie dann mit JavaScript je nach bedarf. Mehr von mir später, jetzt ess ich erstmal was...

Edit:
Habe dir jetzt mal ein Beispiel für die Versteck-Methode geschrieben in dem die Felder schon richtig ausgefüllt sind. Du wirst die Felder wohl selber per ensprechender serverseitiger Sprache (vermutlich PHP) mit den entsprechenden Werten aus der DB füllen können. Wichtig ist, dass der value der ensprechenden option die Id des zugehörigen Select-Feldes hat (also id="de" für Deutschland mit value="de").
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head><title>Untitled</title><meta name="AUTHOR" content="con-f-use@gmx.net" /><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
     <script type="text/javascript"><!--
     function hideSelect(obj) {
     	document.getElementById(obj.options[obj.selectedIndex].value).style.display = 'inline';
     	for (var i=0; i<obj.options.length; i++) {
     		if (i != obj.selectedIndex) {
 			document.getElementById(obj.options[i].value).style.display = 'none';
     		}
     	}
     }
     //--></script>
     
     </head><body><div>
     
     <select onchange="hideSelect(this)">
     	<option value="de">Deutschland</option>
     	<option value="at">&Ouml;sterreich</option>
     </select>
     	<select id="de" name="de">
     		<option>Baden-W&uuml;rttemberg</option>
     		<option>Bayern</option>
     		<option>Berlin</option>
     		<option>Brandenburg</option>
     		<option>Bremen</option>
     		<option>Hamburg</option>
     		<option>Hessen</option>
     		<option>Mecklenburg-Vorpommern</option>
     		<option>Niedersachen</option>
     		<option>Nordrhein-Westfalen</option>
     		<option>Rheinland-Pfalz</option>
     		<option>Saarland</option>
     		<option>Sachsen</option>
     		<option>Sachsen-Anhalt</option>
     		<option>Schleswig-Holstein</option>
     		<option>Th&uuml;rigen</option>
     	</select>
     	<select id="at" name="at" style="display:none">
     		<option>Burgenland</option>
     		<option>K&auml;rnten</option>
     		<option>Nieder&ouml;sterreich</option>
     		<option>Ober&ouml;sterreich</option>
     		<option>Salzburg</option>
     		<option>Steiermark</option>
     		<option>Tirol</option>
     		<option>Vorarlberg</option>
     		<option>Wien</option>
     	</select>
     <br />
     
     </div></body></html>
 
Zuletzt bearbeitet:
Achja...die Sache mit der Geduld ist nicht so meins ;)

Aber vielen Dank für Deine Antwort. Schaut genau nach dem aus was ich suche.
Ich werd das mal bei mir so einbauen und dann Bescheid geben, ob's geklappt hat.

Grüße
Christian
 
Zuletzt bearbeitet:
Es funktioniert leider doch nicht so ganz.
Die Darstellung passt, nur der eingetragene Wert in der Datenbank passt nicht.
Ich hab noch die Schweiz dazu genommen. Das sieht jetzt so aus (JS ist unverändert):
HTML:
     <select onChange="hideSelect(this)">
     	<option value="de">Deutschland</option>
     	<option value="at">&Ouml;sterreich</option>
     	<option value="ch">Schweiz</option>		
     </select>&nbsp;Bundesland:
     	<select id="de" name="bland">
     		<option value="10">Baden-W&uuml;rttemberg</option>
     		<option value="11">Bayern</option>
     		<option value="12">Berlin</option>
     		<option value="13">Brandenburg</option>
     		<option value="14">Bremen</option>
     		<option value="15">Hamburg</option>
     		<option value="16">Hessen</option>
     		<option value="17">Mecklenburg-Vorpommern</option>
     		<option value="18">Niedersachen</option>
     		<option value="19">Nordrhein-Westfalen</option>
     		<option value="20">Rheinland-Pfalz</option>
     		<option value="21">Saarland</option>
     		<option value="22">Sachsen</option>
     		<option value="23">Sachsen-Anhalt</option>
     		<option value="24">Schleswig-Holstein</option>
     		<option value="25">Th&uuml;rigen</option>
     	</select>
     	<select id="at" name="bland" style="display:none">
			<option value="3">Burgenland</option>
     		<option value="8">K&auml;rnten</option>
     		<option value="2">Nieder&ouml;sterreich</option>
     		<option value="9">Ober&ouml;sterreich</option>
     		<option value="5">Salzburg</option>
     		<option value="4">Steiermark</option>
     		<option value="6">Tirol</option>
     		<option value="7">Vorarlberg</option>
     		<option value="1">Wien</option>
		</select>
     	<select id="ch" name="bland" style="display:none">		
			<option value="44">Aargau</option>
     		<option value="40">Appenzell Ausserrhoden</option>
     		<option value="41">Appenzell Innerrhoden</option>
     		<option value="38">Basel-Landschaft</option>
     		<option value="37">Basel-Stadt</option>
     		<option value="27">Bern</option>
     		<option value="35">Freiburg</option>
     		<option value="50">Genf</option>
     		<option value="33">Glarus</option>
     		<option value="43">Graubünden</option>
     		<option value="51">Jura</option>
     		<option value="28">Luzern</option>
     		<option value="49">Neuenburg</option>
     		<option value="32">Nidwalden</option>
     		<option value="31">Obwalden</option>
     		<option value="39">Schaffhausen</option>
     		<option value="30">Schwyz</option>
     		<option value="36">Solothurn</option>			
     		<option value="42">St. Gallen</option>			
     		<option value="46">Tessin</option>			
     		<option value="45">Thurgau</option>			
     		<option value="29">Uri</option>			
     		<option value="47">Waadt</option>			
     		<option value="48">Wallis</option>			
     		<option value="34">Zug</option>			
     		<option value="26">Zürich</option>			
		</select>

Seltsamer Weise speichert er mir immer nur den Wert 44 (den ersten Wert von der Schweiz) in der Datenbank.

Weiss jemand warum?

Grüße
Christian
 
@ con-f-use:

geduld könnte auch nur zeitvergeudung sein, wenn der junge jedi unter geduld nur versteht, alles erledige sich von selbst, wenn man nur lange genug zeit vergehen lässt.

nun zum problem: mir scheint, dass das eine php-sql-query locker leisten könnte, wenn er ein land auswählt oder hab' ich da was grundlegend missverstanden?

1. frag ich mich: warum 2 tabellen, wenn eine diese problemstellung leisten könnte, nennen wir die eine mal land, spalten 'area' =land, 'subarea'=bundesländer, dann könnte ein entspr. select so aussehen:

PHP:
<?
$query = mysql_query("SELECT * FROM land WHERE area=".$area);
mysql_error();
while($row = mysql_fetch_array($query)) {
$area= $row['area'];
$subarea= $row['subarea'];
}?>

<? echo 'Die Bundesländer'.$area.'s heißen:<br>'.$row['subarea'].' ';?>
 
Zuletzt bearbeitet:
MaxMara hat gesagt.:
Seltsamer Weise speichert er mir immer nur den Wert 44 (den ersten Wert von der Schweiz) in der Datenbank.

Weiss jemand warum?

Grüße
Christian

Die <select>'s haben alle dasselbe name-Attribut, übermittelt wird die Auswahl der letzten Liste.
Die ID's der Listen sind für das Senden des Formulars unwichtig.......ergo:
gebe den Listen unterschiedliche Namen.
 
dank remote-scripting kannst du formulare quasi zur laufzeit mit rückgriff auf php aktualisieren. das ganze funktioniert so, dass du mit javascriptDOM ein formular erzeugst und es mit den werten verhandenen werten füllst, abschickst, mit php die eingaben auswertest und dann deine neuen werte an javascript zurückgibst, welches dann dein formular updated. eine gute beschreibung solltest du hier finden:
http://www.blueshoes.org/en/javascript/jsrs/
 

Neue Beiträge

Zurück