Hallo,
ich knoble an einem Problem bei der Darstellung eines Formulars. Ich möchte ein Formular programmieren, in dem der Benutzer einen PC eintragen kann. Dazu kann er aus einer Dropdownliste den Hersteller auswählen und bekommt dann aus der Dropdownliste Modell die Modelle die diesem Hersteller zugeordnet sind. Beide Dropdownlisten haben jeweils als ersten Eintrag einen Leereintrag. Wenn in der Dropdownliste Hersteller kein Hersteller eingetragen ist, dann sind in der Liste Modell alle Modelle herstellerunabhängig aufgeführt.
Hinter den Dropdownlisten stehen zwei Datenbanktabellen:
Und hier der Code, der die beiden Dropdownlisten miteinander abstimmt:
Ich habe neben den Dropdownlisten noch jeweils ein Eingabefeld für neue Hersteller oder Modelle, damit man die Maske nicht verlassen muss, um einen neuen Hersteller in der Datenbank einzutragen.
Jetzt wollte ich für den Fall, dass der Benutzer anstatt über den Hersteller direkt das Modell auswählt, erreichen dass auch die Dropdownliste Hersteller den korrekten Wert erhalten. Das habe ich am Anfang des Scripts so gelöst:
Jetzt hänge ich aber an dem Problem, wenn ich nun wieder in der Dropdownliste Hersteller den Nullwert (Leere Zeile) auswähle, dann soll die Dropdownliste Modelle auch den Nullwert erhalten und auch wieder alle Modelle herstellerunabhängig anzeigen.
Leider kann ich dies mit dieser Lösung nicht. Wenn ich aber den Fall abfange, dass $cpu_hersteller den Wert 0 hat und dann $cpu_modell auch auf 0 setze, dann fange ich mich selber, denn dann kann der Benutzer zwar das Modell auswählen, aber da die Dropdownliste Hersteller leer ist setzt er dann den Wert von $cpu_modell auch auf 0 und damit zeigen beide Listen als aktuellen Wert den Leereintrag an.
Ich verzweifle an dieser doch trivialen Problemstellung.
Ich bin inzwischen so weit, dass ich vor lauter Bäume den Wald nicht mehr sehe.
Kann mir eventuell jemand einen Tipp oder einen Stoss in die richtige Richtung geben ?
Vielen Dank im voraus.
Bye,
Markus
ich knoble an einem Problem bei der Darstellung eines Formulars. Ich möchte ein Formular programmieren, in dem der Benutzer einen PC eintragen kann. Dazu kann er aus einer Dropdownliste den Hersteller auswählen und bekommt dann aus der Dropdownliste Modell die Modelle die diesem Hersteller zugeordnet sind. Beide Dropdownlisten haben jeweils als ersten Eintrag einen Leereintrag. Wenn in der Dropdownliste Hersteller kein Hersteller eingetragen ist, dann sind in der Liste Modell alle Modelle herstellerunabhängig aufgeführt.
Hinter den Dropdownlisten stehen zwei Datenbanktabellen:
Code:
Hersteller id : bigint hersteller : varchar(64) www : varchar(128) email : varchar(128) lastchange : timestamp cpu_modelle id : bigint modell : varchar(32) hersteller : bigint speicherbaenke : tinyint
Code:
echo "<table>"; echo "<tr>"; echo "<td width=90>Hersteller</td><td width=230><select name=cpu_hersteller onChange='this.document.cpu_add.submit();' onFocus=\"window.status='Wählen Sie den Hersteller aus.';\" onBlur=\"window.status='';\">"; echo "<option value=0></option>"; $sql="SELECT * FROM hersteller ORDER BY hersteller"; if ($res=safe_query($sql)) { $durchlauf=0; $erster_hersteller=0; while ($obj=mysql_fetch_object($res,MYSQL_ASSOC)) { if (empty($add_hersteller)) { if (empty($cpu_hersteller) AND $durchlauf==0) { $erster_hersteller=$obj->id; $durchlauf++; } if ($cpu_hersteller==$obj->id) { echo "<option value=$obj->id selected>$obj->hersteller</option>"; } else { echo "<option value=$obj->id>$obj->hersteller</option>"; } } else { if ($add_hersteller==$obj->hersteller) { $cpu_hersteller=$obj->id; echo "<option value=$obj->id selected>$obj->hersteller</option>"; } else { echo "<option value=$obj->id>$obj->hersteller</option>"; } } } } echo "</select>"; echo "</td>\n"; echo "<td>Neuer Hersteller</td><td><input type=text name=add_hersteller onFocus=\"meldung('Geben Sie hier den Hersteller ein, die Sie hinzufügen wollen.');\">"; echo "</td><td><input type=submit name=neu_hersteller value='Hinzufügen'></td>"; echo "</tr>\n"; echo "<tr>"; echo "<td width=90>Modell</td><td width=230><select name=cpu_modell onChange='this.document.cpu_add.submit();' onFocus=\"window.status='Wählen Sie das Modell aus.';\" onBlur=\"window.status='';\">"; echo "<option value=0></option>"; if (empty($cpu_hersteller)) { // $sql="SELECT * FROM cpu_modelle WHERE hersteller='$erster_hersteller' ORDER BY modell"; $sql="SELECT * FROM cpu_modelle ORDER BY modell"; } else { $sql="SELECT * FROM cpu_modelle WHERE hersteller='$cpu_hersteller' ORDER BY modell"; } if ($res=safe_query($sql)) { while ($obj=mysql_fetch_object($res,MYSQL_ASSOC)) { $sql_modell="SELECT * FROM hersteller WHERE id='$obj->hersteller'"; if ($res_modell=safe_query($sql_modell)) { $obj_modell=mysql_fetch_object($res_modell,MYSQL_ASSOC); if ($cpu_modell==$obj->id) { echo "<option value=$obj->id selected>$obj_modell->hersteller # $obj->modell</option>"; } else { echo "<option value=$obj->id>$obj_modell->hersteller # $obj->modell</option>"; } } } } echo "</select>"; echo "</td>\n"; echo "<td>Neues Modell</td><td><input type=text name=add_modell onFocus=\"meldung('Geben Sie hier das Modell ein, die Sie hinzufügen wollen.');\" onBlur=\"window.status='';\">"; echo "</td><td><input type=submit name=neu_modell value='Hinzufügen'></td>"; echo "</tr>\n"; echo "</table>\n";
Jetzt wollte ich für den Fall, dass der Benutzer anstatt über den Hersteller direkt das Modell auswählt, erreichen dass auch die Dropdownliste Hersteller den korrekten Wert erhalten. Das habe ich am Anfang des Scripts so gelöst:
Code:
if (empty($cpu_hersteller) AND !empty($cpu_modell)) { $sql_hersteller="SELECT * FROM cpu_modelle WHERE id='$cpu_modell'"; if ($res_hersteller=safe_query($sql_hersteller)) { $obj_hersteller=mysql_fetch_object($res_hersteller,MYSQL_ASSOC); $cpu_hersteller=$obj_hersteller->hersteller; } }
Leider kann ich dies mit dieser Lösung nicht. Wenn ich aber den Fall abfange, dass $cpu_hersteller den Wert 0 hat und dann $cpu_modell auch auf 0 setze, dann fange ich mich selber, denn dann kann der Benutzer zwar das Modell auswählen, aber da die Dropdownliste Hersteller leer ist setzt er dann den Wert von $cpu_modell auch auf 0 und damit zeigen beide Listen als aktuellen Wert den Leereintrag an.
Ich verzweifle an dieser doch trivialen Problemstellung.
Ich bin inzwischen so weit, dass ich vor lauter Bäume den Wald nicht mehr sehe.
Kann mir eventuell jemand einen Tipp oder einen Stoss in die richtige Richtung geben ?
Vielen Dank im voraus.
Bye,
Markus
Kommentar