PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); $errors = []; if (isset($_SESSION['user_id'])) { header('Location: index.php'); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $login = trim($_POST['login'] ?? ''); $password = $_POST['password'] ?? ''; if ($login === '') { $errors[] = 'Bitte Benutzername oder E-Mail eingeben.'; } if ($password === '') { $errors[] = 'Bitte das Passwort eingeben.'; } if (empty($errors)) { $stmt = $pdo->prepare(" SELECT `id`, `username`, `email`, `password_hash`, `display_name`, `role`, `is_active` FROM `app_users` WHERE `username` = :login OR `email` = :login LIMIT 1 "); $stmt->execute([ ':login' => $login, ]); $user = $stmt->fetch(); if (!$user) { $errors[] = 'Die Anmeldedaten sind ungültig.'; } elseif (!password_verify($password, $user['password_hash'])) { $errors[] = 'Die Anmeldedaten sind ungültig.'; } elseif ((int)$user['is_active'] !== 1) { $errors[] = 'Dein Konto ist noch nicht freigeschaltet.'; } else { session_regenerate_id(true); $_SESSION['user_id'] = (int)$user['id']; $_SESSION['username'] = $user['username']; $_SESSION['display_name'] = $user['display_name']; $_SESSION['role'] = $user['role']; $stmtUpdateLogin = $pdo->prepare(" UPDATE `app_users` SET `last_login_at` = NOW() WHERE `id` = :id "); $stmtUpdateLogin->execute([ ':id' => $user['id'], ]); header('Location: index.php'); exit; } } } $loggedIn = false; ?>

Anmelden