EKKi: Formular ausfüllen durch DropDown Auswahl

Beitrag lesen

Mahlzeit girasol,

Ich habe für die Adressausgabe wiederum mein JavaScript verwendet. Das Problem ist nun, dass nur wenn ich den letzten Eintrag im DropDown Menü auswähle, so werden die Werte für die Felder "wename" und "wefirma" übernommen. Dies kann ich auch nachvollziehen, denn die Variabel mit der ich abchecke ($i --> if(weauswahl == ".$i.")) ist nach der foreach-Schlaufe auf dem letzten Wert.  Kannst du mir vielleicht dabei weiterhelfen, mit welcher Variabel ich den Wert abchecken muss damit es funktioniert?

Ich habe das Gefühl, dass Dir ein grundsätzliches Verständnis dafür fehlt, was wann wo abläuft. PHP erzeugt auf dem Server HTML (und ggf. Javascript) und der Server schickt dann den generierten Code an den Browser. Dem Browser ist es pupsegal, ob das, was er bekommt, von PHP generiert wurde oder so als Datei auf dem Server liegt: er kann er nur HTML darstellen und maximal Javascript-Code ausführen.

Das bedeutet aber auch, dass der Browser nicht auf irgendwelche Variableninhalte, die irgendwelche PHP-Variablen vielleicht irgendwann mal auf dem Server gehabt haben mögen, zugreifen kann, wenn der Benutzer im Browser irgendeine Handlung vornimmt.

Du hast folgendes Aufgabe:

Erstelle mittels PHP gültigen Javascript-Code, der die gewünschte Dynamik auf Clientseite ermöglicht.

Dazu ist einerseits der PHP-Code relevant, da es in ihm darum geht, auf die richtige Art und Weise Ausgaben vorzunehmen, die dann HTML und Javascript darstellen. Andererseits ist dann dieser generierte Javascript-Code relevant, um die gewünschte Interaktivität im Browser zu erreichen.

Wenn Du jetzt ein Problem im Bereich Javascript ist, ist es nur bedingt hilfreich, wenn Du PHP-Code postest: schau in den HTML-Quelltext, was dort für Javascript-Code steht. Wenn dieser fehlerhaft ist, schau im PHP-Code nach, warum er fehlerhaft erzeugt wird: Zitat 1353

[code lang=php]
$query="SELECT wefirma, wename FROM wedaten WHERE benutzerdaten_ID = '0' or benutzerdaten_ID = '$WEID'";
$result = mysql_query($query) or die("Err.:".mysql_error());

$list = array();
while ($row = mysql_fetch_assoc($result)) {
   $list[] = $row;
}

Vollkommen irrelevant. Wenn die Abfrage grundsätzlich funktioniert und Du eine Ergebnismenge bekommst, warum ist dann dieser Code Teil Deiner Fehlerbeschreibung?

foreach ($list as $i => $record) {
  // echo $i, ". ", $record['wefirma'], " - ", $record['wename'], "<br />\n";
   echo "<option value=".$i.">", $record['wefirma'],"</option>";

Du gibst an dieser Stelle lediglich die einzelnen Optionen Deiner Auswahlliste aus. Du generierst keinen Javascript-Code, mittels dessen Dein Browser wüsste, welche anderen Daten er bei anderen gewählten Optionen in die Eingabefelder schreiben soll.

}
   echo "<script language='JavaScript' type='text/javascript'>
   function change() {
   var weauswahl = document.forms[0].auswahl.value;
   if(weauswahl == ".$i."){

Hier steht natürlich immer der letzte Wert der PHP-Variable. Das bedeutet aber auch, dass Deine Funktion nur bei einer gewählten Option reagiert. Sie ist also mehr oder weniger sinnlos.

document.getElementsByName('wefirma')[0].value='", $record['wefirma'],"';

Hier weist Du dem entsprechenden Element immer den entsprechenden Wert des letzten Datensatzes zu. Konsequenz: s.o.

document.getElementsByName('wename')[0].value='", $record['wename'],"';

Hier genauso.

Im Moment hast Du also mehr ein konzeptionelles Problem als ein technisches.

Nochmal:

1.) Hole Dir die Daten aus der Datenbank.

2.) Erzeuge mittels PHP einer einer Schleife sowohl die einzelnen Optionen der Auswahlliste (HTML) als auch ein Array mit den Daten aller möglichen Optionen (Javascript). Sinnvollerweise tust Du das NICHT durch mehrfaches Aufrufen von echo, sondern indem Du zwei getrennte Strings zusammenbastelst, die Du anschließend so ausgibst, dass der so erzeugte HTML-/Javascript-Code auch valide ist und funktionieren kann.

3.) Schreibe eine Javascript-Funktion, die beim Ändern der Auswahlliste je nach aktuellem Wert die passenden Daten aus dem o.g. Array in die Eingabefelder schreibt.

MfG,
EKKi

--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|