PHP - MySQL Login: Ein Anfängerleitfaden

Hallo da draußen, ambitionierte Web-Entwickler! Heute machen wir uns auf eine aufregende Reise in die Welt von PHP und MySQL, um ein einfaches, aber leistungsstarkes Anmeldesystem zu erstellen. Als jemand, der dieses Zeug seit Jahren lehrt, kann ich dir sagen, dass das Beherrschen dieser Fähigkeit wie das Öffnen einer geheimen Tür in der Welt der Web-Entwicklung ist. Also, rollen wir die Ärmel hoch und tauchen ein!

PHP - MySQL Login

Das große Ganze verstehen

Bevor wir mit dem Coden beginnen, lassen wir uns einen Moment Zeit, um zu verstehen, was wir erreichen möchten. Stell dir vor, du baust ein Baumhaus. Du brauchst eine solide Grundlage, Wände, ein Dach und eine Möglichkeit, hinein- und herauszukommen. Unser PHP-MySQL-Anmeldesystem ist ähnlich aufgebaut:

  • Config.php: Das ist unsere Grundlage, die uns mit der Datenbank verbindet.
  • Login.php: Denke daran als die Tür zu unserem Baumhaus.
  • Session.php: Diese verfolgt, wer im Baumhaus ist.
  • Welcome.php: Der gemütliche Innenraum, in dem autorisierte Benutzer verweilen.
  • Logout.php: Das Ausgangsschild, das den Benutzern den Weg hinaus zeigt.

Jetzt bauen wir jeden Teil Schritt für Schritt!

Config.php: Die Grundlage legen

Diese Datei ist wie das geheime Handshake zwischen PHP und MySQL. Hier speichern wir unsere Datenbankverbindungsdetails.

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');

$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($conn === false){
die("FEHLER: Konnte nicht verbinden. " . mysqli_connect_error());
}
?>

Lassen wir das auseinanderbrechen:

  • Wir verwenden define() um Konstanten für unsere Datenbankdetails zu setzen.
  • mysqli_connect() stellt die Verbindung zu unserer MySQL-Datenbank her.
  • Wenn die Verbindung fehlschlägt, verwenden wir die() um die Ausführung zu stoppen und eine Fehlermeldung anzuzeigen.

Pro-Tipp: Teile niemals deine echten Datenbankanmeldeinformationen! Dieses Beispiel verwendet Standardwerte, aber in einem realen Projekt solltest du diese geheim halten!

Login.php: Der Türsteher

Hier passiert die Magie. Benutzer geben ihre Anmeldeinformationen ein und wir prüfen, ob sie hereingelassen werden dürfen.

<?php
session_start();
require_once "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);

$sql = "SELECT id, username, password FROM users WHERE username = ?";

if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;

if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Ungültiger Benutzername oder Passwort.";
}
}
} else{
$login_err = "Ungültiger Benutzername oder Passwort.";
}
} else{
echo "Hoppla! Etwas ist schiefgelaufen. Bitte versuche es später noch einmal.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Anmelden</title>
</head>
<body>
<h2>Anmelden</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Benutzername</label>
<input type="text" name="username" required>
</div>
<div>
<label>Passwort</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Anmelden">
</div>
</form>
</body>
</html>

Wow, das ist viel zu verdauen! Lassen wir das auseinanderbrechen:

  • Wir starten die Sitzung und inkludieren unsere Config-Datei.
  • Wir prüfen, ob das Formular per POST übermittelt wurde.
  • Wir verwenden vorbereitete Anweisungen, um SQL-Injektionen zu verhindern (eine häufige Sicherheitslücke).
  • Wir überprüfen das Passwort mit password_verify() (immer Passwörter in realen Projekten hashen!).
  • Wenn die Anmeldung erfolgreich ist, setzen wir Sitzungsvariablen und leiten um zu welcome.php.
  • Wir haben auch ein einfaches HTML-Formular für Benutzer, um ihre Anmeldeinformationen einzugeben.

Denke daran, in realen Anwendungen möchtest du zusätzliche Sicherheitsmaßnahmen und Fehlerbehandlungen hinzufügen!

Session.php: Der Türsteher

Diese Datei überprüft, ob ein Benutzer angemeldet ist. Wenn nicht, leitet sie sie zurück zur Anmeldeseite weiter.

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>

Kurz und süß! Dieses Skript:

  • Startet die Sitzung.
  • Überprüft, ob der Benutzer angemeldet ist.
  • Wenn nicht, leitet es sie zur Anmeldeseite weiter.

Welcome.php: Der VIP-Bereich

Dies ist der Ort, an den Benutzer nach einer erfolgreichen Anmeldung gelangen.

<?php
require_once "session.php";
?>

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Willkommen</title>
</head>
<body>
<h1>Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Willkommen auf unserer Website.</h1>
<p>
<a href="logout.php">Abmelden</a>
</p>
</body>
</html>

Hier ist, was passiert:

  • Wir inkludieren session.php, um sicherzustellen, dass nur angemeldete Benutzer auf diese Seite zugreifen können.
  • Wir显示 eine personalisierte Begrüßungsnachricht, die den in der Sitzung gespeicherten Benutzernamen verwendet.
  • Wir bieten einen Link zum Abmelden.

Logout.php: Der Ausgang

Schließlich benötigen wir eine Möglichkeit für Benutzer, sich sicher abzumelden.

<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>

Dieses Skript:

  • Startet die Sitzung.
  • Setzt alle Sitzungsvariablen zurück.
  • Zerstört die Sitzung.
  • Leitet den Benutzer zurück zur Anmeldeseite weiter.

Alles zusammenfügen

Nun, da wir alle Teile gebaut haben, lassen uns zusammenfassen, wie sie zusammenarbeiten:

Datei Zweck Schlüssel-Funktionen
Config.php Datenbankverbindung mysqli_connect()
Login.php Benutzerauthentifizierung mysqli_prepare(), password_verify()
Session.php Sitzungsverwaltung session_start(), $_SESSION-Prüfungen
Welcome.php Authorisierte Benutzerseite Zeigt personalisierte Inhalte an
Logout.php Beenden der Benutzer-Sitzung session_destroy()

Und das war's! Du hast gerade ein grundlegendes PHP-MySQL-Anmeldesystem gebaut. Denke daran, dass dies nur der Anfang ist. In realen Anwendungen möchtest du zusätzliche Funktionen hinzufügen wie:

  • Passwortrücksetzfunktion
  • Option "Erinnere mich"
  • Robustere Fehlerbehandlung
  • Erhöhte Sicherheitsmaßnahmen

Weiter üben, bleib neugierig, und bevor du es weißt, wirst du komplexe Webanwendungen mit Leichtigkeit erstellen. Viel Spaß beim Coden, zukünftige Web-Zauberer!

Credits: Image by storyset