phpBuddy

Code-Schnipsel

Jeder Programmierer sammelt im Laufe der Jahre Dutzende nützliche Funktionen, Klassen und sonstige Snipets. Hier gibt es einige nützliche Goodies, die jeder frei in seine eigenen Projekte einbauen kann.
Reinschauen lohnt sich!

Sie sind hier: Startseite Formulare verarbeiten (Grundlagen)
Formulare und PHP - Teil 1 (Grundlagen)
Beitragsseiten
Formulare und PHP - Teil 1 (Grundlagen)
Formulareingaben in DB schreiben
Aus der DB lesen und ausgeben
Fazit und Linkübersicht
Alle Seiten

Vorwort

Da immer wieder Fragen auftauchen wie man Formulardaten in eine Datenbank schreiben und später wieder auslesen kann habe ich mich dazu entschlossen dieses kleine Anfängertutorial zu schreiben. Damit ein Benutzer mit einer Seite interagieren kann ist es nötig das eine Eingabemöglichkeit geschaffen wird: ein Formular. So ziemlich jede Webseite hat heutzutage mindestens ein Formular; sei es ein Gästebuch, Newsletter, Kontaktformular oder etwas anderes. Das beste Formular nutzt aber nichts, wenn man die eingegebenen Daten nicht verarbeiten kann und genau hier hilft uns eine Scriptsprache wie z.B. PHP. Wenn die Daten dauerhaft gespeichert werden müssen bietet sich eine Datenbank wie etwa MySQL an.

In diesem Tutorial schauen wir uns zunächst einmal an mit welchen Formular-Elemente wir es zu tun bekommen können. Wie wir die Eingaben auswerten, verarbeiten, speichern und schließlich wieder ausgeben können. Das hier gezeigt soll nur als Grundlage dienen und ist keinesfalls als komplett anzusehen, von daher ist es auch nicht 1:1 in der Praxis anwendbar, weil ich aus Platzgründen sehr wichtige Dinge wie Validierung der Eingaben weggelassen habe!

Auf Submit geklickt und jetzt?

Schauen wir uns mal ein Formular an das die wichtigsten Elemente beinhaltet.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formular-Elemente</title>
</head>
<body>
<hr />
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="formular" id="formular">
Textfeld: <input type="text" name="textfeld" id="textfeld" value="Das ist ein Textfeld" /><br />
Textarea: <textarea name="textarea" id="textarea" cols="30" rows="2">Das ist ein Textbereich</textarea><br />
Checkbox: <input type="checkbox" name="checkbox" id="checkbox" value="Das ist eine Checkbox" /><br />
Radiobutton: <input type="radio" name="radio" id="radiobutton" value="Das ist ein Radiobutton" /><br />
Radiobutton-Gruppe: <input type="radio" name="radiobuttongruppe" id="radiobuttongruppe_1" value="ja" /> Ja <input type="radio" name="radiobuttongruppe" id="radiobuttongruppe_2" value="nein" />Nein<br />
Selectbox: <select name="selectbox" id="selectbox"><option>Das ist der Wert einer Selectbox</option></select><br />
SubmitButton: <input type="submit" name="submitbutton" id="submitbutton" value="Senden" />
</form>
</body>
</html>

Wer hier schon Probleme hat zu verstehen was er vor sich sieht, der sollte an dieser Stelle abbrechen und erst einmal HTML Grundlagen pauken!
Die für uns wichtigen Informationen stecken im name-Attribut. Hierfür sollten unbedingt aussagekräftige Ausdrücke benutzt werden, ohne Leerzeichen, Umlaute oder anführende Zahlen. Dieses name-Attribut stellt nämlich nach abschicken des Formulars ein Array-Schlüssel dar mit dem wir in PHP weiterarbeiten werden.

Nachdem man "Submit" gedrückt hat, kommt bei PHP ein Superglobales Array an das sich $_POST nennt - natürlich nur, wenn die method-Eigenschaft im Form-Tag auch "post" war. In diesem $_POST Array befinden sich nun verschiedene Schlüssel und zwar für jedes Form-Element einer, das den Namen des name-Attributs trägt. So wird aus dem Form-Element

<input type="text" name="textfeld" id="textfeld" />

nach abschicken des Formulars für PHP ein

$_POST['textfeld']

Hier wird auch deutlich wieso ein name-Attribut wie etwa "2. Vorname" fatal wäre, denn daraus würde in PHP ein $_POST['2. Vorname'] werden, wodurch Fehler vorprogrammiert sind!

Am besten läßt man sich einmal anzeigen was nach abschicken eines Formulars bei PHP ankommt, dazu benutzen wir dieses Script (abspeichern als z.B. formelemente.php)

<?php
if (isset( $_POST['submitbutton'] ))
{
    echo "<pre>" .print_r( $_POST, true ). "</pre>";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formular-Elemente</title>
</head>
<body>
<hr />
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="formular" id="formular">
Textfeld: <input type="text" name="textfeld" id="textfeld" value="Das ist ein Textfeld" /><br />
Textarea: <textarea name="textarea" id="textarea" cols="30" rows="2">Das ist ein Textbereich</textarea><br />
Checkbox: <input type="checkbox" name="checkbox" id="checkbox" value="Das ist eine Checkbox" /><br />
Radiobutton: <input type="radio" name="radio" id="radiobutton" value="Das ist ein Radiobutton" /><br />
Radiobutton-Gruppe: <input type="radio" name="radiobuttongruppe" id="radiobuttongruppe_1" value="ja" /> Ja <input type="radio" name="radiobuttongruppe" id="radiobuttongruppe_2" value="nein" />Nein<br />
Selectbox: <select name="selectbox" id="selectbox"><option>Das ist der Wert einer Selectbox</option></select><br />
SubmitButton: <input type="submit" name="submitbutton" id="submitbutton" value="Senden" />
</form>
</body>
</html>

Wer dieses Formular so wie es ist abschickt wird etwas seltsames bemerken. Obwohl es sich hier um 7 Formular-Elemente handelt kommen bei PHP nur 4 (inklusive Submitbutton) an. Hoppla, ist das Formular fehlerhaft? Keineswegs! Manche Elemente haben die Eigenart nicht übermittelt zu werden, wenn sie nicht ausgefüllt wurden. Das mag sich im ersten Moment schlecht anhören, kann man aber super für sich benutzen. Wie das geht zeige ich weiter unten, wenn wir uns daran machen in die DB zu schreiben.

Inhalte werden durch das value-Attribut vorgegeben, bzw bekommt man durch die Benutzereingaben. Elemente wie Checkbox oder Radiobutton übermitteln ein "on" wenn sie angeklickt wurden und kein value-Attribut gesetzt wurde. Das ist wichtig zu wissen damit wir auswerten können welches Element in welchem Zustand übermittelt wurde.
Ein weiteres sehr wichtiges Formular-Element ist das hidden-Field (verstecktes Feld). Es verhält sich exakt wie ein Textfeld, ausser das es einen Wert vorgegeben bekommt und nicht sichtbar auf der Seite ist. Das braucht man z.B. um ID's oder andere Werte unsichtbar zu übergeben.

Einfach ein wenig mit dem Script von oben testen, mehrfach absenden und dabei die Werte des Formulars ändern, dabei darauf achten was PHP ausgibt.

So, wenn die Zusammenhänge zwischen name-Attribut und PHP so weit verstanden wurde geht's weiter mit...