PHP Lektionen – Lektion 1 – Arbeiten mit Formularen
Im Alltag erhalten wir Informationen über Fernsehen, Radio, Internet oder persönliche Gespräche. Webseiten erhalten ebenfalls Informationen von Benutzern, allerdings in spezieller Form – über Formulare. Formulare kann man mit Umfragebögen oder Antragsformularen bei offiziellen Stellen vergleichen. Obwohl die Auswahl an Formelementen begrenzt ist, erlauben Formulare, vom Benutzer alle nötigen Informationen für die Webseite zu erhalten.
Für einen erfolgreichen Unterricht sollten Sie sich auch HTML-Lektionen zum Thema Formulare ansehen.
Bevor wir mit der ersten Lektion beginnen, erstellen wir das Grundgerüst unserer Anwendung, nämlich eine Klasse, die die Steuerung unserer Webseite übernimmt.
Wir erstellen den Ordner class
und darin die Datei simpleCMS.php
, welche unsere Steuerungsklasse enthält. Außerdem erstellen wir die Datei index.php
, die das Steuerungsobjekt startet. Zusätzlich legen wir einen leeren Ordner messages
sowie die Datei style.css
an. Die Struktur sieht so aus:
class/simpleCMS.php
messages/
index.php
style.css
Der Inhalt von simpleCMS.php
:
<?php class simpleCMS { // Steuerungsklasse public function display_public() { // Methode zum Anzeigen von Nachrichten } public function display_admin() { // Methode zur Eingabe einer Nachricht } public function write($p) { // Methode zum Schreiben einer Nachricht } } ?>
Wir lassen die Methoden vorerst leer und ergänzen sie später.
Datei style.css
:
*{ margin: 0; padding: 0; } body{ font: 12px "Lucida Grande", Sans-Serif; background: #ccc; } #page-wrap{ width: 500px; margin: 50px auto; padding: 20px; background: white; } h1, h2, h3{ font: 28px Georgia, Serif; border-bottom: 1px dotted #ccc; margin: 0 0 10px 0; } .clear{ clear: both; } input[type="text"], textarea{ padding: 3px; border: 1px solid #666; width: 350px; margin: 0 0 15px 0; } input[type="text"]{ font: 28px Georgia, Serif; } textarea { height: 100px; font: 12px "Lucida Grande", Sans-Serif; } label { background: #666; color: white; padding: 2px 6px; } .post{ margin: 0 0 20px 0; }
Datei index.php
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>PHP lernen</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // Klassendatei einbinden $obj = new simpleCMS(); // Steuerungsobjekt erstellen ?> </div> </body> </html>
Wie das funktioniert: Beim Laden der Seite wird index.php ausgeführt, die aktuell noch leer wirkt. Wir binden die Klasse ein und erzeugen ein Objekt. Dieses Objekt besitzt Methoden, die wir je nach Bedarf aufrufen. Den richtigen Moment bestimmen wir später mit Bedingungen via if
.
Bevor wir mit den Dateien weitermachen, klären wir globale Variablen $_GET und $_POST.
Globale Variable $_GET
HTML-Formulare haben das Attribut method („get“ oder „post“). Je nach Methode landen die Formulardaten in $_GET oder $_POST. Beispiel:
<form action="welcome.php" method="get"> Name: <input type="text" name="fname" /> Alter: <input type="text" name="age" /> <input type="submit" /> </form>
Nach Klick auf Submit gelangt man auf:
http://sitename/welcome.php?fname=Peter&age=37
So entsteht die $_GET-Variable – Werte nach dem Fragezeichen:
<?php print $_GET['fname']; print $_GET['age']; ?>
$_GET ist ein Array mit Werten aus der URL. Man kann Daten so zwischen Seiten übertragen, ohne Formulare zu nutzen, z.B. bei:
http://sitename/example.php?number=45
Mit diesem Skript:
<?php print $_GET['number']; ?>
Wird die Zahl aus der URL ausgegeben.
Globale Variable $_POST
$_POST wird in Formularen genauso wie $_GET verwendet. Beispiel:
<form action="welcome.php" method="post"> Name: <input type="text" name="fname" /> Alter: <input type="text" name="age" /> <input type="submit" /> </form>
Nach Klick auf Submit gelangt man auf:
http://sitename/welcome.php
Und mit PHP greift man auf $_POST zu:
<?php print $_POST['fname']; print $_POST['age']; ?>
Der Unterschied zu $_GET: $_POST-Werte stehen nicht in der URL und sind nicht sichtbar, nur PHP kann sie lesen.
Jetzt erstellen wir ein Formular zum Eintragen von Nachrichten. Nachricht hinzufügen via POST, Steuerung via GET:
public function display_admin() { // Eingabemethode $content = ''; $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; // aktuelles Skript $content .= '<label for="title">Name:</label><br />'; $content .= '<input name="title" id="title" type="text" maxlength="150" />'; $content .= '<div class="clear"></div>'; $content .= '<label for="bodytext">Nachricht:</label><br />'; $content .= '<textarea name="bodytext" id="bodytext"></textarea>'; $content .= '<div class="clear"></div>'; $content .= '<input type="submit" value="Nachricht hinzufügen" />'; $content .= '</form>'; $content .= '<p><a href="/index.php">Zurück zur Startseite</a></p>'; return $content; }
Ersetzen Sie die Methode display_admin() mit dem obigen Code. Dieses Formular wird angezeigt, wenn man eine Nachricht hinzufügen will. Standardmäßig werden Nachrichten angezeigt. Wir sagen, dass das Formular angezeigt wird, wenn in der URL admin=1
steht, also:
http://test/index.php?admin=1
Deshalb ändern wir index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>PHP lernen</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // Klassendatei einbinden $obj = new simpleCMS(); // Steuerungsobjekt erstellen if( $_GET['admin'] == 1 ){ // wenn Variable admin=1 in URL print $obj->display_admin(); // Formular anzeigen }else{ print $obj->display_public(); // sonst Nachrichten anzeigen } ?> </div> </body> </html>
Und wir ändern die Anzeige der Nachrichten (ohne Parameter):
public function display_public() { // Methode zum Anzeigen der Nachrichten $content = ''; $content .= '<p><a href="/index.php?admin=1">Nachricht hinzufügen</a></p>'; return $content; }
Wir fügen einen Link zum Formular hinzu.
Wenn beim Laden der Seite Sonderzeichen falsch angezeigt werden, erstellen Sie eine Datei .htaccess
(unter Windows kann das schwierig sein, kopieren Sie ggf. eine bestehende Datei und machen sie leer) mit der Zeile:
AddDefaultCharset utf-8
Damit wird der Server angewiesen, UTF-8 zu verwenden.
Nun haben wir ein Formular, das Daten an eine andere Seite sendet. Um die Funktion zu prüfen, können Sie den Methoden-Parameter des Formulars zu get
ändern:
$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="get">';
Dann werden die Formularwerte an index.php übergeben. Die Verarbeitung der Werte behandeln wir in der nächsten Lektion, wenn wir lernen, mit Dateien zu arbeiten und Daten speichern.