CINXE.COM
PHP: Dynamische Auswahllisten
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("http://aktuell.de.selfhtml.org:80/artikel/php/auswahllisten/","20070331122514","https://web.archive.org/","web","/_static/", "1175343914"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>PHP: Dynamische Auswahllisten</title> <meta name="description" content="Dynamische Erstellung von Auswahllisten mit Vorauswahl bereits selektierter Werte"> <meta name="keywords" content="PHP, HTML Formular, Auswahlliste, dynamisch, mySQL"> <meta name="author" content="Andreas Cloos,andreas.cloos@gmx.de"> <meta name="DC.Publisher" content=""> <meta name="DC.Date" content="2002-10-14T22:00+01:00"> <meta name="DC.Identifier" content="http://aktuell.de.selfhtml.org/artikel/php/auswahllisten/"> <meta name="DC.Language" content="de"> <meta name="DC.Rights" content=""> <meta name="SELF.Firstdate" content="2002-10-14T22:00+01:00"> <meta name="SELF.Version" content="1"> <meta name="SELF.Pagetype" content="page"> <link rel="stylesheet" type="text/css" href="https://web.archive.org/web/20070331122514cs_/http://src.selfhtml.org/selfhtml-aktuell-2006-09-05.css" title="SELFHTML-Stylesheet"> <link rel="shortcut icon" type="image/x-icon" href="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/favicon.ico" title="SELFHTML-Icon"> <link rel="top" href="/" title="SELFHTML aktuell"> <link rel="up" href="../" title="Artikel: PHP"> <link rel="search" href="https://web.archive.org/web/20070331122514/http://suche.de.selfhtml.org/" title="SELFHTML-Suche"> <link rel="bookmark" href="/artikel/" title="Artikel"> <link rel="bookmark" href="/links/" title="Linkverzeichnis"> <link rel="bookmark" href="http://suche.de.selfhtml.org/" title="SELFHTML-Suche"> </head> <body class="selfhtml-aktuell selfhtml-aktuell-inhaltsseite"> <table cellpadding="4" cellspacing="0" id="kopf"> <tr><td colspan="2" id="kopf-navigation"><a name="top"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/refkap.gif" width="16" height="13" alt="Teil von"></a> <a href="/web/20070331122514/http://aktuell.de.selfhtml.org/">SELFHTML aktuell</a> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/refkap.gif" width="16" height="13" alt="Teil von"> <a href="/web/20070331122514/http://aktuell.de.selfhtml.org/artikel/">Artikel</a> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/refkap.gif" width="16" height="13" alt="Teil von"> <a href="/web/20070331122514/http://aktuell.de.selfhtml.org/artikel/php/">PHP</a></td></tr> <tr> <td id="kopf-logo"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/logo.gif" width="106" height="109" alt="SELFHTML"></td><td id="kopf-titel"> <h1>PHP:<br>Dynamische Auswahllisten</h1> </td></tr> <tr><td id="kopf-links"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/dokx.gif" width="30" height="20" alt="Informationsseite"></td><td id="kopf-haupt"> <p> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"> <a href="#autor">Andreas Cloos</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"> <a href="#thema">Hinweise zum Thema</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"> <a href="#beispiel">Beispiel mit Erl鋟terungen</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"> <a href="#links">Weiterf黨rende Links</a><br> </p> </td></tr> <tr><td colspan="2" id="kopf-down-link"><a href="#bottom"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"></a></td></tr> </table> <h2><a name="autor">Andreas Cloos</a></h2> <table class="authortable" cellpadding="4" cellspacing="0"> <tr> <th>E-Mail:</th> <td><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/mail.gif" width="15" height="10" alt="E-Mail"> <a href="https://web.archive.org/web/20070331122514/mailto:andreas.cloos@gmx.de">andreas.cloos@gmx.de</a></td> </tr> <tr> <th>Homepage-URL:</th> <td><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/de.gif" width="16" height="10" alt="deutschsprachige Seite"> <a href="https://web.archive.org/web/20070331122514/http://www-cloos.li/">http://www-cloos.li/</a></td> </tr> </table> <p>Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!</p> <p class="abschnitttrenner"><a href="#top"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/up.gif" width="14" height="10" alt="nach oben"></a><a href="#bottom"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"></a></p> <h2><a name="thema">Hinweise zum Thema</a></h2> <p>In der FAQ der Newsgroup de.comp.lang.php wird ein Ansatz beschrieben, wie mit PHP eine Auswahlliste dynamisch aus den Eintr鋑en einer Datenbanktabelle erstellt werden kann (10.7. Wie kann ich aus einer Datenbanktabelle einen "select" erzeugen?, http://www.dclp-faq.de/q/q-formular-select.html). Die dort vorgestellte L鰏ung setzt jedoch PHPLIB voraus. Hier soll ein Ansatz vorgstellt werden, der ohne PHPLIB auskommt und daher auch auf Servern einsetzbar ist, auf denen PHPLIB eben nicht verf黦bar ist.</p> <p>Die L鰏ung wird anhand eines konkreten Beispiels vorgestellt. Dieses mag ein wenig konstruiert wirken, stammt aber aus einer kleineren Anwendung, die ich entwickelt habe.</p> <p>Es wird eine Auswahlliste erzeugt, die an zwei verschiedenen Stellen eingesetzt wird. Zun鋍hst um einen Mitarbeiter, der neu in der Datenbank angelegt werden soll, einer Kostenstelle zuzuordnen, ein anderes Mal in einer 膎derungsmaske. In dieser Maske soll dem Anwender zun鋍hst angezeigt werden, in welcher Kostenstelle der Mitarbeiter urspr黱glich angelegt wurde, dann aber soll er gegebenenfalls eine andere Kostenstelle ausw鋒len k鰊nen. Da der bisherige Eintrag an erster Stelle der Auswahlliste angezeigt wird, ist er zum einem f黵 den Anwender sichtbar, was weniger irritierend wirken d黵fte, als wenn er bei einer Abfrage- und 膎derungsoperation einen Eintrag "Bitte ausw鋒len" in der Auswahlliste zu sehen bekommt und es f黨rt nicht zu Fehlern, wenn unbeabsichtigt "Enter" gedr點kt wird und versucht wird, eben diesen Text als Eintrag in die Datenbanktabelle zu schreiben.</p> <p>Die Auswahlliste wird mittels eines Includes erzeugt, der an ben鰐igter Stelle eingebunden wird. Je nachdem ob es sich also um eine Neuanlage handelt oder um eine 膎derung, sieht sie aber ganz anders aus.</p> <p>So n鋗lich bei einer Neuanlage eines Mitarbeiters in der Datenbank:</p> <ul> <li>Bitte ausw鋒len</li> <li>121</li> <li>122</li> <li>123</li> </ul> <p>Und so s鋒e die 黚er den gleichen Include erzeugte Auswahlliste bei einer 膎derung aus, wenn der Mitarbeiter bisher in der Kostenstelle 122 eingesetzt war:</p> <ul> <li>122</li> <li>Andere Kostenstelle bitte ausw鋒len</li> <li>121</li> <li>122</li> <li>123</li> </ul> <p>Zum Verst鋘dnis hier noch die der Auswahlliste zugrundeliegende Datenbanktabelle <var>costcenter</var>, die die m鰃lichen Kostenstellen (und eine per auto-increment erzeugte ID) beinhaltet: </p> <pre> +-----------+-----------+ | cc_id | cc_no | +-----------+-----------+ | 1 | 121 | | 2 | 122 | | 3 | 123 | +-----------+-----------+ </pre> <p>Wenn ein Mitarbeiter ge鋘dert werden soll, kann sich der Anwender zun鋍hst eine Liste von Mitarbeiter anzeigen lassen (z. B. alle die "Meier" hei遝n) und dann per Radiobutton einen Mitarbeiter zur 膎derung markieren. Der Radiobutton 黚ermittelt eine Variable <var>radio</var> (weil die Radiobuttons explizit mit <var><input type=\"radio\" name=\"radio\" ...></var> benannt worden sind) tr鋑t und 黚ermittelt einen Wert als Inhalt dieser Variablen. Der Wert wird hier D-User genannt, es handelt sich um eine Art Personalnummer, die eindeutig und daher als Schl黶sel geeignet ist. Wenn ein neuer Mitarbeiter angelegt werden soll, dann wurde nat黵lich kein Mitarbeiter vorher zur 膎derung markiert und die Variable <var>radio</var> ist leer bzw. in PHP-Logik "boole(false)".</p> <p>Im folgenden Insert- oder Update-Statement kann dann die Kostenstelle als Inhalt der Varibale <var>costcenter</var>, dem Namen der Auswahlliste, in die Datenbanktabelle geschrieben werden.</p> <p>Das soll hier reichen, weitere Erl鋟terungen k鰊nen Sie den Kommentaren im abgebildeten Quelltext entnehmen.</p> <p class="abschnitttrenner"><a href="#top"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/up.gif" width="14" height="10" alt="nach oben"></a><a href="#bottom"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"></a></p> <h2><a name="beispiel">Beispiel mit Erl鋟terungen</a></h2> <h3 class="xmp">Beispiel</h3> <pre> <!--%%form_new_user.php%%--> <?php /*Hier steht ganz viel Quelltext*/ echo "<table> <TR><TD>Kostenstelle</TD> <TD>"; include ("lov_costcenter.php"); #So w黵de die folgende Datei als Include echo " </TD> #in eine Tabelle eingebunden. Zu sehen ist </tr> #eben eine Auswahlliste in einer </table"; #Tabellenzelle. /*Hier steht wieder ganz viel Quelltext*/ ?> <!--%%lov_costcenter.php%%--> <?php /*Und jetzt kommt der eigentlich spannende Teil:*/ /* Die Verbindung zur Datenbank besteht schon und wird hier vorausgesetzt. */ if ($radio != "NULL") { #Dieser Check dient dazu, um zu differenzieren, ob ein neuer #Mitarbeiter angelegt ($radio = NULL) oder ein #bestehender Mitarbeiter ge鋘dert werden soll, #im letzten Fall (if-Bedingung erf黮lt) soll die bisherige #Kostenstelle des Mitarbeiters aus der Tablle "user" ermittelt werden. #Der "duser" ist der Schl黶sel, 黚er den der User identifiziert wird. $user_costcenter="SELECT costcenter FROM user WHERE duser='$radio';"; $result_user_costcenter=mysql_query($user_costcenter) or die; $user_cc = mysql_fetch_row($result_user_costcenter); } #Unabh鋘gig ob neuer oder bestehender Mitarbeiter brauchen wir alle #Kostenstellen, um die Auswahloptionen zu bekommen. $lov_costcenter="SELECT cc_id, cc_no FROM costcenter ORDER BY cc_no;"; $result_lov_costcenter=mysql_query($lov_costcenter) or die; /*Und jetzt wird die eigentlich Auswahlbox geschrieben.*/ echo "<select name='costcenter' size='1'>"; #Sie wird immer #ge鰂fnet. if ($user_cc != false) { #bestehender #Mitarbeiter echo "<option value='$user_cc[0]'>$user_cc[0]</option>"; #bisherige #Kostenstelle echo "<option value='0'>Andere Kostenstelle bitte ausw鋒len</option>"; } else { #neuer Mitarbeiter echo "<option value='0'>Bitte ausw鋒len</option>"; } while ($row=mysql_fetch_row($result_lov_costcenter)) #Hier werden nach und { #nach alle echo "<option value='$row[1]'>".$row[1]."</option>"; #Kostenstellen } #ausgegeben. echo "</select>"; #Schlie遝n der #Auswahlliste /*Ergebnis und Link zur Datenbank freigeben, um Ressourcen zu schonen*/ mysql_free_result($result_lov_costcenter); mysql_close($link_lov_costcenter); ?> </pre> <!-- <h3 class="xpl">Erl鋟terung:</h3> --> <!-- <h3 class="inf">Beachten Sie:</h3> --> <p class="abschnitttrenner"><a href="#top"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/up.gif" width="14" height="10" alt="nach oben"></a><a href="#bottom"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/down.gif" width="14" height="10" alt="nach unten"></a></p> <h2><a name="links">Weiterf黨rende Links</a></h2> <p>Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere M鰃lichkeiten und Details zu erfahren.</p> <p> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/de.gif" width="16" height="10" alt="deutschsprachige Seite"> <a href="https://web.archive.org/web/20070331122514/http://www.dclp-faq.de/">FAQ von de.comp.lang.php</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/de.gif" width="16" height="10" alt="deutschsprachige Seite"> <a href="https://web.archive.org/web/20070331122514/http://www.dclp-faq.de/q/q-formular-select.html">PHP-FAQ: Select erzeugen</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/de.gif" width="16" height="10" alt="deutschsprachige Seite"> <a href="https://web.archive.org/web/20070331122514/http://www.dclp-faq.de/q/q-formular-radio.html">PHP-FAQ: Radiobuttons verarbeiten</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/de.gif" width="16" height="10" alt="deutschsprachige Seite"> <a href="https://web.archive.org/web/20070331122514/http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&group=de.comp.lang.php">de.comp.lang.php 黚er Google-Groups</a><br> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/serverdok.gif" width="15" height="10" alt="bereichs黚ergreifende Seite"> <a href="https://web.archive.org/web/20070331122514/http://de.selfhtml.org/html/formulare/auswahl.htm">Auswahllisten und Radiobuttons</a><br> </p> <p id="fuss-up-link"><a href="#top"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/up.gif" width="14" height="10" alt="nach oben"></a></p> <p id="fuss-navigation"><img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/refkap.gif" width="16" height="13" alt="Teil von"> <a href="/web/20070331122514/http://aktuell.de.selfhtml.org/">SELFHTML aktuell</a> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/refkap.gif" width="16" height="13" alt="Teil von"> <a href="/web/20070331122514/http://aktuell.de.selfhtml.org/artikel/">Artikel</a> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/refkap.gif" width="16" height="13" alt="Teil von"> <a href="/web/20070331122514/http://aktuell.de.selfhtml.org/artikel/php/">PHP</a></p> <p><a name="bottom">© 2006</a> <img src="https://web.archive.org/web/20070331122514im_/http://src.selfhtml.org/serverdok.gif" width="15" height="10" alt="bereichs黚ergreifende Seite"> <a href="https://web.archive.org/web/20070331122514/http://www.selfhtml.org/de.impressum.html">Impressum</a></p> </body> </html> <!-- FILE ARCHIVED ON 12:25:14 Mar 31, 2007 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 10:18:01 Dec 18, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 2.255 exclusion.robots: 0.028 exclusion.robots.policy: 0.018 esindex: 0.01 cdx.remote: 339.623 LoadShardBlock: 509.261 (3) PetaboxLoader3.datanode: 249.628 (6) PetaboxLoader3.resolve: 426.682 (3) load_resource: 205.071 -->