false, 'message' => 'Invalid request method.']); exit; } $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); $message = trim($_POST['message'] ?? ''); if (empty($name) || empty($email) || empty($message)) { echo json_encode(['success' => false, 'message' => 'Please fill out all fields.']); exit; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo json_encode(['success' => false, 'message' => 'Please provide a valid email address.']); exit; } try { $pdo = db(); // Create table if it doesn't exist (idempotent) $pdo->exec("CREATE TABLE IF NOT EXISTS contact_submissions ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, message TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); // Insert submission $stmt = $pdo->prepare("INSERT INTO contact_submissions (name, email, message) VALUES (?, ?, ?)"); $stmt->execute([$name, $email, $message]); // Send email notification // The recipient is determined by the MAIL_TO env var by default. $mailResult = MailService::sendContactMessage($name, $email, $message); if ($mailResult['success']) { echo json_encode(['success' => true, 'message' => 'Thank you! Your message has been sent.']); } else { // Still a success for the user, but log the mail error. error_log("Contact form saved to DB, but mail sending failed: " . ($mailResult['error'] ?? 'Unknown error')); echo json_encode(['success' => true, 'message' => 'Thank you! Your message has been received.']); } } catch (PDOException $e) { error_log("Database error: " . $e->getMessage()); echo json_encode(['success' => false, 'message' => 'A server error occurred while saving your message.']); } catch (Exception $e) { error_log("General error: " . $e->getMessage()); echo json_encode(['success' => false, 'message' => 'A server error occurred.']); }