- ';
foreach ($selected_services as $service) {
$emailHTML .= '
- ✓ ' . htmlspecialchars($service) . ' '; } $emailHTML .= '
0, 'time' => time()]; } $data = $_SESSION[$key]; if (time() - $data['time'] > 3600) { $_SESSION[$key] = ['count' => 0, 'time' => time()]; $data = $_SESSION[$key]; } if ($data['count'] >= 3) { return false; } return true; } // Input validation function validateInput($data, $type = 'text') { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); switch ($type) { case 'email': return filter_var($data, FILTER_VALIDATE_EMAIL) ? $data : false; case 'phone': return preg_match('/^[\+]?[0-9\s\-\(\)]+$/', $data) ? $data : false; case 'text': return strlen($data) > 0 ? $data : false; case 'long_text': return strlen($data) >= 20 ? $data : false; default: return $data; } } // Response function function sendResponse($success, $message, $data = null) { $response = [ 'success' => $success, 'message' => $message ]; if ($data !== null) { $response['data'] = $data; } echo json_encode($response); exit; } // Handle POST requests only if ($_SERVER['REQUEST_METHOD'] !== 'POST') { sendResponse(false, 'Invalid request method'); } // Check rate limiting if (!checkRateLimit()) { sendResponse(false, 'Too many requests. Please try again later.'); } // Validate and sanitize inputs $services = $_POST['services'] ?? []; $project_scale = validateInput($_POST['project_scale'] ?? '', 'text'); $timeline = validateInput($_POST['timeline'] ?? '', 'text'); $name = validateInput($_POST['name'] ?? '', 'text'); $email = validateInput($_POST['email'] ?? '', 'email'); $company = validateInput($_POST['company'] ?? '', 'text'); $phone = validateInput($_POST['phone'] ?? '', 'phone'); $data_sources = validateInput($_POST['data_sources'] ?? '', 'text'); $requirements = validateInput($_POST['requirements'] ?? '', 'long_text'); $budget = validateInput($_POST['budget'] ?? '', 'text'); // Validation $errors = []; if (empty($services) || !is_array($services)) { $errors[] = 'Please select at least one service'; } if (!$project_scale) { $errors[] = 'Please select a project scale'; } if (!$timeline) { $errors[] = 'Please select a timeline'; } if (!$name || strlen($name) < 2) { $errors[] = 'Please enter a valid name'; } if (!$email) { $errors[] = 'Please enter a valid email address'; } if (!$requirements) { $errors[] = 'Please provide detailed project requirements'; } if (!empty($errors)) { sendResponse(false, implode('. ', $errors)); } // Sanitize services array $services = array_map(function($service) { return htmlspecialchars(trim($service), ENT_QUOTES, 'UTF-8'); }, $services); // Update rate limit counter $ip = $_SERVER['REMOTE_ADDR']; $key = 'quote_' . md5($ip); $_SESSION[$key]['count']++; // Create friendly service names $service_names = [ 'web-scraping' => 'Web Scraping & Data Extraction', 'business-intelligence' => 'Business Intelligence & Analytics', 'data-processing' => 'Data Processing & Cleaning', 'automation' => 'Automation & APIs', 'consulting' => 'Custom Development', 'other' => 'Other Services' ]; $selected_services = array_map(function($service) use ($service_names) { return $service_names[$service] ?? $service; }, $services); // Create friendly scale names $scale_names = [ 'small' => 'Small Project (One-time extraction, < 10k records)', 'medium' => 'Medium Project (Regular updates, 10k-100k records)', 'large' => 'Large Project (Ongoing service, 100k+ records)', 'enterprise' => 'Enterprise (Complex multi-source solution)' ]; $friendly_scale = $scale_names[$project_scale] ?? $project_scale; // Create friendly timeline names $timeline_names = [ 'asap' => 'ASAP (Rush job)', '1-week' => 'Within 1 week', '2-4-weeks' => '2-4 weeks', 'flexible' => 'Flexible timeline' ]; $friendly_timeline = $timeline_names[$timeline] ?? $timeline; // Prepare email content $to = 'info@ukdataservices.co.uk'; $subject = 'New Quote Request - UK Data Services'; // Create detailed HTML email $emailHTML = '
UK Data Services
Received: ' . date('Y-m-d H:i:s') . ' UTC
UK Data Services
Dear ' . htmlspecialchars($name) . ',
Thank you for your detailed quote request! We have received your inquiry for ' . implode(', ', $selected_services) . ' and our team is already reviewing your requirements.
Project Scale: ' . htmlspecialchars($friendly_scale) . '
Timeline: ' . htmlspecialchars($friendly_timeline) . '
Services: ' . implode(', ', $selected_services) . '
Our data specialists will analyze your requirements and prepare a comprehensive proposal within 24 hours.
In the meantime, if you have any urgent questions or need to discuss your project immediately, please don\'t hesitate to contact us:
✓ 99.9% Data Accuracy Guarantee
✓ GDPR Compliant & Secure
✓ 24/7 Support & Monitoring
✓ Scalable Solutions
✓ Experienced Team
We\'re excited to help transform your business with professional data solutions!
Best regards,
The UK Data Services Team