IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP und Formulare



PHP und Formulare

Ein kurzes Tutorial zum Umgang mit Formularen und Steuerelementen.


Autor: Wolfgang Arnberger (Wolfgang)
Datum: 23-01-2002, 19:25:51
Referenzen: http://www.it-studio.net
Schwierigkeit: Anfänger
Ansichten: 19267x
Rating: 5.67 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Formularen sind das tägliche Brot, wenn man mit PHP programmieren möchte und gleichzeitig eine Quelle der Frustration für viele Anfänger. Deswegen möchte ich anhand eines Beispiels zeigen, wie man mit den Elementen eines Formulars arbeiten kann und wie man ein Formular zur Datenerfassung und zum Editieren verwenden kann.

Im oberen Teil sind die verschiedenen Eingabeelemente, deren Inhalt mit dem Button "Abschicken" gespeichert werden kann. Der Link "Neuer Datensatz" spricht für sich selbst. Darunter wird für jeden gespeicherten Datensatz ein Link angezeigt, mit dem man den Datensatz wieder aufrufen und seinen Inhalt im Formular anzeigen bzw. ändern kann.

Dieses Beispiel verwendet eine MySQL-Tabelle mit folgender Struktur:

CREATE TABLE formular (
ID mediumint(8) unsigned NOT NULL auto_increment,
text1 varchar(40),
text2 text,
checkbox1 tinyint(1) unsigned DEFAULT '0' NOT NULL,
checkbox2 tinyint(1) unsigned DEFAULT '0' NOT NULL,
radio tinyint(1) unsigned DEFAULT '0' NOT NULL,
liste varchar(10),
datum timestamp(14),
PRIMARY KEY (ID)
);

Hier beginnt unser Formular.

<FORM METHOD="post" ACTION="formular.php">

Einzeiliges Textfeld
Das erste Element ist ein einzeiliges Eingabefeld. In diesem Fall zeigt es 40 Zeichen an und kann auch nur 40 Zeichen aufnehmen.

Damit man das Feld zur Ein- und Ausgabe verwenden kann, muß man ihm mitteilen, was angezeigt werden soll. Dies geschieht mit VALUE="<? echo $text1 ?>" . Beim ersten Aufruf hat $text1 keinen Wert und das Feld ist leer. Wurde aber ein existierender Datensatz gewählt, wird hier der Text angezeigt.

<INPUT TYPE="text" NAME="text1" SIZE="40" MAXLENGTH="40"
VALUE="<? echo $text1?>">

Ich habe es mir zur Gewohnheit gemacht, die Ausgabe von Daten immer in der oben dargestellten Form zu machen. Die Alternative wäre folgende Form:

<?
echo "<INPUT TYPE=\"text\" NAME=\"text1\" SIZE=\"40\" MAXLENGTH=\"40\"
VALUE=\"$text1\">";
?>

Die erste Darstellung hat zwei wesentliche Vorteile. Erstens ist es wesentlich weniger Schreibarbeit, weil man die Anführungszeichen nicht mit \ maskieren muß. Zweitens kann der HTML-Code in der oben dargestellten Form weiterhin mit Programmen wie z.B. Dreamweaver bearbeitet und geändert werden.

Mehrzeiliges Textfeld
Das mehrzeilige Textfeld wird anders angesprochen, als einzeilige Textfelder. Hier gibt es kein "VALUE ...". Der anzuzeigende Text wird unmittelbar vor </TEXTAREA> angegeben.

<TEXTAREA NAME="text2" WRAP="STANDARD" COLS="40" ROWS="5">
<? echo $text2 ?></TEXTAREA>


Kontrollkästchen
Eine häufige Quelle der Verwirrung sind Kontrollkästchen. Dort steht bei VALUE, welcher Wert mit der Variablen übergeben werden soll, wenn das Kontrollkästchen aktiviert ist. In diesem Fall habe ich 1 angegeben. Wird das Kontrollkästchen nicht angeklickt, wird NULL übergeben.

<?
if($checkbox1==1) {
$chk="CHECKED";
} else {
$chk="";
}
?>
<INPUT TYPE="checkbox" NAME="checkbox1" VALUE="1" <? echo $chk ?>>

Natürlich soll das Kontrollkästchen auch den Zustand anzeigen, der in einem Datensatz gespeichert ist. Oben habe ich eine Möglichkeit dargestellt, wie man mit PHP das Kontrollkästchen ein- bzw. ausschalten kann. Hat $checkbox1 den Wert 1, bedeutet das, daß es angeklickt war, als der Datensatz gespeichert wurde. In diesem Fall muß in die INPUT Zeile das Wort CHECKED eingefügt werden. Dies geschieht durch die Variable $chk, die entweder das Wort "CHECKED" oder "" enthält.

Diese Variante ist aber ziemlich umständlich und erfordert zu viel Schreibarbeit. (Gute Programmierer sind faul)

Deshalb zeige ich bei checkbox2 eine andere Variante, die ich auch im Rest des Programms benützen werde.

<INPUT TYPE="checkbox" NAME="checkbox2"
VALUE="1" <? echo ($checkbox2==1) ? "CHECKED" : "" ?>>

Der Ausdruck <? echo ($checkbox2==1) ? "CHECKED" : "" ?> schaut auf den ersten Blick ein bißchen verwirrend aus, wenn man nicht damit vertraut ist. Die Sache ist aber ganz einfach. Es handelt sich dabei bloß um eine andere Schreibweise für einen if() Block. Zuerst wird der Ausdruck innerhalb der Klammer ausgewertet. Ergibt er den Wert TRUE, wird die Option nach dem Fragezeichen gewählt, andernfalls wird der Wert nach dem Doppelpunkt angezeigt.

Wenn also $checkbox2 den Wert 1 hat, wird "CHECKED" ausgegeben und das Kontrollkästchen wird aktiviert.

Radiobutton
Wieder anders sind Radiobuttons zu behandeln. Sie bieten die Möglichkeit, daß man sie zu Gruppen zusammenfassen kann. Aus dieser Gruppe kann dann immer nur eine Option gewählt werden.

Dazu wird bei NAME immer die selbe Bezeichnung eingetragen. Wichtig ist, daß sich die einzelnen Buttons im VALUE unterscheiden. Je nachdem, welcher Button vom Benützer angeklickt wurde, wird der entsprechende Wert an den Server zurückgeschickt.

Auch bei Radiobuttons wird durch CHECKED angegeben, welcher Button aktiviert wurde.


<INPUT TYPE="radio" NAME="radio" VALUE="1"
<? echo ($radio==1) ? "CHECKED" : ""?>>
<INPUT TYPE="radio" NAME="radio" VALUE="2"
<? echo ($radio==2) ? "CHECKED" : ""?> >
<INPUT TYPE="radio" NAME="radio" VALUE="3"
<? echo ($radio==3) ? "CHECKED" : ""?> >

Auswahlliste
Nun noch die Auswahlliste. Beim ersten Durchgang ist noch keine Option ausgewählt. Wurde aber ein Datensatz aus der Tabelle gelesen, dann enthält er einen Wert aus der Liste und der entsprechende Eintrag wird selektiert.


<SELECT NAME="liste" SIZE="1">
<OPTION VALUE="0">-------------------</OPTION>
<OPTION VALUE="Mo" <? echo ($liste=="Mo") ? "SELECTED":""?>>Montag</OPTION>
<OPTION VALUE="Di" <? echo ($liste=="Di") ? "SELECTED":""?>>Dienstag</OPTION>
<OPTION VALUE="Mi" <? echo ($liste=="Mi") ? "SELECTED":""?>>Mittwoch</OPTION>
<OPTION VALUE="Do" <? echo ($liste=="Do") ? "SELECTED":""?>>Donnerstag</OPTION>
<OPTION VALUE="Fr" <? echo ($liste=="Fr") ? "SELECTED":""?>>Freitag</OPTION>
<OPTION VALUE="Sa" <? echo ($liste=="Sa") ? "SELECTED":""?>>Samstag</OPTION>
<OPTION VALUE="So" <? echo ($liste=="So") ? "SELECTED":""?>>Sonntag</OPTION>
</SELECT>

Timestamp
Gehört zwar nicht unbedingt dazu, ist aber auch ein Problem, mit dem sich Anfänger manchmal tagelang herumquälen. Manchmal möchte man anzeigen, wann ein Datensatz zuletzt bearbeitet wurde. Dafür bietet sich der Datentyp TIMESTAMP in der MySQL Tabelle an. Um den Wert braucht man sich nicht zu kümmern. Er wird automatisch beim Speichern eingesetzt. Will man das Datum und die Uhrzeit dann im Formular anzeigen, muß der Timestamp in seine Bestandteile zerlegt und richtig wieder zusammengesetzt werden. Dafür verwende ich diese Funktion:

<?
function datum($_dat){
// Wandelt timestamp String in Datum und Uhrzeit um.
$datum=intval(substr($_dat,6,2)).".".intval(substr($_dat,4,2)).".".
substr($_dat,0,4)." um ".substr($_dat,8,2).":".substr($_dat,10,2).":".
substr($_dat,12,2);
return $datum;
}
?>

Nun wird nur mehr abgefragt, ob $datum einen Wert hat und ggf. das Datum im Format. dd.mm.yyyy hh:mm:ss angezeigt.

<TD WIDTH="336" VALIGN="TOP"><? echo ($datum) ? datum($datum) : "" ?>

Bevor wir das Formular an den Server zurückschicken, müssen wird noch den Wert für ID in einer Variablen ablegen. Dieser Wert enthält die Datensatznummer, falls ein bestehender Datensatz editiert wurde. Andernfalls bleibt $ID leer. Dadurch kann man unterscheiden, ob die Daten mit UPDATE aktualisiert werden müssen oder eine neuer Datensatz mit INSERT angelegt werden soll.

<INPUT TYPE="hidden" NAME="ID" VALUE="<? echo $ID ?>">
<INPUT TYPE="submit" NAME="Button" VALUE="Abschicken">

Unterhalb des Formulars werden nun noch Links angelegt, mit denen man bestehende Datensätze aufrufen bzw. einen neuen Datensatz anlegen kann. Diese Links könnten auch in einer anderen Datei stehen.

<a href="formular.php">Neuer Datensatz</a>

Um einen neuen Datensatz anzulegen, wird einfach das Formular ohne Angabe einer Datensatznummer aufgerufen. Dadurch bleiben alle Eingabefelder leer.

Bestehende Datensätze werden abgefragt und die ID in die Links als Parameter eingefügt.


<?
$result=mysql_query("select ID from formular");
while($row=mysql_fetch_array($result)) {
$ID=$row["ID"];
echo "<a href="formular.php?ID=$ID">Datensatz $ID </a><BR>";
}

Wenn nun der Button "Abschicken" oder ein Link angeklickt wird, sendet der Browser das Formular mit den Daten zurück an den Server. Dort müssen die Daten noch gespeichert werden. Deshalb müssen wir am Dateianfang noch folgenden Code eingeben.

Ich verwende in meinen Programmen immer eine eigene PHP Datei, mit der ich die Verbindung zur Datenbank herstelle. Das hat den Vorteil, daß ich die Zugangsdaten nur an einer Stelle ändern muß, wenn eine Website installiert wird und außerdem kann ich in jeder Datei die Verbindung ganz einfach herstellen, indem ich bloß die folgende Zeile eingebe:

<? include("datenbank.php"); ?>

Die Datei "datenbank.php" sieht so aus:


<?
// IP oder Host, Username, Passwort
$db=@mysql_connect("localhost","","");
if(!$db) {
die("Keine Verbindung zum SQL Server<BR>");
}
$select=@mysql_select_db("test",$db);
if(!$select) {
die("Datenbank konnte nicht geoeffnet werden<BR>");
}
?>

Zuerst wird geprüft, ob das Formular abgeschickt wurde. Die Variable $Button kommt von der Zeile
<INPUT TYPE="submit" NAME="Button" VALUE="Abschicken"> und enthält den Wert "Abschicken", falls der Button angeklickt wurde. Andernfalls wäre die Variable $Button am Seitenanfang unbekannt und die Auswertung des Ausdrucks ergäbe FALSE.

Wurde der Button angeklickt, dann ist die Bedingung erfüllt und es kann ermittelt werden, ob eine ID vorhanden ist. Fehlt die ID, handelt es sich um einen neuen Datensatz, der mit INSERT eingefügt wird. Andernfalls wird UPDATE ausgeführt.

Möchte man die soeben gespeicherten Daten nicht mehr im Formular anzeigen, muß man die Variable $ID mit unset($ID) zerstören.

<?
if($Button) {
if($ID) {
// Update
mysql_query("update formular set text1='$text1', text2='$text2',
checkbox1='$checkbox1', checkbox2='$checkbox2', radio='$radio',
liste='$liste' where ID=$ID");
} else {
// Insert
mysql_query("insert into formular (text1, text2, checkbox1, checkbox2,
radio, liste) values ('$text1', '$text2', '$checkbox1', '$checkbox2',
'$radio', '$liste')");
}
unset($ID);
}
?>

Wenn ein Link angeklickt wurde, hat $ID weiterhin einen Wert. Dieser Datensatz wird aus der Datenbank abgefragt und sein Inhalt im Formular angezeigt.

<?
if($ID) {
$result=mysql_query("select * from formular where ID=$ID");
while($row=mysql_fetch_array($result)) {
$ID=$row["ID"];
$text1=$row["text1"];
$text2=$row["text2"];
$checkbox1=$row["checkbox1"];
$checkbox2=$row["checkbox2"];
$radio=$row["radio"];
$liste=$row["liste"];
$datum=$row["datum"];
}
}
?>

Download des Beispielcodes unter http://www.it-studio.net/



Alfons Lex
Rookie
Beitrag vom:
14-12-2001, 13:16:38

auswahlliste dynamisch erzeugen

die auswahlliste würde ich ab einer gewissen anzahl von einträgen dynamisch generieren, zB so: somit braucht man nur noch name und value im array nach seinen wünschen eintragen und der rest erledigt sich von slbst.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06243
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1144
Comments: 0