PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); $userId = (int) $_SESSION['user_id']; $errors = []; $successMessage = ''; function h(?string $value): string { return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8'); } $stmtUser = $pdo->prepare(" SELECT `id`, `username`, `email`, `display_name`, `role`, `is_active` FROM `app_users` WHERE `id` = :id LIMIT 1 "); $stmtUser->execute([':id' => $userId]); $user = $stmtUser->fetch(); if (!$user) { $_SESSION = []; session_destroy(); header('Location: login.php'); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; if ($action === 'update_profile') { $displayName = trim($_POST['display_name'] ?? ''); $email = trim($_POST['email'] ?? ''); if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Bitte eine gueltige E-Mail-Adresse eingeben.'; } if ($displayName !== '' && mb_strlen($displayName) > 100) { $errors[] = 'Der Anzeigename darf maximal 100 Zeichen lang sein.'; } if (empty($errors)) { $stmtCheck = $pdo->prepare(" SELECT `id` FROM `app_users` WHERE `email` = :email AND `id` <> :id LIMIT 1 "); $stmtCheck->execute([ ':email' => $email, ':id' => $userId, ]); if ($stmtCheck->fetch()) { $errors[] = 'Die E-Mail-Adresse ist bereits vergeben.'; } } if (empty($errors)) { $stmtUpdate = $pdo->prepare(" UPDATE `app_users` SET `display_name` = :display_name, `email` = :email, `updated_at` = NOW() WHERE `id` = :id "); $stmtUpdate->execute([ ':display_name' => $displayName !== '' ? $displayName : null, ':email' => $email, ':id' => $userId, ]); $_SESSION['display_name'] = $displayName !== '' ? $displayName : null; $successMessage = 'Die Kontodaten wurden gespeichert.'; } } if ($action === 'change_password') { $currentPassword = $_POST['current_password'] ?? ''; $newPassword = $_POST['new_password'] ?? ''; $newPasswordRepeat = $_POST['new_password_repeat'] ?? ''; $stmtPassword = $pdo->prepare(" SELECT `password_hash` FROM `app_users` WHERE `id` = :id LIMIT 1 "); $stmtPassword->execute([':id' => $userId]); $passwordRow = $stmtPassword->fetch(); if (!$passwordRow || !password_verify($currentPassword, $passwordRow['password_hash'])) { $errors[] = 'Das aktuelle Passwort ist nicht korrekt.'; } if ($newPassword === '') { $errors[] = 'Bitte ein neues Passwort eingeben.'; } elseif (strlen($newPassword) < 8) { $errors[] = 'Das neue Passwort muss mindestens 8 Zeichen lang sein.'; } if ($newPassword !== $newPasswordRepeat) { $errors[] = 'Die neuen Passwoerter stimmen nicht ueberein.'; } if (empty($errors)) { $newHash = password_hash($newPassword, PASSWORD_DEFAULT); $stmtUpdatePassword = $pdo->prepare(" UPDATE `app_users` SET `password_hash` = :password_hash, `updated_at` = NOW() WHERE `id` = :id "); $stmtUpdatePassword->execute([ ':password_hash' => $newHash, ':id' => $userId, ]); $successMessage = 'Das Passwort wurde geaendert.'; } } $stmtUser->execute([':id' => $userId]); $user = $stmtUser->fetch(); } $loggedIn = true; ?>

Kontodaten

Benutzername
Rolle

Passwort aendern