Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Darstellung 2 Dropdowns mit gegenseitiger Aktualisierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Darstellung 2 Dropdowns mit gegenseitiger Aktualisierung

    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

  • #2
    Es muss ja nicht immer perfekt sein

    Hallo,

    ich werde doch den nicht so perfekten Weg gehen und den Anwender dazu zwingen beide Dropdowns auf den Leerwert umzustellen.
    Sonst verknotet man sich nur das Gehirn und eine Musterlösung hat anscheinend auch keiner zur Hand.
    Es muss ja weitergehen und ich kann nicht an dieser Stelle stehenbleiben.
    Trotzdem vielen Dank an die interessierten Leser.

    Bye,
    Markus

    Kommentar


    • #3
      JavaScript wäre da ne Lösung!?
      kenn mich da zwar ned aus aber mit JS sollte es gehen ^^

      Kommentar


      • #4
        Zitat von freq.9
        JavaScript wäre da ne Lösung!?
        und deshalb

        VERSCHOBEN nach JavaScript

        Kommentar


        • #5
          Ist so ein Problem in PHP nicht lösbar

          Hallo,

          knobble seit Tagen an einem ähnlichen Problem.

          Ist so eine Aufgabenstellung in PHP nicht lösbar?

          Grüsse
          Doria

          Kommentar


          • #6
            Zitat von doria
            Ist so eine Aufgabenstellung in PHP nicht lösbar?
            Nicht ohne erneuten Request.

            Kommentar


            • #7
              PHP ist eine Serverseitige Sprache. Man kann daher nichts nachträglich beim benutzer ändern, sondern nur beim erstellen der seite.

              Kommentar

              Lädt...
              X