setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { error_log("Database connection error: " . $e->getMessage()); die("Connection failed. Please try again later."); } // Utility functions function sanitize_input($data) { return htmlspecialchars(strip_tags(trim($data))); } function generate_csrf_token() { if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; } function validate_csrf_token($token) { return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token); } function redirect($url) { header("Location: $url"); exit(); } function is_logged_in() { return isset($_SESSION['user_id']) && isset($_SESSION['user_role']); } ?>