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:
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
Und hier der Code, der die beiden Dropdownlisten miteinander abstimmt:
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";
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:
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;
}
}
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