| Themen |
|
User registrieren
PHP wird vor allem zur Erstellung dynamischer Webseiten eingesetzt. Eine zentrale Aufgabe besteht darin, mit Hilfe von PHP eine Datenbankverbindung aufzubauen über die Daten aus- und eingelesen werden können. Am Beispiel einer Online-Benutzerregistrierung soll das Vorgehen im Folgenden demonstriert werden. Eine entscheidene Rolle im PHP-Teil spielen das $_POST Array, sowie die PHP-Funktionen mysql_connect, mysql_select_db, mysql_query und mysql_fetch_array. Die Registrierungsdaten werden in der Datenbanktabelle 'user' gespeichert, die sich in der Datenbank 'community' befindet. Die Tabelle enthält zunächst nur die Felder id (Primärschlüssel, wird automatisch inkrementiert), name, vorname und email. Mit Hilfe des Formulars können nun neue Benutzer eingetragen werden. Außerdem wird unterhalb des Formulars eine tabellarische Übersicht aller bisher registrierten Benutzer ausgegeben.
<?php // Datenbankverbindung herstellen mysql_connect("localhost", "root", "pw"); // Datenbank auswählen mysql_select_db("community");
/* * POST-Daten aus Formular abfangen... */ if($_POST['reg']){ $username = $_POST['username']; $name = $_POST['name']; $vorname = $_POST['vorname']; $email = $_POST['email']; $pwd = $_POST['pwd']; $pwd2 = $_POST['pwd2']; if($pwd != $pwd2){ echo "Passwörter stimmen nicht überein!"; } else { $pwd = md5($pwd); $sql = "INSERT INTO user (username, name, vorname, email, passwort) VALUES " . "('$username', '$name', '$vorname', '$email', '$pwd')"; mysql_query($sql); if(mysql_error()){ echo "Fehler beim Eintragen in die Datenbank: " . mysql_error(); } else { echo "Registrierung erfolgreich!"; } } }
?>
<!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"> <head> <title>Registrieren...</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> <style type="text/css"> body {background: #000080; color: #FFFFFF}; fieldset {padding: 1em;} </style> </head> <body> <form action="reg.php" method="post"> <fieldset> <legend>Registrieren</legend> <p> <label for="username">Username:</label><br /> <input type="text" size="40" id="username" name="username" /> </p>
<p> <label for="name">Name:</label><br /> <input type="text" size="40" id="name" name="name" /> </p> <p> <label for="vorname">Vorname:</label><br /> <input type="text" size="30" id="vorname" name="vorname" /> </p> <p> <label for="email">Email:</label><br /> <input type="text" size="30" id="email" name="email" /> </p>
<p> <label for="pwd">Passwort:</label><br /> <input type="password" size="30" id="pwd" name="pwd" /> </p>
<p> <label for="pwd2">Passwort (Wdh.):</label><br /> <input type="password" size="30" id="pwd2" name="pwd2" /> </p> </fieldset> <p> <input type="submit" name="reg" value="Registrieren" /> </p> </form> <table> <tr> <th>ID</th><th>Username</th><th>Name</th> <th>Vorname</th><th>Email</th><th>Passwort</th> </tr> <?php $sql = "SELECT * FROM user"; $result = mysql_query($sql); while($row = mysql_fetch_array($result)){ echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['username']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['vorname']."</td>"; echo "<td>".$row['email']."</td>"; echo "<td>".$row['passwort']."</td>"; echo "</tr>"; } ?> </table>
</body>
</html>
Bemerkungen zum QuelltextGrundsätzliches
- PHP stellt eine (serverseitige) Erweiterung von HTML dar. Sowohl reine PHP-Dateien, als auch HTML-Dateien, die PHP-Teile enthalten, werden mit der Endung .php gespeichert.
- Man beginnt einen PHP-Teil mit <?php und beendet ihn mit ?>. Innerhalb eines (HTML-) Dokumentes kann man beliebig oft und an jeder beliebigen Stelle auf PHP umschalten.
- Nach jeder Anweisung steht wie in Java ein Semikolon.
- Einzeilige Kommentare beginnen mit //, mehrzeilige beginnen mit /* und werden mit */ beschlossen.
Datenbankverbindung
- Im oberen PHP-Teil des Beispielskriptes werden die Formulardaten verarbeitet. Dazu ist es zunächst nötig eine Verbindung zur Datenbank aufzubauen. Dies geschieht mit Hilfe der beiden PHP-Funktionen mysql_connect und mysql_select_db.
mysql_connect bekommt drei Argumente übergeben: 1. den Hostnamen auf dem der Datenbankserver läuft, 2. den MySQL-Benutzernamen, 3. das zugehörige MySQL-Passwort. Mit Hilfe von mysql_select_db wählt man die Datenbank aus, mit der gearbeitet werden soll.
Verarbeitung der Formulardaten
- Die Syntax der bedingten Anweisung if(<Bedingung>){...} ist genau wie in Java.
- Die Formulardaten werden beim Absenden des Formulars in einem Array mit Namen $_POST gespeichert und an den Server übertragen.
Ein Array ist eine Variable, die mehrere Werte aufnehmen kann. Der Zugriff auf einzelne Werte innerhalb des Arrays erfolgt mit Hilfe von Schlüsseln. Im Falle von $_POST fungieren die Namen der Formularfelder als Schlüssel. Zum Zugriff auf einen Wert an einer bestimmten Schlüsselposition, notiert man den Namen des Schlüssels in Anführungszeichen oder Hochkommata und hängt ihn in eckigen Klammern an den Namen des Arrays (hier: $_POST). Arrays wie $_POST, die Zeichenketten als Schlüssel verwenden, werden assoziative Arrays genannt (gibt es in Java so nicht!). Beispiel: Mit $_POST['name'] erhält man mit PHP Zugriff auf den Wert an der mit 'name' gekennzeichneten Stelle im Array, also dem Wert, den der Absender des Formulars im Formularfeld 'name' eingetragen hatte.
- Unsere Datei enthält sowohl das Registrierungformular selbst, als auch die (PHP-)Anweisungen zur Weiterverarbeitung des abgeschickten Formulars. Wird die Datei im Webbrowser per URL aufgerufen, kann noch keine Datenverarbeitung stattfinden, weil das Formular noch nicht ausgefüllt worden ist. Daten müssen nur nach Betätigen des Submit-Buttons verarbeitet werden. Mit if($_POST['reg']) wird genau dieser Fall geprüft. Ein Schlüssel 'reg' gibt es im POST-Array nur, wenn das Formular abgeschickt wurde. Dann ist die if-Bedingung wahr und der if-Block wird abgearbeitet, sonst eben nicht.
- Die Werte aus dem POST-Array werden in lokale Variablen $name, $vorname und $email kopiert. Alle Variablennamen in PHP müssen mit einem $-Zeichen beginnen. Der Zuweisungsoperator = funktioniert wie in Java: Der Wert auf der rechten Seite des Operators wird der Variablen auf der linken Seite als neuer Wert zugewiesen. Variablen müssen nicht - wie in Java - deklariert werden. Sie können ohne exlizite Angabe ihres Typs sofort benutzt werden.
- Der Variable $sql wird eine MySQL-Anfrage als Wert zugewiesen. Die MySQL-Anfrage sorgt dafür, dass ein neuer Datensatz in die Tabelle 'user' eingefügt wird. Als Werte werden die Formulardaten (zwischengespeichert in $name, $vorname und $email) eingetragen.
- Um eine SQL-Anweisung auch wirklich in der Datenbank auszuführen, benötigt man die Funktion mysql_query. Als Argument übergibt man einfach die in $sql gespeicherte Anfrage.
Formular
- Als Wert für das action-Attribut muss der Name der Skriptdatei angegeben sein. Meine Datei heisst offensichtlich reg.php. Grundsätzlich muss hier die Datei angegeben werden, die die Formulardaten weiter verarbeiten soll.
- Alle Formularfelder müssen Namen haben, damit ihre Werte später über das $_POST-Array erreichbar sind.
Auslesen der Datenbanktabelle
- Die Daten sollen tabellarisch angezeigt werden. Noch bevor ein Umschalten auf PHP nötig wird, können wir die Tabelle einleiten und die Zellen mit den Spaltenüberschriften definieren.
- Um alle Daten der Tabelle 'user' auszulesen brauchen wir eine neue MySQL-Anweisung die wiederum in $sql zwischengespeichert wird.
- Zur Übermittlung der in $sql gespeicherten Anfrage benötigen wir wieder die Funktion mysql_query. Unsere SELECT-Anfrage liefert allersings diesmal ein Ergebnis, das wir uns in der Variable $result merken. Das Ergebnis besteht in der Regel aus einer Vielzahl von Datensätzen. $result ist sozusagen ein "Zeiger" auf das Abfrageergebnis.
- Um die einzelnen Tupel aus dem Abfrageergebnis zu extrahieren benutzen wir die Funktion mysql_fetch_array. Diese Funktion liefert bei jedem Aufrufen den nächsten Datensatz aus dem Abfrageergebnis. In Verbindung mit der while-Schleife holen wir solange neue Datensätze ($row) aus dem Abfrageergebnis ($result), bis keine weiteren Datensätze mehr da sind. In diesem Fall bricht die Schleife ab. Innerhalb des Schleifenblocks enthält $row also jeweils den aktuellen Datensatz in Form eines weiteren assoziativen Arrays. Schlüssel dieses Arrays sind die Spaltennamen aus der Datenbanktabelle: $row['id'] enthält also zum Beispiel die id des aktuellen Datensatzes.
- Die Syntax der while-Schleife ist genau wie in Java.
- Wir möchten die Daten nun (aus dem PHP-Teil heraus) auf unserer Webseite ausgeben. Dazu benötigt man den Befehl echo. Mit echo lassen sich sowohl Zeichenketten als auch Variablenwerte ausgeben. Möchte man beides wie hier verbinden, trennt man Zeichenkette von Variablenwert mit einem Punkt.
» drucken: pdf | html
|