Webdesign Guide – User-Modul: Registrieren
Da bei einer Webanwendung meist der Benutzer im Vordergrund steht wollen wir uns auch extra mit Modulen zum Anlegen und Verwalten von Benutzern beschäftigen. Folgende Module werden in den nächsten Teilen realisiert:
- Registrieren – Ohne Registrierung, keine Benutzer, zumindest keine validen. Wir wollen aber valide Benutzer, darum verlangen wir vom User eine gültige Emailadresse (an die ein Validierungskey geschickt wird). Wir werden zum ersten mal mit HTML-Quickform arbeiten (und sehen wie mächtig diese PEAR-Klasse ist) und Gäste unserer Webanwendung werden nun die Möglichkeit haben, sich zu registrieren und einen Account anzulegen
- Login/Logout – Ist der Account erstmal angelegt und aktiviert muss der User auch die Möglichkeit haben sich in diesen einzuloggen und die speziellen Features nutzen können, die ihm von unserer Webanwendung geboten werden. In diesem Modul verwenden wir die PEAR-Klasse “Auth“, mit ihr können wir einfach Sessions erzeugen und auf jeder Seite identifizieren ob der User noch eingeloggt ist. Zu jedem vernünftigen Login gehört selbstverständlich auch ein Logout.
- Profil – Je nachdem wohin sich die eigene Webanwendung später orientieren soll, empfiehlt es sich dem Nutzer die Möglichkeit zu geben, seine Profildaten anzupassen und zu ergänzen, davon leben gerade Web2.0 Anwendungen. Da wir hier aber völlig wertfrei programmieren soll der Benutzer in unserem Profil lediglich die Möglichkeit haben sein Passwort zu ändern. Dies hat zwei Gründe:
- Dem User gefällt sein bei der Registrierung vergebenes Passwort nicht mehr (oder er hat es ausversehen einer Person verraten, die besser nichts davon wissen sollte)
- Oder der User hat sein Passwort verloren/vergessen und beantragt über die Funktion “Passwort vergessen” ein neues, dieses wird dann vom System automatisch erstellt und ist für den Benutzer meist zu kryptisch (wenn auch sicherer als die meisten Passwörter), dann kann er in seinem Profil dieses Passwort ändern
- Kontaktformular – das hat nur sekundär etwas mit dem User zu tun, aber bislang bieten wir diesem noch keine Möglichkeit mit uns, dem Webmaster, Kontakt aufzunehmen. Über ein Kontaktformular werden unsere registrierten Besucher, aber auch alle anderen Gäste unserer Webanwendung, die Möglichkeit haben, ohne ihr eigenes Email-Programm zu öffnen, mit uns in Kontakt zu treten und dafür müssen wir unsere eigene Emailadresse nicht mal öffentlich machen (Hinweis: die eigene Emailadresse muss natürlich im Impressum stehen, aber dort kann man sie dann leicht vor Spammern schützen, indem man sie als Bild ausgibt)
Die Datenbankverbindung abspeichern
Bevor wir uns dem “Registrieren”-Modul widmen, müssen wir erst noch etwas Code in die Datei “config.php” packen.
<?php
define('DB_SYSTEM_1', 'mysql://username:password@localhost/datenbankname');
define('EMAIL_CONTACT', 'kontakt@domain.de');
?>
Was macht der Code? Ganz einfach: Bei “define” erzeugen wir eine Konstante, die wir in all unserem Quellcode verwenden können und PHP ersetzt dann überall wo wir die Konstante verwenden, diese mit ihrem Inhalt. In unserem Fall erzeugen wir als erstes die Konstante “DB_SYSTEM_1″ und speichern dort unsere Datenbankverbindung rein. Nun können wir in all unseren Dateien die Konstante “DB_SYSTEM_1″ verwenden und sollten wir irgendwann mal entweder die Datenbank wechseln oder das Passwort unserer Datenbank ändern, können wir das an einer Stelle machen und für die gesamte Webanwendung übernehmen. Nun aber zu den Verbindungseinstellungen:
mysql://username:password@localhost/datenbankname
- mysql – dies steht für den Typ der Datenbank, da wir die DB-Klasse von PEAR verwenden wird es uns ermöglicht auf jeden Typ von Datenbank zuzugreifen. Wir können also Problemlos später noch auf eine Oracle-Datenbank wechseln und müssen dies nur an dieser Stelle anpassen. Da wir hier aber von einer MySQL-Datenbank ausgehen, kann man dies so stehen lassen
- username – dies ersetzt ihr bitte durch euren Loginnamen, mit dem ihr euch in eure Datenbank einloggt
- password – dürfte klar sein, das Passwort mit dem ihr euch zu eurer Datenbank verbindet
- localhost – meist könnt ihr dies unverändert stehen lassen, nämlich dann wenn sich die Datenbank, die ihr verwendet, direkt auf eurem Server befindet. Ihr fragt euch ob sich die Datenbank auf eurem Server befindet? In diesem Fall könnt ihr getrost “localhost” stehen lassen ;)
- datenbankname – entweder habt ihr beim anlegen eurer Datenbank selbst einen Namen für diese vergeben, oder euer Hoster hat das automatisch gemacht. Hier soll nicht der Loginname hin, aber oft sind Loginname und Datenbankname identisch
Der Inhalt der Konstanten “EMAIL_CONTACT” muss auch noch angepasst werden, ersetzt “domain” einfach durch euren jeweiligen Domainnamen, denkt aber auch daran das ihr die Emailadresse “kontakt@euer_domainname.de” auf eurem Server erzeugt.
Programmierung der Module
Ich teile jedes Modul in zwei Bereiche: PHP und Smarty. Erst werde ich den kompletten Quellcode ausgeben und ihn dann erläutern.
Modul – Registrieren – PHP
Als erstes wechseln wir in den Ordner “includes” und erzeugen dort die Datei “register.php“. In diese packen wir dann den folgenden Code:
/* START – Quellcode register.php */
<?php
require_once 'HTML/QuickForm.php';
require_once 'HTML/QuickForm/Renderer/ArraySmarty.php';
require_once 'smarty/libs/Smarty.class.php';
require_once 'DB/DB.php';
require_once 'includes/config.php';
//Prüfe ob Username schon existiert
function check_db_user($username)
{
$dbh = DB::connect(DB_SYSTEM_1);
$res =& $dbh->query("SELECT username FROM user WHERE username = '".$username."'");
$dbh->disconnect();
if($res->numRows() >= 1){
return false;
}else{
return true;
}
}
//Prüfe ob Email schon existiert
function check_db_email($email)
{
$dbh = DB::connect(DB_SYSTEM_1);
$res =& $dbh->query("SELECT email FROM user WHERE email = '".$email."'");
$dbh->disconnect();
if($res->numRows() >= 1){
return false;
}else{
return true;
}
}
//Erzeuge den Validierungscode
function validation_key($length=20){
$randstr='';
srand((double)microtime()*1000000);
$chars = array ( 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0');
for ($rand = 0; $rand <= $length; $rand++)
{
$random = rand(0, count($chars) -1);
$randstr .= $chars[$random];
}
return $randstr;
}
//Prüfe die Registrierungsdaten und erzeuge den User in der Datenbank
function process_data_regForm($values) {
$val_key = validation_key();
$recipients = $values[email];
$md5_user_pass = md5($values[pass]);
$dbh = DB::connect(DB_SYSTEM_1);
$time_value = time();
$res =& $dbh->query("INSERT INTO user (username, pass, email, regdate, activation_key) VALUES ('$values[username]', '$md5_user_pass', '$values[email]', '$time_value', '$val_key')");
$dbh->disconnect();
require_once 'Mail/Mail.php';
$activation_link = 'http://domain.de/index.php?action=register&activate_user='.$val_key;
$headers['From'] = EMAIL_CONTACT;
$headers['To'] = $recipients;
$headers['Subject'] = 'Hier steht der Titel mit dem die Nachricht des Nutzers verschickt wird';
$body = 'Dies ist dein Aktivierungslink: '.$activation_link;
// Create the mail object using the Mail::factory method and send it
$mail_object =& Mail::factory('mail');
$mail_object->send($recipients, $headers, $body);
//this has to be changed
header("Location: /thanks/reg");
} //ENDE - function "process_data_regForm"
//Prüfe ob der User seinen Account aktivieren möchte
if(isset($_GET['activate_user'])){
$user_activation_key = $_GET[activate_user];
$sql = 'SELECT * FROM user WHERE activation_key = ?';
$dbh = DB::connect(DB_SYSTEM_1);
$res =& $dbh->getOne($sql, $user_activation_key);
//check if activation key is in database
//user_activation_key is not allowed to be 0, or all users get deleted
if(($res != '') AND ($user_activation_key != '0')){
$user_activation =& $dbh->query("UPDATE user SET activation_key = '0', active = '1' WHERE id_user = $res");
//thank user for his/her registration
header("Location: /thanks/reg_thx");
}
else {
//give user notice about that he is allready activated
header("Location: /thanks/reg_thx_stop");
}
$dbh->disconnect();
}
else {
//Hier erzeugen wir die Elemente für das Registrierungsformular
$regForm = new HTML_QuickForm('regForm','post','http://domain.de/register','','',true);
$regForm->applyFilter('__ALL__','trim');
$regForm->addElement('text', 'username', 'Benutzername');
$regForm->addElement('password', 'pass', 'Passwort eingeben');
$regForm->addElement('password', 'pass2', 'Passwort wiederholen');
$regForm->addElement('text', 'email', 'Email');
$regForm->addElement('submit', 'btn_registration', 'Registrieren');
$regForm->addRule('username', 'Bitte Benutzername eingeben', 'required');
$regForm->addRule('pass', 'Bitte Passwort eingeben', 'required');
$regForm->addRule('pass2', 'Bitte Passwort eingeben', 'required');
$regForm->addRule('email', 'Bitte Emailadresse eingeben', 'required');
$regForm->addRule('username', 'Mindestlänge beträgt 3 Zeichen', 'minlength', 3);
$regForm->addRule('username', 'Maximale Länge beträgt 40 Zeichen', 'maxlength', 40);
$regForm->addRule('pass', 'Mindestlänge beträgt 5 Zeichen', 'minlength', 5);
$regForm->addRule('pass', 'Maximale Länge beträgt 20 Zeichen', 'maxlength', 20);
$regForm->addRule('email', 'Maximale Länge beträgt 60 Zeichen', 'maxlength', 60);
//die beiden Passwörter müssen übereinstimmen
$regForm->addRule(array('pass', 'pass2'), 'Die eingegebenen Passwörter müssen übereinstimmen', 'compare', null);
$regForm->addRule('email', 'Dies ist keine gültige Emailadresse', 'email');
//Hier werden die Funktionen aufgerufen und geprüft ob das eingebene Passwort oder der Benutzername schon existieren
$regForm->registerRule('check_db_user', 'callback', 'check_db_user');
$regForm->addRule('username', 'Dieser Benutzername wird schon verwendet', 'check_db_user');
$regForm->registerRule('check_db_email', 'callback', 'check_db_email');
$regForm->addRule('email', 'Diese Emailadresse existiert schon', 'check_db_email');
//Validiere das Formular
if ($regForm->validate()) {
$regForm->freeze();
$regForm->process('process_data_regForm');
}
}
// DIESER PART GIBT DIE WERTE AN DIE SMARTY-ENGINE WEITER
// Erzeuge das "Renderer"-Objekt
$regFormRenderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$regFormRenderer->setErrorTemplate(
'{if $error}
<span style="color: red; font-size: 0.7em;">{$error}</span><br />
{/if}
{$html}'
);
$regForm->setRequiredNote(
'<font color="red" size="2">
*
</font>
<font color="blue" size="2">
Du hast ein Pflichtfeld vergessen auszufüllen
</font>');
$regForm->accept($regFormRenderer);
$smarty->assign('regForm_data', $regFormRenderer->toArray());
?>
/* ENDE – Quellcode register.php */
Register.php – Codeerklärung
Unsere Register.php erfüllt folgende Dinge:
- User kann sich registrieren und damit einen Account erstellen
- Register.php schickt an registrierten User eine Email mit einem Aktivierungslink
- Wenn der User den Aktivierungslink anklickt wird sein Account aktiviert (läuft auch über die register.php)
- zudem wird noch geprüft ob der eingetragene Username oder die eingetragene Email schon verwendet wird
Code – Die drei Zusatzfunktionen
//Prüfe ob Username schon existiert
function check_db_user($username)
{
$dbh = DB::connect(DB_SYSTEM_1);
$res =& $dbh->query("SELECT username FROM user WHERE username = '".$username."'");
$dbh->disconnect();
if($res->numRows() >= 1){
return false;
}else{
return true;
}
}
//Prüfe ob Email schon existiert
function check_db_email($email)
{
$dbh = DB::connect(DB_SYSTEM_1);
$res =& $dbh->query("SELECT email FROM user WHERE email = '".$email."'");
$dbh->disconnect();
if($res->numRows() >= 1){
return false;
}else{
return true;
}
}
//Erzeuge den Validierungscode
function validation_key($length=20){
$randstr='';
srand((double)microtime()*1000000);
$chars = array ( 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0');
for ($rand = 0; $rand <= $length; $rand++)
{
$random = rand(0, count($chars) -1);
$randstr .= $chars[$random];
}
return $randstr;
}
Erklärung – Verarbeitung des Registrierungs-Formular
Hier wird einfach nur geprüft ob der eingegebene Benutzername oder die Emailadresse schon existieren, ist dies der Fall wird “false” als Wert zurückgegeben und unser Formular kann dann mit einem Hinweis an den Besucher reagieren.
Die Funktion “validation_key” macht nichts anderes als im default-Modus einen Zufallsstring mit 20 Zeichen zu erzeugen, es gibt hier sicherlich geschicktere Möglichkeiten einen Zufallsstring zu erzeugen, aber man sollte es mit der Optimierung auch nicht übertreiben und die Zeit in die wichtigen Parts stecken.
Code – Verarbeitung des Registrierungs-Formular
/Prüfe die Registrierungsdaten und erzeuge den User in der Datenbank
function process_data_regForm($values) {
$val_key = validation_key();
$recipients = $values[email];
$md5_user_pass = md5($values[pass]);
$dbh = DB::connect(DB_SYSTEM_1);
$time_value = time();
$res =& $dbh->query("INSERT INTO user (username, pass, email, regdate, activation_key) VALUES ('$values[username]', '$md5_user_pass', '$values[email]', '$time_value', '$val_key')");
$dbh->disconnect();
require_once 'Mail/Mail.php';
$activation_link = 'http://domain.de/index.php?action=register&activate_user='.$val_key;
$headers['From'] = EMAIL_CONTACT;
$headers['To'] = $recipients;
$headers['Subject'] = 'Hier steht der Titel mit dem die Nachricht des Nutzers verschickt wird';
$body = 'Dies ist dein Aktivierungslink: '.$activation_link;
// Create the mail object using the Mail::factory method and send it
$mail_object =& Mail::factory('mail');
$mail_object->send($recipients, $headers, $body);
//this has to be changed
header("Location: /thanks/reg");
} //ENDE - function "process_data_regForm"
Erklärung – Verarbeitung des Registrierungs-Formular
Was geschieht hier? Diese Funktion bekommt die Angaben des Benutzers zugeschickt und validiert dann die eingegebenen Werte und bei erfolgreicher Prüfung wird der neue Benutzer angelegt. Dann schicken wir dem gerade erzeugten Benutzer an die Emailadresse, die er bei seiner Registrierung angegeben hat, einen Aktivierungslink um die Echtheit der Emailadresse zu validieren. Ist dies alles erfolgt werden wir der Benutzer mit header(“Location: /thanks/reg”); auf eine Dankesseite weitergeleitet (die aber bislang noch nicht existiert und einen Fehler verursacht.
Beim Aktivierungslink muss natürlich noch “domain.de” durch die eigene Domain ersetzt werden.
Code – User aktiviert seinen Account
//Prüfe ob der User seinen Account aktivieren möchte
if(isset($_GET['activate_user'])){
$user_activation_key = $_GET[activate_user];
$sql = 'SELECT * FROM user WHERE activation_key = ?';
$dbh = DB::connect(DB_SYSTEM_1);
$res =& $dbh->getOne($sql, $user_activation_key);
//check if activation key is in database
//user_activation_key is not allowed to be 0, or all users get deleted
if(($res != '') AND ($user_activation_key != '0')){
$user_activation =& $dbh->query("UPDATE user SET activation_key = '0', active = '1' WHERE id_user = $res");
//thank user for his/her registration
header("Location: /thanks/reg_thx");
}
else {
//give user notice about that he is allready activated
header("Location: /thanks/reg_thx_stop");
}
$dbh->disconnect();
}
else {
Erklärung – User aktiviert seinen Account
Zugegeben, diesen Part hätte ich deutlicher und verständlicher abtrennen können, ich hoffe man kann ihn trotzdem erschließen. Was hier passiert ist eine einfache If-Abfrage die prüft, wurde das Flag “activate_user” gesetzt, also will sich der User aktvieren, oder ist dies nicht der Fall, dann heißt es einfach “zeige dem Besucher das Registrierungsformular an” (dieser Code-Part kommt gleich). Was geschieht bei der Aktivierung? Der User klickt den Aktivierungslink in seiner EMail an und übermittelt diesen an das Script. Mit diesem Wert wird dann geprüft ob überhaupt ein User in der Datenbank existiert, der aktiviert werden muss. Ist dies der Fall wird er aktiviert und der Besucher wird auf die Dankesseite verwiesen, wurde der User allerdings schon aktiviert wird der Besucher auf eine Webseite weitergeleitet die ihn auch darauf aufmerksam macht.
Code – Formular erzeugen und Regeln festlegen
//Hier erzeugen wir die Elemente für das Registrierungsformular
$regForm = new HTML_QuickForm('regForm','post','http://domain.de/register','','',true);
$regForm->applyFilter('__ALL__','trim');
$regForm->addElement('text', 'username', 'Benutzername');
$regForm->addElement('password', 'pass', 'Passwort eingeben');
$regForm->addElement('password', 'pass2', 'Passwort wiederholen');
$regForm->addElement('text', 'email', 'Email');
$regForm->addElement('submit', 'btn_registration', 'Registrieren');
$regForm->addRule('username', 'Bitte Benutzername eingeben', 'required');
$regForm->addRule('pass', 'Bitte Passwort eingeben', 'required');
$regForm->addRule('pass2', 'Bitte Passwort eingeben', 'required');
$regForm->addRule('email', 'Bitte Emailadresse eingeben', 'required');
$regForm->addRule('username', 'Mindestlänge beträgt 3 Zeichen', 'minlength', 3);
$regForm->addRule('username', 'Maximale Länge beträgt 40 Zeichen', 'maxlength', 40);
$regForm->addRule('pass', 'Mindestlänge beträgt 5 Zeichen', 'minlength', 5);
$regForm->addRule('pass', 'Maximale Länge beträgt 20 Zeichen', 'maxlength', 20);
$regForm->addRule('email', 'Maximale Länge beträgt 60 Zeichen', 'maxlength', 60);
//die beiden Passwörter müssen übereinstimmen
$regForm->addRule(array('pass', 'pass2'), 'Die eingegebenen Passwörter müssen übereinstimmen', 'compare', null);
$regForm->addRule('email', 'Dies ist keine gültige Emailadresse', 'email');
//Hier werden die Funktionen aufgerufen und geprüft ob das eingebene Passwort oder der Benutzername schon existieren
$regForm->registerRule('check_db_user', 'callback', 'check_db_user');
$regForm->addRule('username', 'Dieser Benutzername wird schon verwendet', 'check_db_user');
$regForm->registerRule('check_db_email', 'callback', 'check_db_email');
$regForm->addRule('email', 'Diese Emailadresse existiert schon', 'check_db_email');
//Validiere das Formular
if ($regForm->validate()) {
$regForm->freeze();
$regForm->process('process_data_regForm');
}
}
Erklärung – Formular erzeugen und Regeln festlegen
Endlich der Code für das eigentliche Formular! Und dieses hat es in sich, dank PEAR. Dabei ist es wirklich einfach zu verstehen und einzusetzen, wenn man erstmal verstanden hat wie die Arbeitsweise von Quickform ist. Als erstes wird eine Instanz der Klasse “HTML_QuickForm” angelegt, quasi ein Behälter in den wir nachher alle unsere Einstellungen, Werte, Bezeichnungen und Regeln für unser Formular packen (ersetzt “domain.de” durch eure eigene Domain). Dann geht es auch schon los:
- $regForm->applyFilter(‘__ALL__’,'trim’); – applFilter ordnet einen Filter auf ein Formular-Element zu, da wir hier die Einstellung “__ALL__” verwenden, gilt der Filter für alle Elemente des Formulars. “Trim” ist eine PHP-Funktion die führende Leerzeichen rauswirft, das sollte man in der Regel machen um keine Konflikte beim Login zu erhalten (wenn versehentlich der Benutzername bei der Registrierung mit führendem Leerzeichen eingegeben wird)
- $regForm->addElement(‘text’, ‘username’, ‘Benutzername’); – mit addElement weist man dem Formular ein weiteres Element hinzu, um welchen Typ es sich dabei handelt, zeigt jeweils der erste Parameter, der zweite Parameter ist später der Name mit dem das Element in Smarty angesprochen werden kann und der dritte ist dann noch lediglich die Bezeichnung für das Element (die Beschriftung)
- $regForm->addRule(‘username’, ‘Bitte Benutzername eingeben’, ‘required’); – mit “addRule” lassen sich Regeln für einzelne Elemente festlegen, in diesem Fall sagt man das das Feld “username” aufjedenfall ausgefüllt sein muss. Zusätzlich sollte man die Länge der Eingabe einschränken, also das der Benutzername nicht zu kurz und nicht zu lang ist.
- $regForm->addRule(array(‘pass’, ‘pass2′), ‘Die eingegebenen Passwörter müssen übereinstimmen’, ‘compare’, null); – Prüft ob zwei Felder den gleichen Wert haben, wichtig für die Passwort-Eingabe
- $regForm->addRule(‘email’, ‘Dies ist keine gültige Emailadresse’, ‘email’); – mir ist bislang keine Methode begegnet mit der es einfacher ist, die Struktur einer Emailadresse zu prüfen
- $regForm->registerRule(‘check_db_user’, ‘callback’, ‘check_db_user’);
$regForm->addRule(‘username’, ‘Dieser Benutzername wird schon verwendet’, ‘check_db_user’); – weiter oben wurde darauf hingewiesen, das der eingegebene Benutzername noch nicht existieren darf, dies wird hiermit geprüft. Die Kombination aus “registerRule” (lege eine Regel fest) und “addRule” (verwende die gerade festgelegte Regel) erledigt dies (vorausgesetzt wird haben auch eine Funktion geschrieben (die wir weiter oben schon behandelt haben)
//Validiere das Formular
if ($regForm->validate()) {
$regForm->freeze();
$regForm->process('process_data_regForm');
}
Ist alles erledigt können wir beim Abschicken des Formulars die Eingaben validieren und bei Korrektheit an die Verarbeitungsfunktion schicken.
Code – Smarty und Quickform
$regFormRenderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$regFormRenderer->setErrorTemplate(
'{if $error}
<span style="color: red; font-size: 0.7em;">{$error}</span><br />
{/if}
{$html}'
);
$regForm->setRequiredNote(
'<font color="red" size="2">
*
</font>
<font color="blue" size="2">
Du hast ein Pflichtfeld vergessen auszufüllen
</font>');
$regForm->accept($regFormRenderer);
$smarty->assign('regForm_data', $regFormRenderer->toArray());
Erklärung – Smarty und Quickform
Brav haben wir unser Template mit Smarty und unser Formular mit PEAR angelegt, doch wie bringt man die beiden jetzt zusammen? Schließlich muss das Template die Variablen auch kennen, um sie verwenden zu können, dazu dient obiger Code. Wir legen eine neue Instanz der Klasse “HTML_QuickForm_Renderer_ArraySmarty” an und packen dann alles in eine “komplexe” Smarty-Variable (regForm_data), diese enthält alles was wir in unserem Template brauchen.
Hinweis: “setErrorTemplate” und “setRequiredNote” können angepasst werden, jenachdem wie man die Hinweisausgabe haben möchte.
Modul – Registrieren – Smarty
Da wir eine Template-Engine verwenden und in der “register.php” schon alle wichtigen Werte und möglichen Ausgaben in den Template-Variablen gespeichert haben, brauchen wir nun noch die Template-Datei selbst, mit deren Hilfe wir dann unser Registrierungsformular endgültig ausgeben und User sich registrieren können. Dazu legen wir im Ordner “smarty -> templates” die Datei “regform.tpl” an und fügen folgenden Quellcode ein:
/* START – Quellcode regform.tpl */
<div class="Formular">
<form {$regForm_data.attributes}>
<h2>Registrieren</h2>
{$regForm_data.hidden}
<!-- Display the fields -->
<table>
<tr>
<th class="form_login_label">{$regForm_data.username.label}</th>
<td>{$regForm_data.username.html}</td>
</tr>
<tr>
<th class="form_login_label">{$regForm_data.pass.label}</th>
<td>{$regForm_data.pass.html}</td>
</tr>
<tr>
<th class="form_login_label">{$regForm_data.pass2.label}</th>
<td>{$regForm_data.pass2.html}</td>
</tr>
<tr>
<th class="form_login_label">{$regForm_data.email.label}</th>
<td>{$regForm_data.email.html}</td>
</tr>
</table>
<table>
<!-- Display the buttons -->
<tr>
<td colspan="2">{$regForm_data.btn_registration.html}</td>
</tr>
{if $regForm_data.errors}
<tr>
<td colspan="2">{$regForm_data.requirednote}</td>
</tr>
{/if}
</table>
</form>
</div>
/* ENDE – Quellcode regform.tpl */
Regform.tpl – Codeerklärung
Die Template-Datei ist im Gegensatz zur Register.php recht unspektakulär und das ist auch das besondere daran. Wir platzieren einfach nur noch die Elemente, die wir vorher der Smarty-Engine als Template-Variablen zugeordnet haben und geben sie aus. Dabei sind die Variablen, die mit “.label” gekennzeichnet sind, nichts weiter als die Bezeichnungen für die HTML-Elemente und die die mit “.html” gekennzeichnet sind, sind die HMTL-Elemente selbst (zum Beispiel ein Input-Field oder ein Submit-Button).
Registrieren
Nun rufen wir diese URL auf (“domain.de” durch eigene URL ersetzen): “http://domain.de/register” und sollten folgende Ausgabe erhalten:

Die anderen Module werden jeweils in einem eigenen Part behandelt, da es sonst den Umfang dieses Artikel sprengen würde.
Weitere Quellen:
- Quickform-Dokumentation – es dauert etwas bis man damit umgehen kann, aber dann sind auch die anderen Dokumentationen von PEAR wirklich hilfreich
- Linksammlung zu PEAR-Quickform
Verwandte Artikel
- Webdesign Guide – User-Modul: Login
- Webdesign Guide – Modul: Kontaktformular und Dankesseite
- PEAR PHP Tutorial
- Webdesign Guide – die Arbeitsumgebung
- Programmierung eines Registrierungsformular – was muss man beachten
- Pingback: Webdesign Guide - User-Modul: Login » Webdesignblog on Januar 2, 2007
- Pingback: Webdesign Guide - Programmieren einer eigenen Web-Anwendung mit PHP, MySQL, Smarty, Pear, ModRewrite » Webdesignblog on Januar 9, 2007
- Pingback: preys blog » Blog Archiv » PEAR Tutorials on August 9, 2007
Tut mir leid, die Kommentarfunktion für diesen Beitrag ist geschlossen.
