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 = "

You're in!

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 = "

You’re in!

Thanks for registering for " . htmlspecialchars($webinar['title']) . ".

Check your email for your confirmation. You can now log in to see the details.

Add to Google Calendar Add to Outlook (ICS)
"; 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']); } } ?> Register for <?= htmlspecialchars($webinar['title']) ?>

Loading date...

Speakers

Philip Daineka Philip Daineka
Alex Rubanau Alex Rubanau
Alexey Vertel Alexey Vertel

Already Registered

You can view webinar details on your dashboard.

Go to Dashboard Back to Home

Register & Get Calendar Invite