Alex: quakenet tutorial login/register

Beitrag lesen

Tutorial Quakenet

Die findest du auch eher unter:
irc://irc.quakenet.org im IRC Channel #php oder #php.de

Habe ich aufgesucht, nur dort ist man nicht wirklich hilfsbereit... Daher stelle ich mal den Code rein. Ich hab das Tutorial nur bis Ende Registration gemacht. Die Registration klappt auch soweit, die showInfo() wird leider nicht ausgegeben nach erfolgreicher Registration. Desweiteren gibt es das Problem, dass jeder registrierter User 2 Einträge in der DB bekommt.

1 Alex    alex@yahoo.de
2 Alex ac76416811c38622bb197d5e90e09966 alex@yahoo.de

Ich denke, dass sollte auch nicht sein. Jetzt anbei mal der Code, vielleicht kennt sich jemand mit diesem Tut aus, oder hat genügend Zeit den Code durch zu gehen und mir zu helfen. Sorry und Danke schonmal im Voraus...

index.php

<?php  
error_reporting(E_ALL);  
ini_set('display_errors', 1);  
  
include 'constants.php';  
include 'functions.php'; // hier liegt die Funktion showInfo()  
  
  
  
$db = @new MySQLi('X', 'x', 'x', 'x');  
$ret = 1; // speichert den rückgabewert von include, standardwert 1  
if (mysqli_connect_errno()) {  
    $ret = 'Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error();  
} else {  
    // Laden der Include-Datei  
    include 'register.tpl';  
	include 'register.php';  
	include 'info.tpl';  
}  
// Laden des HTML-Kopfs  
// [...]  
?>

functions.php

  
<?php  
/**  
 * Erzeugt ein Array für das Infomessage-Template.  
 *  
 * Diese Funktion erzeugt eine Array für unsere Templateengine die dann  
 * die Infomessage-Template-Datei "info.tpl" läd. Der Parameter gibt  
 * dabei die Nachricht an die angezeigt werden soll.  
 *  
 * @param msg Die Nachricht die angezeigt werden soll.  
 * @return Das Array für unsere Templateengine.  
 */  
function showInfo($msg) {  
    $ret = array();  
    $ret['filename'] = 'info.tpl';  
    $ret['data'] = array();  
    $ret['data']['msg'] = $msg;  
    return $ret;  
}  
?>

info.tpl

  
<?php  
/* Daten  
 * - msg: Die Nachricht die angezeigt werden soll.  
 */  
?><p class="info">  
    <?php echo htmlspecialchars($data['msg']); ?>  
</p>

So letzte relavante, aber zugleich größte Datei....
register.php

  
<?php  
  
$ret = array();  
$ret['filename'] = 'register.tpl';  
$ret['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 ('123' != $Antwort) { // entsprechend anpassen  
        return 'Bitte geben sie die richtige Antwort an.';  
    }  
    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;  
    }  
	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;  
    }  
	if (!$stmt->execute()) {  
        return $stmt->error;  
    }  
    return showInfo('Der Benutzer wurde hinzugefügt. Sie können sich nun anmelden.');  
}  
return $ret;  
?>