PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Pascal Landau

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt8
Heute229
Gestern250
Gesamt2346617

PHP Loginsystem - Passwort-vergessen-Funktion

Autor Flitze
Klicks 347414
Rating für PHP Loginsystem
  8.8 von 10
Bewertungen286
Stand 12.06.2013
Keywords:
PHP Login System, Loginbereich, Passwort-vergessen-Funktion, Loginsystem, einloggen, Passwort zusenden

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Workshops » PHP Loginsystem » PHP Loginsystem - Passwort-vergessen-Funktion
Seite : 1 2 3 4 5 6 Bewerten
Article Wizard - deutscher Article Spinner

3. Loginsystem und Passwort-vergessen-Funktion

[ADSENSE_LINE]
Nachdem sich nun Benutzer registrieren können, macht es Sinn, dass sich diese auch einloggen können, damit wir sie als registrierte User identifizieren können.

Dazu müssen wir einen Bereich schaffen, in dem sich die User einloggen können. Wir erstellen also erneut ein Formular. Dieses könnte zum Beispiel so aussehen:

Loginformular
(Zur vergrößerten Darstellung bitte auf die Grafik klicken)

Die Grundstruktur der Logindatei sieht ähnlich aus wie die der Registrierung:

PHP:
<?php    // Prüfen, ob das Formular gesendet wurde
    
if(Formular gesendet){
        
// Kontrolle der eingegebenen Daten
        // Einloggen des Users
    
}
    
// Ansonsten ...
    
else {
        
// ... Anzeige des Formulars
    
}
?>


Das Formular dazu ist folgendermaßen aufgebaut

PHP:
<?php
        
echo "<form ".
             
" name=\"Login\" ".
             
" action=\"".$_SERVER['PHP_SELF']."\" ".
             
" method=\"post\" ".
             
" accept-charset=\"ISO-8859-1\">\n";
        echo 
"Nickname :\n";
        echo 
"<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
        echo 
"<br>\n";
        echo 
"Passwort :\n";
        echo 
"<input type=\"password\" name=\"Passwort\">\n";
        echo 
"<br>\n";
        echo 
"eingeloggt bleiben :\n";
        echo 
"<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n";
        echo 
"<br>\n";
        echo 
"<input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n";
        echo 
"<br>\n";
        echo 
"<a href=\"passwort.php\">Passwort vergessen</a> oder noch nicht <a href=\"registrierung.php\">registriert</a>?\n";
        echo 
"</form>\n";
    }
?>


Die Passwort-vergessen-Funktion werde ich später noch behandeln. Nach dem Abschicken des Formulars werden der Nickname und das Passwort mit den Daten in der Datenbank verglichen. Dazu muss wieder eine Datenbankverbindung hergestellt werden. Wird dann ein Datensatz gefunden, der mit dem Nickname und dem Passwort übereinstimmt, wird ein Login durchgeführt.

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
// Session starten
    
session_start();

    if(isset(
$_POST['submit']) AND $_POST['submit']=='Einloggen'){
        
// Falls der Nickname und das Passwort übereinstimmen..
        
$sql "SELECT
                        ID
                FROM
                        User
                WHERE
                        Nickname = '"
.mysql_real_escape_string(trim($_POST['Nickname']))."' AND
                        Passwort = '"
.md5(trim($_POST['Passwort']))."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
// wird die ID des Users geholt und der User damit eingeloggt
        
$row mysql_fetch_assoc($result);
        
// Prüft, ob wirklich genau ein Datensatz gefunden wurde
        
if (mysql_num_rows($result)==1){
             
doLogin($row['ID'], isset($_POST['Autologin']));
             echo 
"<h4>Willkommen ".$_SESSION['Nickname']."</h4>\n";
             echo 
"Sie wurden erfolgreich eingeloggt.<br>\n".
                  
"Zur <a href=\"index.php\">Startseite</a>\n";
        }
        else{
             echo 
"Sie konnten nicht eingeloggt werden.<br>\n".
                  
"Nickname oder Passwort fehlerhaft.<br>\n".
                  
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
        }
    }
    else{
        echo 
"<form ".
             
" name=\"Login\" ".
             
" action=\"".$_SERVER['PHP_SELF']."\" ".
             
" method=\"post\" ".
             
" accept-charset=\"ISO-8859-1\">\n";
        echo 
"Nickname :\n";
        echo 
"<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
        echo 
"<br>\n";
        echo 
"Passwort :\n";
        echo 
"<input type=\"password\" name=\"Passwort\">\n";
        echo 
"<br>\n";
        echo 
"eingeloggt bleiben :\n";
        echo 
"<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n";
        echo 
"<br>\n";
        echo 
"<input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n";
        echo 
"<br>\n";
        echo 
"<a href=\"passwort.php\">Passwort vergessen</a> oder noch nicht <a href=\"registrierung.php\">registriert</a>?\n";
        echo 
"</form>\n";
    }
?>


Wie bei allen Daten, durch die der User auf die Datenbank zugreifen kann, muss ich auch hier mysql_real_escape_string() benutzen. Bei erfolgreicher Abfrage wird nun noch einmal mit mysql_num_rows() geprüft, ob genau ein Datensatz gefunden wurde was aber eigentlich dadurch gewährleistet ist, dass wir der Nickname-Spalte der Datenbanktabelle den Key UNIQUE gegeben haben.

Wie man an $_SESSION['Nickname'] erkennen kann, benutze ich Sessions. Dadurch kann ich jederzeit auf die Daten des Users zugreifen. Zum Tatsächlichen Einloggen wird die Funktion doLogin() aufgerufen, die die aktuelle SessionID (und noch ein paar andere Dinge) in der Datenbank speichert und die User ID und den Nickname in der Sessions speichert.

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
// Session starten
    
session_start();

    
// Loggt einen User ein, ..
    
function doLogin($ID$Autologin=false)
    {
        
// .. indem die aktuelle Session ID in der Datenbank gespeichert wird
        
$sql "UPDATE
                        User
                SET
                        SessionID = '"
.mysql_real_escape_string(session_id())."',
                        Autologin = NULL,
                        IP = '"
.$_SERVER['REMOTE_ADDR']."',
                        Letzte_Aktion = '"
.mysql_real_escape_string(time())."',
                        Letzter_Login = '"
.mysql_real_escape_string(time())."'
                WHERE
                        ID = '"
.$ID."'
                "
;
        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
// Wenn 'eingeloggt bleiben' aktiviert wurde
        
if($Autologin){
            
// Zufallscode erzeugen
            
$part_one substr(time()-rand(100100000),5,10);
            
$part_two substr(time()-rand(100100000),-5);
            
$Login_ID md5($part_one.$part_two);
            
// Code im Cookie speichern, 10 Jahre dürfte genügen
            
setcookie("Autologin"$Login_IDtime()+60*60*24*365*10);
            
$sql "UPDATE
                            User
                    SET
                            Autologin = '"
.$Login_ID."'
                    WHERE
                            ID = '"
.$ID."'
                   "
;
            
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        }

        
// Daten des Users in der Session speichern
        
$sql "SELECT
                        Nickname
                FROM
                        User
                WHERE
                        ID = '"
.$ID."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

        
$row mysql_fetch_assoc($result);
        
$_SESSION['UserID'] = $ID;
        
$_SESSION['Nickname'] = $row['Nickname'];
    }

    if(isset(
$_POST['submit']) AND $_POST['submit']=='Einloggen'){
        
// Falls der Nickname und das Passwort übereinstimmen..
        
$sql "SELECT
                        ID
                FROM
                        User
                WHERE
                        Nickname = '"
.mysql_real_escape_string(trim($_POST['Nickname']))."' AND
                        Passwort = '"
.md5(trim($_POST['Passwort']))."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
// wird die ID des Users geholt und der User damit eingeloggt
        
$row mysql_fetch_assoc($result);
        
// Prüft, ob wirklich genau ein Datensatz gefunden wurde
        
if (mysql_num_rows($result)==1){
             
doLogin($row['ID'], isset($_POST['Autologin']));
             echo 
"<h4>Willkommen ".$_SESSION['Nickname']."</h4>\n";
             echo 
"Sie wurden erfolgreich eingeloggt.<br>\n".
                  
"Zur <a href=\"index.php\">Startseite</a>\n";
        }
        else{
             echo 
"Sie konnten nicht eingeloggt werden.<br>\n".
                  
"Nickname oder Passwort fehlerhaft.<br>\n".
                  
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
        }
    }
    else{
        echo 
"<form ".
             
" name=\"Login\" ".
             
" action=\"".$_SERVER['PHP_SELF']."\" ".
             
" method=\"post\" ".
             
" accept-charset=\"ISO-8859-1\">\n";
        echo 
"Nickname :\n";
        echo 
"<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
        echo 
"<br>\n";
        echo 
"Passwort :\n";
        echo 
"<input type=\"password\" name=\"Passwort\">\n";
        echo 
"<br>\n";
        echo 
"eingeloggt bleiben :\n";
        echo 
"<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n";
        echo 
"<br>\n";
        echo 
"<input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n";
        echo 
"<br>\n";
        echo 
"<a href=\"passwort.php\">Passwort vergessen</a> oder noch nicht <a href=\"registrierung.php\">registriert</a>?\n";
        echo 
"</form>\n";
    }
?>


Die Funktion doLogin() erwartet 2 Parameter, die ID eines Users und eine Information, ob ein automatischer Login aktiviert werden soll oder nicht.
Durch die übergebene ID wird der User identifiziert und die aktuelle Session ID wird gespeichert. Außerdem wird der Letzte_Login Timestamp und der Letzte_Aktion Timestamp aktualisiert sowie die IP des Users gespeichert. Wurde 'eingeloggt bleiben' aktiviert, wird zudem noch eine Zufalls Login ID erzeugt und in Autologin gespeichert. Diese Login ID wird außerdem noch in einem Cookie beim Client gesetzt, der nicht verfällt. Der User ist somit eingeloggt und kann über die in der Session gespeicherte UserID identifiziert werden.

Logoutfunktion


Damit sich der User auch wieder abmelden kann, muss außerdem noch ein Logout-Bereich eingerichtet werden. Das ist allerdings recht einfach und sieht so aus:

PHP:
<?php
    session_start
();

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
// loggt einen User aus, ..
    
function doLogout()
    {
         
// .. indem das Cookie und ..
         
if(isset($_COOKIE['Autologin']))
             
setcookie("Autologin"""time()-60*60);
         
// .. die Session ID aus der Datenbank gelöscht werden
         
$sql "UPDATE
                           User
                 SET
                           SessionID = NULL,
                           Autologin = NULL,
                           IP = NULL

                 WHERE
                           ID = '"
.$_SESSION['UserID']."'
                "
;
         
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }

    
// User ausloggen
    
doLogout();
    
// $_SESSION leeren
    
$_SESSION = array();
    
// Session löschen
    
session_destroy();
    echo 
"Sie wurden erfolgreich ausgeloggt.<br>\n".
    
"Zur <a href=\"index.php\">Startseite</a>\n";
?>


Der Logout erfolgt in 3 Schritten:
1. doLogout() - Setzt die Session ID, die IP und den Autologin auf NULL. Zur Identifikation wird die UserID benutzt, die beim Login in der Session gespeichert wird.
2. Das Array $_SESSION leeren
3. Die Session mit session_destroy() zerstören

Automatischer Logout


Der Standard-Internet-Nutzer ist von Natur aus nachlässig und faul, er wird sich also nicht immer selbst ausloggen. Bedenkt man aber Situationen, in denen der User sich in einem Internet Café oder einem anderen öffentlich zugänglichen PC einloggt, so wird klar, dass man als Admin für einen automatischen Logout dieser User sorgen muss. Dazu müssen wir zuerst mal schauen, ob ein User überhaupt aktiv ist:

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
session_start();

    
// Online Status der User aktualisieren
    
if(isset($_SESSION['UserID'])){
        
$sql "UPDATE
                        User
                SET
                        Letzte_Aktion = '"
.time()."'
                WHERE
                        ID = '"
.$_SESSION['UserID']."'
               "
;
        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }
?>


Ist ein User eingeloggt, so wird die Letzte_Aktion Spalte aktuell gehalten. Dieses Skript sollte am besten auf jeder Seite eingebunden werden, damit der Timestamp wirklich immer aktuell bleibt, egal auf welcher Seite sich der User gerade befindet. So nun prüfen wir, ob ein User länger als.. sagen wir 20 Minuten inaktiv war.

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
session_start();

    
// Online Status der User aktualisieren
    
if(isset($_SESSION['UserID'])){
        
$sql "UPDATE
                        User
                SET
                        Letzte_Aktion = '"
.time()."'
                WHERE
                        ID = '"
.$_SESSION['UserID']."'
                "
;
        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }

    
// User ohne Autologin ausloggen
    
$sql "UPDATE
                    User
            SET
                    SessionID = NULL,
                    Autologin = NULL,
                    IP = NULL
            WHERE
                    '"
.(time()-60*20)."' > Letzte_Aktion AND
                    Autologin IS NULL
           "
;
    
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
?>


Dabei achten wir natürlich darauf, dass wir nun diejenigen User ausloggen, die den Autologin nicht aktiviert haben. Jetzt müssen wir noch beachten, dass Sessions nur eine bestimmte Lebenszeit haben. Standardmäßig sind das 24 Minuten und eine Löschwarscheinlichkeit von 1 zu 100. Das bedeutet, dass eine Session die älter als 24 Minuten ist, durchschnittlich bei jedem 100. Aufruf von session_start() gelöscht wird. Älter bedeutet in diesem Zusammenhang, dass der 'Sessionbesitzer' länger als 24 Minuten inaktiv war.

Dadurch entstehen 2 Probleme:
Diejenigen User, die wird eben gerade mittels automatischem Logout ausgeloggt haben, besitzen unter Umständen noch eine aktive Session. D.h. selbst wenn sie für uns schon ausgeloggt sind, besteht noch $_SESSION['UserID']. Das kann zu Fehlern in unseren Skripten führen. Für die Lösung dieses Problems müssen wird das Skript noch folgendermaßen erweitern:

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
session_start();

    
// Online Status der User aktualisieren
    
if(isset($_SESSION['UserID'])){
        
$sql "UPDATE
                        User
                SET
                        Letzte_Aktion = '"
.time()."'
                WHERE
                        ID = '"
.$_SESSION['UserID']."'
               "
;
        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }

    
// User ohne Autologin ausloggen
    
$sql "UPDATE
                    User
            SET
                    SessionID = NULL,
                    Autologin = NULL,
                    IP = NULL
            WHERE
                    '"
.(time()-60*20)."' > Letzte_Aktion AND
                    Autologin IS NULL
           "
;
    
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

    
// Kontrollieren, ob ein automatisch ausgeloggter User noch eine gültige Session besitzt
    
if(isset($_SESSION['UserID'])){
        
$sql "SELECT
                        SessionID
                FROM
                        User
                WHERE
                        ID = '"
.$_SESSION['UserID']."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
$row mysql_fetch_assoc($result);
        if(!
$row['SessionID']){
        
$_SESSION = array();
            
session_destroy();
        }
    }
?>


Jeder User mit einer User ID in der Session wird nun geprüft, ob er noch eingeloggt ist, also ob seine Session ID in der Datenbank noch existiert. Wenn das nicht der Fall ist, also unser Autologoutsystem ihn bereits ausgeloggt hat, dann leeren und vernichten wir nun noch seine Session.

Das zweite Problem ergibt sich aus den Usern, die den Autologin aktiviert haben. Ihre Session wird über kurz oder lang sterben, weil sie z.B. über Nacht inaktiv sind. Beim nächten Besuchen der Website existiert nun ihre Session nicht mehr, demnach also auch keine User ID mehr. Für uns ist der User damit nicht eingeloggt. Hier kommt nun unsere Login ID zum Tragen, die wir im Cookie gespeichert haben. Vor den anderen oben genannten Kontrollabfragen muss nun noch folgender Query eingebaut werde:

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
session_start();

    
// Prüfen, ob ein Autologin des Users stattfinden muss
    
if(isset($_COOKIE['Autologin']) AND !isset($_SESSION['UserID'])){
        
$sql "SELECT
                        ID
                FROM
                        User
                WHERE
                        Autologin = '"
.mysql_real_escape_string($_COOKIE['Autologin'])."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
$row mysql_fetch_assoc($result);
        if(
mysql_num_rows($result) == 1)
            
doLogin($row['ID'], '1');
    }

    
// Online Status der User aktualisieren
    
if(isset($_SESSION['UserID'])){
        
$sql "UPDATE
                        User
                SET
                        Letzte_Aktion = '"
.time()."'
                WHERE
                        ID = '"
.$_SESSION['UserID']."'
               "
;
        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }

    
// User ohne Autologin ausloggen
    
$sql "UPDATE
                    User
            SET
                    SessionID = NULL,
                    Autologin = NULL,
                    IP = NULL
            WHERE
                    '"
.(time()-60*20)."' > Letzte_Aktion AND
                    Autologin IS NULL
           "
;
    
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

    
// Kontrollieren, ob ein automatisch ausgeloggter User noch eine gültige Session besitzt
    
if(isset($_SESSION['UserID'])){
        
$sql "SELECT
                        SessionID
                FROM
                        User
                WHERE
                        ID = '"
.$_SESSION['UserID']."'
               "
;
        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        
$row mysql_fetch_assoc($result);
        if(!
$row['SessionID']){
        
$_SESSION = array();
            
session_destroy();
        }
    }
?>


Es wird geprüft, ob ein Autologin Cookie gesetzt wurde und ob der Wert darin irgendwo in der Datenbank auftaucht. Ist dies der Fall, wird der gefundene User mit der doLogin()-Funktion eingeloggt und damit wird seine Session wieder aktualisiert.

Passwort-vergessen-Funktion


Als letztes folgt nun noch die Passwort-vergessen-Funktion. Der Nutzen ist ja eigentlich offensichtlich. Wenn der User mal sein Passwort vergessen hat, kann ein neues Passwort generiert und an seine Email-Adresse geschickt werden. Dazu ist die Angabe seines Nicknames notwendig. Dies geschiet wie immer durch ein Formular. Danach wird die Datenbank nach dem Nickname durchsucht. Wurde er gefunden, wird das alte Passwort gelöscht und ein neues gespeichert und an die angegebene Email-Adresse geschickt. Ich schreibe das jetzt nicht mehr Abschnittsweise, weil es mir einfach zu langatmig wird. Die komplizierten Stellen werde ich natürlich kommentieren, aber sonstige Fragen können dann im Forum gestellt werden.

PHP:
<?php
    error_reporting
(E_ALL);

    
$MYSQL_HOST 'localhost';
    
$MYSQL_USER 'root';
    
$MYSQL_PASS 'myPassWord';
    
$MYSQL_DATA 'myDataBase';

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    if(isset(
$_POST['submit']) AND $_POST['submit']=='Abschicken'){
        
// Daten prüfen
        
$errors = array();
        if(!isset(
$_POST['Nickname']))
            
$errors[] = "Bitte benutzen Sie unser Passwortformular";
        else{
            if(
trim($_POST['Nickname']) == "")
                
$errors[] = "Geben Sie Ihren Nickname an.";
            
// Nickname suchen
            
$sql "SELECT
                        Email
                    FROM
                        User
                    WHERE
                        Nickname = '"
.mysql_real_escape_string(trim($_POST['Nickname']))."'
                        "
;
            
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            
$row mysql_fetch_assoc($result);
            if(!
$row)
                
$errors[] = "Ihr Nickname konnte nicht gefunden werden.\n";
        }
        if(
count($errors)){
            echo 
"Ihr Passwort konnte nicht versendet werden.<br>\n".
                 
"<br>\n";
            foreach(
$errors as $error)
                echo 
$error."<br>\n";
            echo 
"<br>\n";
            echo 
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Formular</a>\n";
        }
        else {
            
// Neues Passwort erstellen
            
$passwort substr(md5(microtime()),0,8);
            
$sql "UPDATE
                        User
                    SET
                        Passwort = '"
.md5(trim($passwort))."'
                    WHERE
                        Nickname = '"
.mysql_real_escape_string(trim($_POST['Nickname']))."'
                   "
;
            
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

            
// Email verschicken
            
$empfaenger $row['Email'];
            
$titel "Neues Passwort";
            
$mailbody "Ihr neues Passwort lautet:\n\n".
                        
$passwort."\n\n".
                        
"Ihr altes Passwort wurde gelöscht.";
            
$header "From: webmaster@mywebsolution.de\n";
            if(@
mail($empfaenger$titel$mailbody$header)){
                echo 
"Ihr neues Passwort wurde erfolgreich an Ihre Email-Adresse versandt.<br>\n".
                     
"Zurück zur <a href=\"index.php\">Startseite</a>\n";
            }
            
// Im Fehlerfall wird die Mailadresse des Webmasters für den direkten Versandt eingeblendet
            
else{
                echo 
"Beim Senden der Email trat ein Fehler auf.<br>\n".
                     
"Bitte wenden Sie sich direkt an den <a href=\"mailto:webmaster@website.de\">Webmaster</a>.\n";
            }
        }
    }
    else{
            echo 
"<form ".
                 
" name=\"Passwort\" ".
                 
" action=\"".$_SERVER['PHP_SELF']."\" ".
                 
" method=\"post\" ".
                 
" accept-charset=\"ISO-8859-1\">\n";
            echo 
"Nickname :\n";
            echo 
"<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
            echo 
"<br>\n";
            echo 
"<input type=\"submit\" name=\"submit\" value=\"Abschicken\">\n";
            echo 
"</form>\n";
    }
?>


Verwendete Funktionen:
substr()
microtime()
mail()

Zurück zur vorigen Seite:
PHP Loginsystem - User registrieren
Weiter zur nächsten Seite:
PHP Loginsystem - Benutzerliste und Userprofile

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8

Workshops (3)

8.8
8.7
7.6

Tipps (12)

7.2
6.7
6.5

Artikel (32)

8.4
8
7.2

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2024