php.de

Zurück   php.de > Webentwicklung > HTML, Usability und Barrierefreiheit

HTML, Usability und Barrierefreiheit Themen rund um Textauszeichnung, Formatierung, Barrierefreiheit und Usability.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.06.2004, 10:51  
Gast
 
Beiträge: n/a
Standard 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
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.06.2004, 20:08  
Gast
 
Beiträge: n/a
Standard 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
  Mit Zitat antworten
Alt 08.06.2004, 21:19  
Erfahrener Benutzer
 
Registriert seit: 10.07.2003
Beiträge: 280
freq.9
freq.9 eine Nachricht über ICQ schicken freq.9 eine Nachricht über MSN schicken
Standard

JavaScript wäre da ne Lösung!?
kenn mich da zwar ned aus aber mit JS sollte es gehen ^^
freq.9 ist offline   Mit Zitat antworten
Alt 08.06.2004, 22:26  
Gast
 
Beiträge: n/a
Standard

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

VERSCHOBEN nach JavaScript
  Mit Zitat antworten
Alt 19.01.2006, 15:42  
Gast
 
Beiträge: n/a
Standard 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
  Mit Zitat antworten
Alt 19.01.2006, 16:23  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von doria
Ist so eine Aufgabenstellung in PHP nicht lösbar?
Nicht ohne erneuten Request.
  Mit Zitat antworten
Alt 19.01.2006, 17:07  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard

PHP ist eine Serverseitige Sprache. Man kann daher nichts nachträglich beim benutzer ändern, sondern nur beim erstellen der seite.
lomtas ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
prob beim löschen von datensätzen und der darstellung danach PHP Tipps 2005-2 4 17.07.2005 21:42
IE falsche darstellung von border eigenschaften HTML, Usability und Barrierefreiheit 1 20.06.2005 11:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql_fetch_object mysql_assoc, php wenn hersteller modelle, select hersteller und modell, php zwei dropdowns, wie kann zwei dropdowns mit php untereinander machen, mehrere select onchange sql, leereintrag in sql generieren, html select leereintrag, obj modelle, zwei dropdowns, select option html ie falsche darstellung auswählen, dropdownlist leereintrag

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.