"$num1 $operator $num2 = ?", 'num1' => $num1, 'num2' => $num2, 'operator' => $operator ]; } /** * Verify captcha answer */ public static function verify($answer) { // Start session if not already started if (session_status() === PHP_SESSION_NONE) { session_start(); } // Check if captcha exists in session if (!isset($_SESSION[self::$sessionKey])) { return false; } // Verify answer $isValid = (int)$answer === $_SESSION[self::$sessionKey]; // Clear captcha after verification unset($_SESSION[self::$sessionKey]); return $isValid; } /** * Get HTML for captcha display */ public static function getHtml() { $captcha = self::generate(); ob_start(); ?>
=
$captcha['question'], 'num1' => $captcha['num1'], 'num2' => $captcha['num2'], 'operator' => $captcha['operator'] ]; } /** * Refresh captcha (for AJAX) */ public static function refresh() { return self::generate(); } /** * Check if captcha is required for current user */ public static function isRequired() { // Check if user is logged in as admin if (session_status() === PHP_SESSION_NONE) { session_start(); } if (isset($_SESSION['user_id']) && isset($_SESSION['user_role'])) { return $_SESSION['user_role'] !== 'admin'; } return true; // Captcha required for non-admin users } }