prepare("SELECT * FROM users WHERE username = ?"); $stmt->execute([$username]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; return true; } return false; } function logout(): void { $_SESSION = []; session_destroy(); } function is_logged_in(): bool { return isset($_SESSION['user_id']); } function require_login(): void { if (!is_logged_in()) { header('Location: /admin/login.php'); exit; } } function register(string $name, string $username, string $email, string $password): int|false { $pdo = db(); $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (name, username, email, password) VALUES (?, ?, ?, ?)"); try { $stmt->execute([$name, $username, $email, $hashed_password]); return (int)$pdo->lastInsertId(); } catch (PDOException $e) { // 1062 is the error code for duplicate entry if ($e->errorInfo[1] == 1062) { return false; } throw $e; } }