WebImpressionen
Login System

Login System

Ein einfaches Registrierungs- und Anmeldesystem mit vorbereiteten ANWEISUNGEN (Prepared Statements).
Es besteht aus sieben Schritten:
Schritt 1: Datenbankverbindung erstellen.
Schritt 2: Datenbanktabelle erstellen.
Schritt 3: Registrierungsformular erstellen.
Schritt 4: Anmeldeformular erstellen.
Schritt 5: Begrüßungsseite erstellen.
Schritt 6: Abmeldeseite erstellen.
Schritt 7: Passwort ändern.

Gibt es auf Anfrage auch als Download:
"login-system" (nur Objekt orientiert)


Schritt 1: Datenbankverbindung erstellen (dbconect.php)

 
<?php
1
error_reporting ( E_ALL ^ E_NOTICE );
2
define ( 'db_server', 'localhost' );
3
define ( 'db_username', 'root' );
4
define ( 'db_passwort', ' ' );
5
define ( 'db_name', 'demo' );
// Verbindung zur Datenbank herstellen
6
$link = mysqli_connect ( db_server‚ db_username‚ db_passwort‚ db_name );
// Verbindung Prüfen
7
if ( $link === false ) {
8
die ( " Datenbank verbindung fehlt! " . mysqli_connect_error () );
9
}
// Verbindung schließen
10
mysqli_close ( $link ) ;
 
?>
 
<?php
1
error_reporting ( E_ALL ^ E_NOTICE );
2
define ( 'db_server', 'localhost' );
3
define ( 'db_username', 'root' );
4
define ( 'db_passwort', ' ' );
5
define ( 'db_name', 'demo' );
// Verbindung zur Datenbank herstellen
6
$mysqli = new mysqli ( db_server‚ db_username‚ db_passwort‚ db_name );
// Verbindung Prüfen
7
if ( $mysqli === false ) {
8
die ( "Datenbank verbindung fehlt! " $mysqli -> connect_error );
9
}
// Verbindung schließen
10
$mysqli -> close () ;
 
?>

Nach der Datenbankverbindung müssen wir eine Tabelle für die Datenbank erstellen.

Schritt 2: Datenbanktabelle erstellen (tabelle.php)

 
<?php
// Verbindung zur Datenbank herstellen
1
$sql = " CREATE TABLE `users` (
2
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
3
`username` VARCHAR(50) NOT NULL UNIQUE ,
4
`password` VARCHAR(255) NOT NULL ,
5
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
6
)";
7
if ( $mysqli -> query ( $sql ) === true) {
8
echo " Tabelle erfolgreich erstellt. ";
9
} else {
10
echo " FEHLER: " . $sql . " konnte nicht ausgeführt werden. " . $mysqli -> error ;
11
}
12
$mysqli -> close () ;
 
?>
 
<?php
// Verbindung zur Datenbank herstellen
1
$sql = " CREATE TABLE `users` (
2
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
3
`username` VARCHAR(50) NOT NULL UNIQUE ,
4
`password` VARCHAR(255) NOT NULL ,
5
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
6
)";
7
if ( mysqli_query ( $link, $sql )) {
8
echo " Tabelle erfolgreich erstellt. ";
9
} else {
10
echo " FEHLER: " . $sql . " konnte nicht ausgeführt werden. " . mysqli_error ( $link );
11
}
12
mysqli_close ( $link ) ;
 
?>

Mit folgendem Beispielcode wird ein Webformular erstellt, mit dem sich der Benutzer registrieren kann.

Dieses Skript generiert auch Fehler, wenn ein Benutzer versucht, das Formular ohne Eingabe eines Werts zu senden, oder wenn der vom Benutzer eingegebene Benutzername bereits von einem anderen Benutzer verwendet wird.

Schritt 3: Registrierungsformular erstellen (register.php)

 
<?php
// Konfigurationsdatei einschließen
1
if ( file_exists ( dbconect.php ) ) { require_once ( dbconect.php ) ; }
// Variablen definieren und mit leeren Werten initialisieren
2
$username = $password = $confirm_password = " " ;
3
$username_err = $password_err = $confirm_password_err = " " ;
// Formulardaten werden verarbeitet, wenn das Formular gesendet wird
4
if ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ) {
// Überprüfe username
5
if ( empty ( trim ( $_POST [ " username " ] ) ) ) {
6
$username_err = " Bitte geben Sie einen Usernamen ein. " ;
7
} else {
// SELECT-Anweisung vorbereiten
8
$sql = " SELECT id FROM users WHERE username = ? ";
9
if ( $stmt = mysqli_prepare ( $link, $sql ) ) {
// Variablen als Parameter binden
10
mysqli_stmt_bind_param ( $stmt , " s " , $param_username );
// Parameter setzen
11
$param_username = trim ( $_POST [ " username " ] ) ) ) {
// Vorbereitete Anweisung ausführen
12
if ( mysqli_stmt_execute ( $stmt ) ) {
// Ergebnis speichern
13
mysqli_stmt_store_result ( $stmt ) ;
14
if ( mysqli_stmt_num_rows ( $stmt ) == 1 ) {
15
$username_err = " Dieser Username ist bereits vergeben. " ;
16
} else {
17
$username = trim ( $_POST [ " username " ] ) ;
18
}
19
} else {
20
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
21
}
22
}
// Anweisung schließen
23
mysqli_stmt_close ( $stmt ) ;
24
}
// Passwort überprüfen
25
if ( empty ( trim ( $_POST [ " passwort " ] ) ) ) {
26
$password_err = " Bitte geben Sie einen Passwort ein. " ;
27
} elseif { strlen ( trim ( $_POST [ " passwort " ] ) ) < 6 ) {
28
$password_err = " Das Passwort muss mindestens 6 Zeichen haben. " ;
29
} else {
30
$password = trim ( $_POST [ " passwort " ] ) ;
31
}
// Passwort bestätigen
32
if ( empty ( trim ( $_POST [ " confirm_passwort " ] ) ) ) {
33
$confirm_password_err = " Bitte bestätigen Sie das Passwort. " ;
34
} else {
35
$confirm_password = trim ( $_POST [ " confirm_passwort " ] ) ;
36
if ( empty ( $password_err ) && ( $password ! = $confirm_password ) ) {
37
$confirm_password_err = " Die Passwörter stimmen nicht überein. " ;
38
}
39
}
// Eingaben überprüfen, bevor Sie in die Datenbank eingefügt werden
40
if ( empty ( $username_err ) && empty ( $password_err ) && empty ( $confirm_password_err ) ) {
// Einfügeanweisung vorbereiten
41
$sql = " INSERT INTO users (username, password) VALUES (?, ?) ";
42
if ( $stmt = mysqli_prepare ( $link, $sql ) ) {
// Variablen als Parameter binden
43
mysqli_stmt_bind_param ( $stmt , " s s " , $param_username, $param_password );
// Parameter setzen
44
$param_username = $username ;
45
$param_password = password_hash ( $password, PASSWORD_DEFAULT );
// Erstellt einen Passwort-Hash
// Vorbereitete Anweisung ausführen
46
if ( mysqli_stmt_execute ( $stmt ) ) {
// Weiterleitung zur Anmeldeseite
47
header ( " location: login.php " ) ;
48
} else {
49
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
50
}
51
}
// Anweisung schließen
50
mysqli_stmt_close ( $stmt ) ;
51
}
// Verbindung schließen
52
mysqli_close ( $stmt ) ;
53
}
 
?>
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Anmelden </title>
6
<style>
7
body { font: 100% sans-serif; }
8
.wrapper { width: 35rem; padding: 2rem; }
9
</style>
10
</head>
11
<body>
12
<div class = " wrapper ">
13
<h2> Anmelden </h2>
14
<p> Bitte füllen Sie dieses Formular aus, um ein Account zu erstellen. </p>
15
<form action = " <?php echo htmlspecialchars ( $_SERVER [ " PHP_SELF " ] ); ?> " method = " post ">
16
<div class = " form-group <?php echo ( ! empty ( $username_err ) ) ? ' has-error ' : ' ' ; ?> ">
17
<label> Username </label>
18
<input type = "text" name = "username" class = "form-control" value = "<?php echo $username; ?>" />
19
<span class = " help-block" > <?php echo $username_err; ?> </span>
20
</div>
21
<div class = " form-group <?php echo ( ! empty ( $password_err ) ) ? ' has-error ' : ' ' ; ?> ">
22
<label> Passwort </label>
23
<input type = "text" name = "password" class = "form-control" value = "<?php echo $password; ?>" />
24
<span class = " help-block" > <?php echo $password_err; ?> </span>
25
</div>
26
<div class = " form-group <?php echo ( ! empty ( $confirm_password_err ) ) ? ' has-error ' : ' ' ; ?> ">
27
<label> Passwort wiederholen </label>
28
<input type = "text" name = "confirm_password" class = "form-control" value = "<?php echo $confirm_password; ?>" />
29
<span class = " help-block" > <?php echo $confirm_password_err; ?> </span>
30
</div>
31
<div class = " form-group ">
32
<input type = "submit" class = "btn btn-primary" value = "Senden" />
33
<input type = "reset" class = "btn btn-primary" value = "Löschen" />
34
</div>
35
<p> Sie haben schon einen Account? <a href = " login.php "> Login hier </a></p>
36
</form>
37
</div>
38
</body>
39
</html>
 
<?php
// Konfigurationsdatei einschließen
1
if ( file_exists ( dbconect.php ) ) { require_once ( dbconect.php ) ; }
// Variablen definieren und mit leeren Werten initialisieren
2
$username = $password = $confirm_password = " " ;
3
$username_err = $password_err = $confirm_password_err = " " ;
// Formulardaten werden verarbeitet, wenn das Formular gesendet wird
4
if ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ) {
// Überprüfe username
5
if ( empty ( trim ( $_POST [ " username " ] ) ) ) {
6
$username_err = " Bitte geben Sie einen Usernamen ein. " ;
7
} else {
// SELECT-Anweisung vorbereiten
8
$sql = " SELECT id FROM users WHERE username = ? ";
9
if ( $stmt = mysqli -> prepare ( $sql ) ) {
// Variablen als Parameter binden
10
$stmt -> bind_param ( " s " , $param_username );
// Parameter setzen
11
$param_username = trim ( $_POST [ " username " ] ) ) ) {
// Vorbereitete Anweisung ausführen
12
if ( $stmt -> execute ( ) ) {
// Ergebnis speichern
13
$stmt -> store_result ( ) ;
14
if ( $stmt -> num_rows == 1 ) {
15
$username_err = " Dieser Username ist bereits vergeben. " ;
16
} else {
17
$username = trim ( $_POST [ " username " ] ) ;
18
}
19
} else {
20
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
21
}
22
}
// Anweisung schließen
23
$stmt -> close ( ) ;
24
}
// Passwort überprüfen
25
if ( empty ( trim ( $_POST [ " passwort " ] ) ) ) {
26
$password_err = " Bitte geben Sie einen Passwort ein. " ;
27
} elseif { strlen ( trim ( $_POST [ " passwort " ] ) ) < 6 ) {
28
$password_err = " Das Passwort muss mindestens 6 Zeichen haben. " ;
29
} else {
30
$password = trim ( $_POST [ " passwort " ] ) ;
31
}
// Passwort bestätigen
32
if ( empty ( trim ( $_POST [ " confirm_passwort " ] ) ) ) {
33
$confirm_password_err = " Bitte bestätigen Sie das Passwort. " ;
34
} else {
35
$confirm_password = trim ( $_POST [ " confirm_passwort " ] ) ;
36
if ( empty ( $password_err ) && ( $password ! = $confirm_password ) ) {
37
$confirm_password_err = " Die Passwörter stimmen nicht überein. " ;
38
}
39
}
// Eingaben überprüfen, bevor Sie in die Datenbank eingefügt werden
40
if ( empty ( $username_err ) && empty ( $password_err ) && empty ( $confirm_password_err ) ) {
// Einfügeanweisung vorbereiten
41
$sql = " INSERT INTO users (username, password) VALUES (?, ?) ";
42
if ( $stmt = mysqli -> prepare ( $sql ) ) {
// Variablen als Parameter binden
43
$stmt -> bind_param ( " s s " , $param_username, $param_password );
// Parameter setzen
44
$param_username = $username ;
45
$param_password = password_hash ( $password, PASSWORD_DEFAULT );
// Erstellt einen Passwort-Hash
// Vorbereitete Anweisung ausführen
46
if ( $stmt -> execute ( ) ) {
// Weiterleitung zur Anmeldeseite
47
header ( " location: login.php " ) ;
48
} else {
49
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
50
}
51
}
// Anweisung schließen
52
$stmt -> close ( ) ;
53
}
// Verbindung schließen
52
$mysqli -> close ( ) ;
53
}
 
?>
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Anmelden </title>
6
<style>
7
body { font: 100% sans-serif; }
8
.wrapper { width: 35rem; padding: 2rem; }
9
</style>
10
</head>
11
<body>
12
<div class = " wrapper ">
13
<h2> Anmelden </h2>
14
<p> Bitte füllen Sie dieses Formular aus, um ein Account zu erstellen. </p>
15
<form action = " <?php echo htmlspecialchars ( $_SERVER [ " PHP_SELF " ] ); ?> " method = " post ">
16
<div class = " form-group <?php echo ( ! empty ( $username_err ) ) ? ' has-error ' : ' ' ; ?> ">
17
<label> Username </label>
18
<input type = "text" name = "username" class = "form-control" value = "<?php echo $username; ?>" />
19
<span class = " help-block" > <?php echo $username_err; ?> </span>
20
</div>
21
<div class = " form-group <?php echo ( ! empty ( $password_err ) ) ? ' has-error ' : ' ' ; ?> ">
22
<label> Passwort </label>
23
<input type = "text" name = "password" class = "form-control" value = "<?php echo $password; ?>" />
24
<span class = " help-block" > <?php echo $password_err; ?> </span>
25
</div>
26
<div class = " form-group <?php echo ( ! empty ( $confirm_password_err ) ) ? ' has-error ' : ' ' ; ?> ">
27
<label> Passwort wiederholen </label>
28
<input type = "text" name = "confirm_password" class = "form-control" value = "<?php echo $confirm_password; ?>" />
29
<span class = " help-block" > <?php echo $confirm_password_err; ?> </span>
30
</div>
31
<div class = " form-group ">
32
<input type = "submit" class = "btn btn-primary" value = "Senden" />
33
<input type = "reset" class = "btn btn-primary" value = "Löschen" />
34
</div>
35
<p> Sie haben schon einen Account? <a href = " login.php "> Login hier </a></p>
36
</form>
37
</div>
38
</body>
39
</html>

Im obigen Beispiel haben wir die PHP-Funktion "password_hash ()" verwendet,
um aus der vom Benutzer eingegebenen Kennwortzeichenfolge (Zeile Nr. 45) einen Kennwort-Hash zu erstellen.

Diese Funktion erstellt einen Passwort-Hash unter Verwendung eines starken Einweg-Hashing-Algorithmus.
Außerdem generiert und wendet es automatisch ein zufälliges Salt an, wenn das Kennwort überprüft wird.
Dies bedeutet, dass auch wenn zwei Benutzer dieselben Passwörter haben, ihre Passwort-Hashes unterschiedlich sind.

Wenn der Benutzer das Formular absendet, werden diese Eingaben mit den in der Datenbank gespeicherten Anmeldeinformationen verglichen.
Dabei wird auch das angegebene Kennwort mit dem in der Datenbank gespeicherten Kennwort-Hash
mithilfe der PHP-Funktion "password_verify ()" überprüft.
Wenn Benutzername und Kennwort übereinstimmen, wird der Benutzer autorisiert und erhält Zugriff auf die Seite. Andernfalls wird der Anmeldeversuch abgelehnt.

Schritt 4: Anmeldeformular erstellen (login.php)

 
<?php
// Initialisieren der Sitzung
1
session_start ( ) ;
// Überprüfen ob User angemeldet ist
2
if ( isset ( $_SESSION [ "loggedin" ] ) && ( $_SESSION [ "loggedin" ] === true ) {
3
header ( " location: welcome.php " ) ;
4
exit ;
5
}
// Konfigurationsdatei einschließen
6
if ( file_exists ( dbconect.php ) ) { require_once ( dbconect.php ) ; }
// Variablen definieren und mit leeren Werten initialisieren
7
$username = $password = " " ;
8
$username_err = $password_err = " " ;
// Formulardaten werden verarbeitet, wenn das Formular gesendet wird
9
if ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ) {
// Überprüfe username
10
if ( empty ( trim ( $_POST [ " username " ] ) ) ) {
11
$username_err = " Bitte geben Sie einen Usernamen ein. " ;
12
} else {
13
$username = trim ( $_POST [ " username " ] );
14
}
// Überprüfe passwort
15
if ( empty ( trim ( $_POST [ " password " ] ) ) ) {
16
$password_err = " Bitte geben Sie ein Passwort ein. " ;
17
} else {
18
$password = trim ( $_POST [ " password " ] );
19
}
// Eingaben überprüfen, bevor Sie an die Datenbank gesendet werden
20
if ( empty ( $username_err ) && empty ( $password_err ) ) {
// Selectanweisung vorbereiten
21
$sql = " SELECT id, username, password FROM users WHERE username ? ";
22
if ( $stmt = mysqli_prepare ( $link, $sql ) ) {
// Variablen als Parameter binden
23
mysqli_stmt_bind_param ( $stmt , " s " , $param_username );
// Parameter setzen
24
$param_username = $username ;
// Anweisung ausführen
25
if ( mysqli_stmt_execute ( $stmt ) ) {
/* Ergebnis zwischen speichern
26
mysqli_stmt_store_result ( $stmt ) ;
// Username prüfen - Passwort bestätigen
27
if ( mysqli_stmt_num_rows ( $stmt ) == 1 ) {
// Ergebnisvariablen binden
28
mysqli_stmt_bind_result ( $stmt = $id, $username, $hashed_password );
29
if ( mysqli_stmt_fetch ( $stmt ) ) {
30
if ( password_verify ( $password, $hashed_password ) ) {
// Passwort korrekt, Sitzung starten
31
session_start ( ) ;
// Daten in Sitzungsvariablen
32
$_SESSION [ " loggedin " ] = true ;
33
$_SESSION [ " id " ] = $id ;
34
$_SESSION [ " username " ] = $username ;
// Weiterleitung zur Willkommenseite
35
header ( " location: welcome.php " ) ;
36
} else {
// Fehlermeldung falsches Passwort
37
echo " Das Passwort ist falsch. " ;
38
$password_err = " Das Passwort ist falsch. " ;
39
}
40
}
41
} else {
// Fehlermeldung kein Username vorhanden
42
$username_err = " Kein Account mit diesem Usernamen. " ;
43
}
44
} else {
45
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
46
}
47
}
// Anweisung schließen
48
mysqli_stmt_close ( $stmt ) ;
49
}
// Verbindung schließen
50
mysqli_close ( $stmt ) ;
51
}
 
?>
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Login </title>
6
<style>
7
body { font: 100% sans-serif; }
8
.wrapper { width: 35rem; padding: 2rem; }
9
</style>
10
</head>
11
<body>
12
<div class = " wrapper ">
13
<h2> Login </h2>
14
<p> Bitte geben Sie Ihre Zugangsdaten ein, um sich anzumelden. </p>
15
<form action = " <?php echo htmlspecialchars ( $_SERVER [ " PHP_SELF " ] ); ?> " method = " post ">
16
<div class = " form-group <?php echo ( ! empty ( $username_err ) ) ? ' has-error ' : ' ' ; ?> ">
17
<label> Username </label>
18
<input type = "text" name = "username" class = "form-control" value = "<?php echo $username; ?>" />
19
<span class = " help-block" > <?php echo $username_err; ?> </span>
20
</div>
21
<div class = " form-group <?php echo ( ! empty ( $password_err ) ) ? ' has-error ' : ' ' ; ?> ">
22
<label> Passwort </label>
23
<input type = "text" name = "password" class = "form-control" value = "<?php echo $password; ?>" />
24
<span class = " help-block" > <?php echo $password_err; ?> </span>
25
</div>
26
<div class = " form-group ">
27
<input type = "submit" class = "btn btn-primary" value = "Login" />
28
</div>
29
<p> Sie haben noch keinen Account? <a href = " register.php "> Jetzt registrieren </a>.</p>
30
</form>
31
</div>
32
</body>
33
</html>
 
<?php
// Initialisieren der Sitzung
1
session_start ( ) ;
// Überprüfen ob User angemeldet ist
2
if ( isset ( $_SESSION [ "loggedin" ] ) && ( $_SESSION [ "loggedin" ] === true ) {
3
header ( " location: welcome.php " ) ;
4
exit ;
5
}
// Konfigurationsdatei einschließen
6
if ( file_exists ( dbconect.php ) ) { require_once ( dbconect.php ) ; }
// Variablen definieren und mit leeren Werten initialisieren
7
$username = $password = " " ;
8
$username_err = $password_err = " " ;
// Formulardaten werden verarbeitet, wenn das Formular gesendet wird
9
if ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ) {
// Überprüfe username
10
if ( empty ( trim ( $_POST [ " username " ] ) ) ) {
11
$username_err = " Bitte geben Sie einen Usernamen ein. " ;
12
} else {
13
$username = trim ( $_POST [ " username " ] );
14
}
// Überprüfe passwort
15
if ( empty ( trim ( $_POST [ " password " ] ) ) ) {
16
$password_err = " Bitte geben Sie ein Passwort ein. " ;
17
} else {
18
$password = trim ( $_POST [ " password " ] );
19
}
// Eingaben überprüfen, bevor Sie an die Datenbank gesendet werden
20
if ( empty ( $username_err ) && empty ( $password_err ) ) {
// Selectanweisung vorbereiten
21
$sql = " SELECT id, username, password FROM users WHERE username ? ";
22
if ( $stmt = $mysqli -> prepare ( $sql ) ) {
// Variablen als Parameter binden
23
$stmt -> bind_param ( " s " , $param_username );
// Parameter setzen
24
$param_username = $username ;
// Anweisung ausführen
25
if ( $stmt -> execute ( ) ) {
// Ergebnis zwischen speichern
26
$stmt -> store_result ( ) ;
// Username prüfen - Passwort bestätigen
27
if ( $stmt -> num_rows == 1 ) {
// Ergebnisvariablen binden
28
$stmt -> bind_result ( $id, $username, $hashed_password );
29
if ( $stmt -> fetch ( ) ) {
30
if ( password_verify ( $password, $hashed_password ) ) {
// Passwort korrekt, Sitzung starten
31
session_start ( ) ;
// Daten in Sitzungsvariablen
32
$_SESSION [ " loggedin " ] = true ;
33
$_SESSION [ " id " ] = $id ;
34
$_SESSION [ " username " ] = $username ;
// Weiterleitung zur Willkommenseite
35
header ( " location: welcome.php " ) ;
36
} else {
// Fehlermeldung falsches Passwort
37
echo " Das Passwort ist falsch. " ;
38
$password_err = " Das Passwort ist falsch. " ;
39
}
40
}
41
} else {
// Fehlermeldung kein Username vorhanden
42
$username_err = " Kein Account mit diesem Usernamen. " ;
43
}
44
} else {
45
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
46
}
47
}
// Anweisung schließen
48
$stmt -> close ( ) ;
49
}
// Verbindung schließen
50
$mysqli -> close ( ) ;
51
}
 
?>
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Login </title>
6
<style>
7
body { font: 100% sans-serif; }
8
.wrapper { width: 35rem; padding: 2rem; }
9
</style>
10
</head>
11
<body>
12
<div class = " wrapper ">
13
<h2> Login </h2>
14
<p> Bitte geben Sie Ihre Zugangsdaten ein, um sich anzumelden. </p>
15
<form action = " <?php echo htmlspecialchars ( $_SERVER [ " PHP_SELF " ] ); ?> " method = " post ">
16
<div class = " form-group <?php echo ( ! empty ( $username_err ) ) ? ' has-error ' : ' ' ; ?> ">
17
<label> Username </label>
18
<input type = "text" name = "username" class = "form-control" value = "<?php echo $username; ?>" />
19
<span class = " help-block" > <?php echo $username_err; ?> </span>
20
</div>
21
<div class = " form-group <?php echo ( ! empty ( $password_err ) ) ? ' has-error ' : ' ' ; ?> ">
22
<label> Passwort </label>
23
<input type = "text" name = "password" class = "form-control" value = "<?php echo $password; ?>" />
24
<span class = " help-block" > <?php echo $password_err; ?> </span>
25
</div>
26
<div class = " form-group ">
27
<input type = "submit" class = "btn btn-primary" value = "Login" />
28
</div>
29
<p> Sie haben noch keinen Account? <a href = " register.php "> Jetzt registrieren </a>.</p>
30
</form>
31
</div>
32
</body>
33
</html>

Schritt 5: Begrüßungsseite erstellen (welcome.php)

welcome.php
 
<?php
// Initialisieren der Sitzung
1
session_start ( ) ;
// Überprüfen ob User angemeldet ist
2
if ( ! isset ( $_SESSION [ "loggedin" ] ) | | ( $_SESSION [ "loggedin" ] !== true ) {
3
header ( " location: login.php " ) ;
4
exit ;
5
}
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Willkommen </title>
6
<style>
7
body { font: 100% sans-serif; }
9
</style>
10
</head>
11
<body>
12
<div class = " page-header ">
13
<h1> Hi, <?php echo htmlspecialchars ( $_SERVER [ " username " ] ); ?> Willkommen auf unserer Webseite </h1>
14
</div>
15
<p> <a href = "reset-password.php" class = "btn btn-warning"> Passwort zurücksetzen </a></p>
16
<p> <a href = "logout.php" class = "btn btn-danger"> Ausloggen </a></p>
17
</body>
18
</html>

Wenn der Benutzer auf den Link zum Abmelden klickt,
zerstört das Skript in folgender Datei die Sitzung und leitet den Benutzer zurück zur Anmeldeseite.

Schritt 6: Abmeldeseite erstellen (logout.php)

logout.php
 
<?php
// Initialisieren der Sitzung
1
session_start ( ) ;
// Deaktivieren aller Sitzungsvariablen
2
$_SESSION = array ( ) ;
// Sitzung zerstören
3
session_destroy ( ) ;
// Weiterleitung zur Anmeldeseite
4
header ( " location: login.php " ) ;
5
exit;
 
?>

Mit folgender Funktion können angemeldete User ihr Passwort für ihr Konto zurücksetzen.

Schritt 7: Passwort ändern (reset-password.php)

 
<?php
// Initialisieren der Sitzung
1
session_start ( ) ;
// Überprüfen ob User angemeldet ist
2
if ( ! isset ( $_SESSION [ "loggedin" ] ) | | ( $_SESSION [ "loggedin" ] !== true ) {
3
header ( " location: login.php " ) ;
4
exit ;
5
}
// Konfigurationsdatei einschließen
6
if ( file_exists ( dbconect.php ) ) { require_once ( dbconect.php ) ; }
// Variablen definieren und mit leeren Werten initialisieren
7
$new_password = $confirm_password = " " ;
8
$new_password_err = $confirm_password_err = " " ;
// Formulardaten werden verarbeitet, wenn das Formular gesendet wird
9
if ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ) {
// Neues Passwort überprüfen
10
if ( empty ( trim ( $_POST [ " new_passwort " ] ) ) ) {
11
$new_password_err = " Bitte geben Sie ein neues Passwort ein. " ;
12
} elseif { strlen ( trim ( $_POST [ " new_passwort " ] ) ) < 6 ) {
13
$new_password_err = " Das neue Passwort muss mindestens 6 Zeichen haben. " ;
14
} else {
15
$new_password = trim ( $_POST [ " new_passwort " ] ) ;
16
}
// Neues Passwort bestätigen
17
if ( empty ( trim ( $_POST [ " confirm_passwort " ] ) ) ) {
18
$confirm_password_err = " Bitte bestätigen Sie das Passwort. " ;
19
} else {
20
$confirm_password = trim ( $_POST [ " confirm_passwort " ] ) ;
21
if ( empty ( $new_password_err ) && ( $new_password ! = $confirm_password ) ) {
22
$confirm_password_err = " Die Passwörter stimmen nicht überein. " ;
23
}
24
}
// Eingaben überprüfen, bevor Sie in die Datenbank eingefügt werden
25
if ( empty ( $new_password_err ) && empty ( $confirm_password_err ) ) {
// Einfügeanweisung vorbereiten
26
$sql = " UPDATE users SET password = ? WHERE id = ? ";
27
if ( $stmt = mysqli_prepare ( $link, $sql ) ) {
// Variablen als Parameter binden
28
mysqli_stmt_bind_param ( $stmt , " s i " , $param_password, $param_id );
// Parameter setzen
29
$param_password = password_hash ( $new_password, PASSWORD_DEFAULT );
30
$param_id = $_SESSION [ " id " ] ;
// Vorbereitete Anweisung auszuführen
31
if ( mysqli_stmt_execute ( $stmt ) ) {
// Passwort erfolgreich aktualisiert.
// Sitzung beenden zur Anmeldeseite umleiten
32
session_destroy ( ) ;
33
header ( " location: login.php " ) ;
34
exit ( ) ;
35
} else {
36
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
37
}
38
}
// Anweisung schließen
39
mysqli_stmt_close ( $stmt ) ;
40
}
// Verbindung schließen
41
mysqli_close ( $link ) ;
42
}
 
?>
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Passwort zurücksetzen </title>
6
<style>
7
body { font: 100% sans-serif; }
8
.wrapper { width: 35rem; padding: 2rem; }
9
</style>
10
</head>
11
<body>
12
<div class = " wrapper ">
13
<h2> Passwort zurücksetzen </h2>
14
<p> Bitte füllen Sie dieses Formular aus, um Ihr Passwort zurückzusetzen. </p>
15
<form action = " <?php echo htmlspecialchars ( $_SERVER [ " PHP_SELF " ] ); ?> " method = " post ">
16
<div class = " form-group <?php echo ( ! empty ( $new_password_err ) ) ? ' has-error ' : ' ' ; ?> ">
17
<label> Neues Password </label>
18
<input type = "password" name = "new_password" class = "form-control" value = "<?php echo $new_password; ?>" />
19
<span class = " help-block" > <?php echo $new_password_err; ?> </span>
20
</div>
21
<div class = " form-group <?php echo ( ! empty ( $confirm_password_err ) ) ? ' has-error ' : ' ' ; ?> ">
22
<label> Passwort bestätigen </label>
23
<input type = "password" name = "confirm_password" class = "form-control" value = "<?php echo $confirm_password; ?>" />
24
<span class = " help-block" > <?php echo $confirm_password_err; ?> </span>
25
</div>
26
<div class = " form-group ">
27
<input type = "submit" class = "btn btn-primary" value = "Senden" />
28
<a href = "welcome.php"> Abbrechen </a>
29
</div>
30
</form>
31
</div>
32
</body>
33
</html>
 
<?php
// Initialisieren der Sitzung
1
session_start ( ) ;
// Überprüfen ob User angemeldet ist
2
if ( ! isset ( $_SESSION [ "loggedin" ] ) | | ( $_SESSION [ "loggedin" ] !== true ) {
3
header ( " location: login.php " ) ;
4
exit ;
5
}
// Konfigurationsdatei einschließen
6
if ( file_exists ( dbconect.php ) ) { require_once ( dbconect.php ) ; }
// Variablen definieren und mit leeren Werten initialisieren
7
$new_password = $confirm_password = " " ;
8
$new_password_err = $confirm_password_err = " " ;
// Formulardaten werden verarbeitet, wenn das Formular gesendet wird
9
if ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ) {
// Neues Passwort überprüfen
10
if ( empty ( trim ( $_POST [ " new_passwort " ] ) ) ) {
11
$new_password_err = " Bitte geben Sie ein neues Passwort ein. " ;
12
} elseif { strlen ( trim ( $_POST [ " new_passwort " ] ) ) < 6 ) {
13
$new_password_err = " Das neue Passwort muss mindestens 6 Zeichen haben. " ;
14
} else {
15
$new_password = trim ( $_POST [ " new_passwort " ] ) ;
16
}
// Neues Passwort bestätigen
17
if ( empty ( trim ( $_POST [ " confirm_passwort " ] ) ) ) {
18
$confirm_password_err = " Bitte bestätigen Sie das Passwort. " ;
19
} else {
20
$confirm_password = trim ( $_POST [ " confirm_passwort " ] ) ;
21
if ( empty ( $new_password_err ) && ( $new_password ! = $confirm_password ) ) {
22
$confirm_password_err = " Die Passwörter stimmen nicht überein. " ;
23
}
24
}
// Eingaben überprüfen, bevor Sie in die Datenbank eingefügt werden
25
if ( empty ( $new_password_err ) && empty ( $confirm_password_err ) ) {
// Einfügeanweisung vorbereiten
26
$sql = " UPDATE users SET password = ? WHERE id = ? ";
27
if ( $stmt = $mysqli -> prepare ( $sql ) ) {
// Variablen als Parameter binden
28
$stmt -> bind_param ( " s i " , $param_password, $param_id );
// Parameter setzen
29
$param_password = password_hash ( $new_password, PASSWORD_DEFAULT );
30
$param_id = $_SESSION [ " id " ] ;
// Vorbereitete Anweisung auszuführen
31
if ( $stmt -> execute ( ) ) {
// Passwort erfolgreich aktualisiert.
// Sitzung beenden zur Anmeldeseite umleiten
32
session_destroy ( ) ;
33
header ( " location: login.php " ) ;
34
exit ( ) ;
35
} else {
36
echo " FEHLER! Bitte versuchen Sie es später noch einmal. " ;
37
}
38
}
// Anweisung schließen
39
$stmt -> close ( ) ;
40
}
// Verbindung schließen
41
$mysqli -> close ( ) ;
42
}
 
?>
// Html Formular
1
<!DOCTYPE html>
2
<html lang = "de"> <head>
3
<meta charset = " UTF - 8 ">
4
<link rel = "stylesheet" href = "https:// maxcdn.bootstrapcdn.com / bootstrap / 3.3.7 / css / bootstrap.css">
5
<title> Passwort zurücksetzen </title>
6
<style>
7
body { font: 100% sans-serif; }
8
.wrapper { width: 35rem; padding: 2rem; }
9
</style>
10
</head>
11
<body>
12
<div class = " wrapper ">
13
<h2> Passwort zurücksetzen </h2>
14
<p> Bitte füllen Sie dieses Formular aus, um Ihr Passwort zurückzusetzen. </p>
15
<form action = " <?php echo htmlspecialchars ( $_SERVER [ " PHP_SELF " ] ); ?> " method = " post ">
16
<div class = " form-group <?php echo ( ! empty ( $new_password_err ) ) ? ' has-error ' : ' ' ; ?> ">
17
<label> Neues Password </label>
18
<input type = "password" name = "new_password" class = "form-control" value = "<?php echo $new_password; ?>" />
19
<span class = " help-block" > <?php echo $new_password_err; ?> </span>
20
</div>
21
<div class = " form-group <?php echo ( ! empty ( $confirm_password_err ) ) ? ' has-error ' : ' ' ; ?> ">
22
<label> Passwort bestätigen </label>
23
<input type = "password" name = "confirm_password" class = "form-control" value = "<?php echo $confirm_password; ?>" />
24
<span class = " help-block" > <?php echo $confirm_password_err; ?> </span>
25
</div>
26
<div class = " form-group ">
27
<input type = "submit" class = "btn btn-primary" value = "Senden" />
28
<a href = "welcome.php"> Abbrechen </a>
29
</div>
30
</form>
31
</div>
32
</body>
33
</html>

Das ist natürlich nur ein Grundgerüst, das nach Bedarf noch verfeinert werden sollte.

Die Funktion mysqli -> real_escape_string () maskiert Sonderzeichen in einer Zeichenfolge und erstellt eine zulässige SQL-Zeichenfolge, um die Sicherheit gegen SQL-Injection zu gewährleisten.