prepare("SELECT id, title, description, scheduled_at, presenter FROM webinars WHERE id = ?"); $stmt->execute([$id]); return $stmt->fetch(PDO::FETCH_ASSOC); } catch (PDOException $e) { error_log("Database error fetching webinar ID $id: " . $e->getMessage()); return null; } } $webinar_id = filter_input(INPUT_GET, 'webinar_id', FILTER_VALIDATE_INT) ?: filter_input(INPUT_POST, 'webinar_id', FILTER_VALIDATE_INT) ?: 1; $webinar = get_webinar_details($webinar_id); if (!$webinar) { http_response_code(404); echo "Webinar not found."; exit; } $error_message = null; $success_message = null; $form_data = $_SESSION['form_data'] ?? []; unset($_SESSION['form_data']); // --- FORM SUBMISSION (POST REQUEST) --- if ($_SERVER["REQUEST_METHOD"] == "POST") { // --- DATA CAPTURE --- $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); $first_name = filter_input(INPUT_POST, 'first_name', FILTER_SANITIZE_STRING); $last_name = filter_input(INPUT_POST, 'last_name', FILTER_SANITIZE_STRING); $company = filter_input(INPUT_POST, 'company', FILTER_SANITIZE_STRING); $how_did_you_hear = filter_input(INPUT_POST, 'how_did_you_hear', FILTER_SANITIZE_STRING); $password = filter_input(INPUT_POST, 'password', FILTER_UNSAFE_RAW); $confirm_password = filter_input(INPUT_POST, 'confirm_password', FILTER_UNSAFE_RAW); $timezone = filter_input(INPUT_POST, 'timezone', FILTER_SANITIZE_STRING); // Store form data in session to repopulate on error $_SESSION['form_data'] = $_POST; if (!$first_name || !$last_name || !$email) { $error_message = 'Please fill out all required fields.'; } elseif ($password !== $confirm_password) { $error_message = 'Passwords do not match.'; } else { try { $stmt = db()->prepare("SELECT id FROM attendees WHERE webinar_id = ? AND email = ?"); $stmt->execute([$webinar_id, $email]); if ($stmt->fetch()) { $error_message = 'You are already registered for this webinar.'; } else { $password_hash = password_hash($password, PASSWORD_DEFAULT); $sql = "INSERT INTO attendees (webinar_id, first_name, last_name, email, company, how_did_you_hear, password, timezone) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; $stmt = db()->prepare($sql); $stmt->execute([$webinar_id, $first_name, $last_name, $email, $company, $how_did_you_hear, $password_hash, $timezone]); $webinar_date_obj = new DateTime($webinar['scheduled_at']); $subject = "Confirmation: You're Registered for " . $webinar['title']; $body_html = "
Thanks for registering for our webinar: {$webinar['title']}.
It will take place on " . $webinar_date_obj->format('l, F j, Y \a\t g:i A T') . ".
You can now log in to your dashboard to see the details.
"; MailService::sendMail($email, $subject, $body_html); // --- PREPARE SUCCESS RESPONSE --- $webinar_date = new DateTime($webinar['scheduled_at'], new DateTimeZone('UTC')); $start_time_utc = $webinar_date->format('Ymd\THis\Z'); $webinar_date->add(new DateInterval('PT1H')); // Assume 1 hour duration $end_time_utc = $webinar_date->format('Ymd\THis\Z'); $google_link = 'https://www.google.com/calendar/render?action=TEMPLATE&text=' . urlencode($webinar['title']) . '&dates=' . $start_time_utc . '/' . $end_time_utc . '&details=' . urlencode($webinar['description']) . '&ctz=UTC'; $ics_content = implode("\r\n", [ 'BEGIN:VCALENDAR', 'VERSION:2.0', 'BEGIN:VEVENT', 'URL:' . 'http://' . $_SERVER['HTTP_HOST'], 'DTSTART:' . $start_time_utc, 'DTEND:' . $end_time_utc, 'SUMMARY:' . $webinar['title'], 'DESCRIPTION:' . $webinar['description'], 'END:VEVENT', 'END:VCALENDAR' ]); $outlook_link = 'data:text/calendar;charset=utf-8,' . rawurlencode($ics_content); $success_message = "Thanks for registering for " . htmlspecialchars($webinar['title']) . ".
Check your email for your confirmation. You can now log in to see the details.
"; unset($_SESSION['form_data']); // Clear form data on success } } catch (Exception $e) { error_log("Registration error: " . $e->getMessage()); $error_message = 'An unexpected error occurred. Please try again.'; } } if ($error_message) { // Redirect back to the form with the error message $_SESSION['error_message'] = $error_message; header("Location: register.php?webinar_id = " . $webinar_id); exit; } } else { // On GET request, check for session error messages if (isset($_SESSION['error_message'])) { $error_message = $_SESSION['error_message']; unset($_SESSION['error_message']); } } ?>= htmlspecialchars($webinar['description']) ?>
Philip Daineka
Alex Rubanau
Alexey Vertel