false, ‘message’ => ‘Método no permitido’]); exit; } // Configuración de n8n webhook // IMPORTANTE: Reemplaza esta URL con tu webhook de n8n $n8n_webhook_url = ‘https://tu-servidor-n8n.com/webhook/tu-webhook-id’; // Recoger y sanitizar datos del formulario $data = [ ‘course’ => sanitize_input($_POST[‘course’] ?? ”), ‘courseName’ => sanitize_input($_POST[‘courseName’] ?? ”), ‘period’ => sanitize_input($_POST[‘period’] ?? ”), ‘fullName’ => sanitize_input($_POST[‘fullName’] ?? ”), ‘dateOfBirth’ => sanitize_input($_POST[‘dateOfBirth’] ?? ”), ‘nationality’ => sanitize_input($_POST[‘nationality’] ?? ”), ’email’ => filter_var($_POST[’email’] ?? ”, FILTER_SANITIZE_EMAIL), ‘mobilePrefix’ => sanitize_input($_POST[‘mobilePrefix’] ?? ”), ‘mobile’ => sanitize_input($_POST[‘mobile’] ?? ”), ‘address’ => sanitize_input($_POST[‘address’] ?? ”), ‘townCity’ => sanitize_input($_POST[‘townCity’] ?? ”), ‘country’ => sanitize_input($_POST[‘country’] ?? ”), ‘timestamp’ => date(‘Y-m-d H:i:s’), ‘ip_address’ => $_SERVER[‘REMOTE_ADDR’] ?? ‘Unknown’ ]; // Validación básica $errors = []; if (empty($data[‘course’])) { $errors[] = ‘El curso es requerido’; } if (empty($data[‘period’])) { $errors[] = ‘El período es requerido’; } if (empty($data[‘fullName’])) { $errors[] = ‘El nombre completo es requerido’; } if (!filter_var($data[’email’], FILTER_VALIDATE_EMAIL)) { $errors[] = ‘El email no es válido’; } if (empty($data[‘mobile’])) { $errors[] = ‘El número de móvil es requerido’; } // Si hay errores, devolver respuesta de error if (!empty($errors)) { echo json_encode([ ‘success’ => false, ‘message’ => ‘Errores de validación’, ‘errors’ => $errors ]); exit; } // Enviar datos a n8n $response = send_to_n8n($n8n_webhook_url, $data); // Verificar respuesta if ($response[‘success’]) { // Opcionalmente, guardar en base de datos local como backup // save_to_database($data); // Enviar email de confirmación al usuario send_confirmation_email($data); echo json_encode([ ‘success’ => true, ‘message’ => ‘Formulario enviado correctamente’, ‘data’ => $data ]); } else { // Log del error error_log(‘Error enviando a n8n: ‘ . $response[‘error’]); echo json_encode([ ‘success’ => false, ‘message’ => ‘Error al procesar el formulario. Por favor, intente nuevamente.’, ‘debug’ => $response[‘error’] // Quitar en producción ]); } // Funciones auxiliares function sanitize_input($input) { $input = trim($input); $input = stripslashes($input); $input = htmlspecialchars($input); return $input; } function send_to_n8n($webhook_url, $data) { // Inicializar cURL $ch = curl_init($webhook_url); // Configurar opciones de cURL curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ ‘Content-Type: application/json’, ‘Accept: application/json’ ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Solo para desarrollo curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Ejecutar petición $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curl_error = curl_error($ch); // Cerrar cURL curl_close($ch); // Verificar resultado if ($curl_error) { return [ ‘success’ => false, ‘error’ => ‘cURL Error: ‘ . $curl_error ]; } if ($http_code >= 200 && $http_code < 300) { return [ 'success' => true, ‘response’ => $response ]; } else { return [ ‘success’ => false, ‘error’ => ‘HTTP Error: ‘ . $http_code . ‘ – Response: ‘ . $response ]; } } function send_confirmation_email($data) { $to = $data[’email’]; $subject = ‘Confirmación de inscripción – ‘ . $data[‘courseName’]; $message = ” Confirmación de inscripción

Gracias por tu inscripción

Hola {$data[‘fullName’]},

Hemos recibido tu solicitud de inscripción para el siguiente curso:

  • Curso: {$data[‘courseName’]}
  • Fecha de inicio: {$data[‘period’]}

Nos pondremos en contacto contigo pronto con más información.

Saludos,
El equipo de admisiones

“; $headers = “MIME-Version: 1.0” . “\r\n”; $headers .= “Content-type:text/html;charset=UTF-8” . “\r\n”; $headers .= ‘From: noreply@tudominio.com’ . “\r\n”; // Enviar email @mail($to, $subject, $message, $headers); } // Función opcional para guardar en base de datos local function save_to_database($data) { // Configuración de base de datos $servername = “localhost”; $username = “tu_usuario”; $password = “tu_password”; $dbname = “tu_base_datos”; try { $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = “INSERT INTO inscripciones (course, course_name, period, full_name, date_of_birth, nationality, email, mobile_prefix, mobile, address, town_city, country, created_at, ip_address) VALUES (:course, :courseName, :period, :fullName, :dateOfBirth, :nationality, :email, :mobilePrefix, :mobile, :address, :townCity, :country, :timestamp, :ip_address)”; $stmt = $conn->prepare($sql); $stmt->execute($data); } catch(PDOException $e) { error_log(“Error guardando en base de datos: ” . $e->getMessage()); } $conn = null; } ?>