Also hier ist die register.php
<?php
$a = array();
$a['filename'] = 'regform.tpl';
$a['data'] = array();
if ('POST' == $_SERVER['REQUEST_METHOD']) {
if (!isset($_POST['Username'], $_POST['Password'], $_POST['Email'],
$_POST['Antwort'], $_POST['formaction'])) {
return INVALID_FORM;
}
if (!is_array($_POST['Password']) OR count($_POST['Password']) != 2) {
return INVALID_FORM;
}
if ($_POST['Password'][0] != $_POST['Password'][1]) {
return 'Bitte geben sie das gleiche Password ein.';
}
if (($Username = trim($_POST['Username'])) == '' OR
($Password = trim($_POST['Password'][0])) == '' OR
($Email = trim($_POST['Email'])) == '' OR
($Antwort = trim($_POST['Antwort'])) == '') {
return EMPTY_FORM;
}
if (!preg_match('~\A\S{3,30}\z~', $Username)) {
return 'Der Benutzername darf nur aus 3 bis 30 Zeichen bestehen und '.
'keine Leerzeichen enthalten.';
}
$sql = 'SELECT
ID
FROM
User
WHERE
Username = ?
LIMIT
1';
$stmt = $db->prepare($sql);
if (!$stmt) {
return $db->error;
}
$stmt->bind_param('s', $Username);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows) {
return 'Der Username wird bereits verwendet.';
}
$stmt->close();
$sql = 'INSERT INTO
User(Username, Email)
VALUES
(?, ?)';
$stmt = $db->prepare($sql);
if (!$stmt) {
return $db->error;
}
$stmt->bind_param('ss', $Username, $Email);
if (!$stmt->execute()) {
return $stmt->error;
}
$UserID = $stmt->insert_id;
$sql = 'UPDATE
User
SET
Password = ?
WHERE
ID = ?';
$stmt = $db->prepare($sql);
if (!$stmt) {
return $db->error;
}
$Hash = md5(md5($UserID).$Password);
$stmt->bind_param('si', $Hash, $UserID);
if (!$stmt->execute()) {
return $stmt->error;
}
return showInfo('Der Benutzer wurde hinzugefügt. Sie können sich nun anmelden.');
}
return $a;
?>
Alles anzeigen
Dazu die functions.php
<?php
define('INVALID_FORM', 'Benutzen sie nur Formulare von der Homepage.');
define('EMPTY_FORM', 'Bitte füllen sie das Formular vollständig aus.');
?>
Und die constants.php
<?php
function showInfo($msg) {
$a = array();
$a['filename'] = 'info.tpl';
$a['data'] = array();
$a['data']['msg'] = $msg;
return $a;
}
?>
Und das Formular.
<form action="index.php?seite=reg" method="post">
<legend>Registieren</legend>
<fieldset><table>
<tr><td>Username: </td><td><input type="text" name="Username" /></td></tr>
<tr><td>Passwort: </td><td><input type="password" name="Password[]" /></td></tr>
<tr><td>Bestätigung: </td><td><input type="password" name="Password[]" /></td></tr>
<tr><td>E-Mail: </td><td><input type="text" name="Email" /></td></tr>
<tr><td><input type="submit" name="formaction" value="Registieren" /></td><td></td></tr>
</table></fieldset>
</form>
Wenn ich im Formular auch irgendetwas falsch schreibe oder die Passwörter unterschiedlich sind, wird auch kein Fehler angezeigt. Springt jedesmal nur zum index zurück, kA warum.
hier ist die index.php, komplett.
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
include 'variables.php';
include 'constants.php';
include 'functions.php';
$db = @new MySQLi('host', 'benutzer', 'passwort', 'datenbank');
$a = 1; // speichert den rückgabewert von include, standardwert 1
if (mysqli_connect_errno()) {
$a = 'Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error();
} else {
/*
* Die Include-Datei muss eine return Anweisung enthalten mit folgenden
* Werten:
* - Bei normaler Ausführung
* Array('filename' => string, -- Dateiname vom Template
* 'data' => Array()) -- Array mit Daten für das Template
* - Bei einem Fehler
* string -- Die Fehlermeldung die angezeigt werden soll.
*/
if (isset($_GET['content'], $seite[$_GET['content']])) { //es wird geprüft ob "GET[...]" einen inhalt hat und ob die....
//variable $content definiert ist!
if (file_exists('includes/'.$seite[$_GET['content']])) { //es wird geprüft ob angegebene seite von "GET?content=" existiert!
$a = include 'includes/'.$seite[$_GET['content']]; //wenn ja wird diese an $a übergeben!
} else { //wenn nicht dann....
$a = "'includes/".$seite[$_GET['content']]."' konnte nicht geladen werden!"; //Fehlermeldung!
} //wenn $content nicht definiert ist oder "GET[...]"....
} else { //keinen inhalt hat....
$a = include 'includes/'.$seite['home']; //dann wird der Standardbereich geladen!
}
}
// Laden des HTML-Kopfs
include 'tpls/header.tpl'; // Doctype, <html>, <head>, <meta> kram
//include 'templates/menu.tpl'; // falls man z.B. ein Menu haben möchte, in meinem fall ist das menu im header:)
?>
<?php include 'includes/inhalt.php'; ?>
<?php
// HTML footer laden
include 'tpls/footer.tpl'; // Zeug wie </body> und </html>
?>
Alles anzeigen
und die inhalt.php, das müsste alles wichtige sein denke ich
<?php
if (is_array($a) and isset($a['filename'], $a['data']) and
is_string($a['filename']) and
is_array($a['data'])) {
// Gültiger return-Wert
if (file_exists($file = 'tpls/'.$a['filename'])) {
$data = $a['data']; // speicher die Arraydaten in eine Variable $data
// die dann im Template verwendet werden kann.
include $file;
} else {
// Datei existiert nicht, eine Fehlermeldung anzeigen.
$data = array();
$data['msg'] = 'Templatedatei "'.$file.'" ist nicht vorhanden.';
include 'tpls/error.tpl';
}
} else if (is_string($a)) {
// include-Datei lieferte eine String zurück, welches eine Fehlermeldung sein soll
$data = array();
$data['msg'] = $a;
include 'tpls/error.tpl';
} else if (1 == $ret) {
// return-Anweisung wurde vergessen
$data = array();
$data['msg'] = 'In der Include-Datei wurde die return Anweisung vergessen.';
include 'tpls/error.tpl';
} else {
// überhaupt ein ungültiger return-Wert
$data = array();
$data['msg'] = 'Die Include-Datei hat einen ungültigen Wert zurückgeliefert.';
include 'tpls/error.tpl';
}
return $a; // nicht Vergessen, sonst enthält $ret nur den Wert int(1)
?>
Alles anzeigen