Teil von SELFHTML aktuell Teil von Artikel Teil von PHP

PHP:
Dynamische Auswahllisten

nach unten Andreas Cloos
nach unten Hinweise zum Thema
nach unten Beispiel mit Erläuterungen
nach unten Weiterführende Links

Andreas Cloos

E-Mail: E-Mail andreas.cloos@gmx.de
Homepage-URL: deutschsprachige Seite http://www.cloos.li/

Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!

nach obennach unten

Hinweise zum Thema

In der FAQ der Newsgroup de.comp.lang.php wird ein Ansatz beschrieben, wie mit PHP eine Auswahlliste dynamisch aus den Einträgen einer Datenbanktabelle erstellt werden kann (10.7. Wie kann ich aus einer Datenbanktabelle einen "select" erzeugen?, http://www.php-faq.de/q-formular-select.html). Die dort vorgestellte Lösung 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ügbar ist.

Die Lösung wird anhand eines konkreten Beispiels vorgestellt. Dieses mag ein wenig konstruiert wirken, stammt aber aus einer kleineren Anwendung, die ich entwickelt habe.

Es wird eine Auswahlliste erzeugt, die an zwei verschiedenen Stellen eingesetzt wird. Zunächst um einen Mitarbeiter, der neu in der Datenbank angelegt werden soll, einer Kostenstelle zuzuordnen, ein anderes Mal in einer Änderungsmaske. In dieser Maske soll dem Anwender zunächst angezeigt werden, in welcher Kostenstelle der Mitarbeiter ursprünglich angelegt wurde, dann aber soll er gegebenenfalls eine andere Kostenstelle auswählen können. Da der bisherige Eintrag an erster Stelle der Auswahlliste angezeigt wird, ist er zum einem für den Anwender sichtbar, was weniger irritierend wirken dürfte, als wenn er bei einer Abfrage- und Änderungsoperation einen Eintrag "Bitte auswählen" in der Auswahlliste zu sehen bekommt und es führt nicht zu Fehlern, wenn unbeabsichtigt "Enter" gedrückt wird und versucht wird, eben diesen Text als Eintrag in die Datenbanktabelle zu schreiben.

Die Auswahlliste wird mittels eines Includes erzeugt, der an benötigter Stelle eingebunden wird. Je nachdem ob es sich also um eine Neuanlage handelt oder um eine Änderung, sieht sie aber ganz anders aus.

So nämlich bei einer Neuanlage eines Mitarbeiters in der Datenbank:

Und so sähe die über den gleichen Include erzeugte Auswahlliste bei einer Änderung aus, wenn der Mitarbeiter bisher in der Kostenstelle 122 eingesetzt war:

Zum Verständnis hier noch die der Auswahlliste zugrundeliegende Datenbanktabelle costcenter, die die möglichen Kostenstellen (und eine per auto-increment erzeugte ID) beinhaltet:

+-----------+-----------+
|  cc_id    |  cc_no    |
+-----------+-----------+
|    1      |  121      |
|    2      |  122      |
|    3      |  123      |
+-----------+-----------+

Wenn ein Mitarbeiter geändert werden soll, kann sich der Anwender zunächst eine Liste von Mitarbeiter anzeigen lassen (z. B. alle die "Meier" heißen) und dann per Radiobutton einen Mitarbeiter zur Änderung markieren. Der Radiobutton übermittelt eine Variable radio (weil die Radiobuttons explizit mit <input type=\"radio\" name=\"radio\" ...> benannt worden sind) trägt und übermittelt 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üssel geeignet ist. Wenn ein neuer Mitarbeiter angelegt werden soll, dann wurde natürlich kein Mitarbeiter vorher zur Änderung markiert und die Variable radio ist leer bzw. in PHP-Logik "boole(false)".

Im folgenden Insert- oder Update-Statement kann dann die Kostenstelle als Inhalt der Varibale costcenter, dem Namen der Auswahlliste, in die Datenbanktabelle geschrieben werden.

Das soll hier reichen, weitere Erläuterungen können Sie den Kommentaren im abgebildeten Quelltext entnehmen.

nach obennach unten

Beispiel mit Erläuterungen

Beispiel

<!--%%form_new_user.php%%-->

<?php

 /*Hier steht ganz viel Quelltext*/

 echo "<table>
         <TR><TD>Kostenstelle</TD>
             <TD>"; include ("lov_costcenter.php");   #So würde 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ändert werden soll,
                         #im letzten Fall (if-Bedingung erfüllt) soll die bisherige
                         #Kostenstelle des Mitarbeiters aus der Tablle "user" ermittelt werden.
                         #Der "duser" ist der Schlüssel, über 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ängig 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öffnet.

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ählen</option>";

}

else {                                                                    #neuer Mitarbeiter

 echo "<option value='0'>Bitte auswählen</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ßen der
                                                                          #Auswahlliste

 /*Ergebnis und Link zur Datenbank freigeben, um Ressourcen zu schonen*/

mysql_free_result($result_lov_costcenter); mysql_close($link_lov_costcenter);

?>

nach obennach unten

Weiterführende Links

Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere Möglichkeiten und Details zu erfahren.

deutschsprachige Seite FAQ von de.comp.lang.php
deutschsprachige Seite PHP-FAQ: Select erzeugen
deutschsprachige Seite PHP-FAQ: Radiobuttons verarbeiten
deutschsprachige Seite de.comp.lang.php über Google-Groups
bereichsübergreifende Seite Auswahllisten und Radiobuttons

Teil von SELFHTML aktuell Teil von Artikel Teil von PHP

© 2007 bereichsübergreifende Seite Impressum