| | <!DOCTYPE html> |
| | <html lang="en"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>MSME Connect | Empowering Small Businesses</title> |
| | <script src="https://cdn.tailwindcss.com"></script> |
| | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| | <style> |
| | |
| | :root { |
| | --primary: #2563eb; |
| | --secondary: #1e40af; |
| | --accent: #3b82f6; |
| | --highlight: #93c5fd; |
| | --light: #f8fafc; |
| | --dark: #1e293b; |
| | } |
| | |
| | .bg-hero { |
| | background: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0.7)), |
| | url('https://images.unsplash.com/photo-1556740738-b6a63e27c4df?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80'); |
| | background-size: cover; |
| | background-position: center; |
| | } |
| | |
| | .service-card:hover { |
| | transform: translateY(-5px); |
| | box-shadow: 0 10px 25px rgba(0,0,0,0.1); |
| | } |
| | |
| | .testimonial-card:hover { |
| | box-shadow: 0 8px 30px rgba(0,0,0,0.12); |
| | } |
| | |
| | .partner-logo { |
| | filter: grayscale(100%); |
| | opacity: 0.6; |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .partner-logo:hover { |
| | filter: grayscale(0%); |
| | opacity: 1; |
| | } |
| | |
| | |
| | @keyframes fadeIn { |
| | from { opacity: 0; transform: translateY(20px); } |
| | to { opacity: 1; transform: translateY(0); } |
| | } |
| | |
| | .animate-fade-in { |
| | animation: fadeIn 0.8s ease-out forwards; |
| | } |
| | |
| | |
| | .delay-100 { animation-delay: 0.1s; } |
| | .delay-200 { animation-delay: 0.2s; } |
| | .delay-300 { animation-delay: 0.3s; } |
| | .delay-400 { animation-delay: 0.4s; } |
| | .delay-500 { animation-delay: 0.5s; } |
| | |
| | |
| | .error { |
| | border-color: #ef4444 !important; |
| | } |
| | .error-message { |
| | color: #ef4444; |
| | font-size: 0.875rem; |
| | margin-top: 0.25rem; |
| | } |
| | .success-message { |
| | background-color: #10b981; |
| | color: white; |
| | padding: 1rem; |
| | border-radius: 0.5rem; |
| | margin-bottom: 1rem; |
| | text-align: center; |
| | } |
| | </style> |
| | </head> |
| | <body class="font-sans text-slate-800 bg-slate-50"> |
| | <?php |
| | // Database connection |
| | $servername = "localhost"; |
| | $username = "root"; // Ganti dengan username MySQL Anda |
| | $password = ""; // Ganti dengan password MySQL Anda |
| | $dbname = "msme_connect"; // Ganti dengan nama database Anda |
| | |
| | // Create connection |
| | $conn = new mysqli($servername, $username, $password, $dbname); |
| | |
| | // Check connection |
| | if ($conn->connect_error) { |
| | die("Connection failed: " . $conn->connect_error); |
| | } |
| | |
| | // Initialize variables |
| | $business_name = $first_name = $last_name = $email = $phone = $sector = ""; |
| | $errors = array(); |
| | $success = false; |
| | |
| | // Form submission |
| | if ($_SERVER["REQUEST_METHOD"] == "POST") { |
| | // Validate and sanitize inputs |
| | $business_name = clean_input($_POST["business_name"]); |
| | if (empty($business_name)) { |
| | $errors["business_name"] = "Business name is required"; |
| | } |
| | |
| | $first_name = clean_input($_POST["first_name"]); |
| | if (empty($first_name)) { |
| | $errors["first_name"] = "First name is required"; |
| | } |
| | |
| | $last_name = clean_input($_POST["last_name"]); |
| | if (empty($last_name)) { |
| | $errors["last_name"] = "Last name is required"; |
| | } |
| | |
| | $email = clean_input($_POST["email"]); |
| | if (empty($email)) { |
| | $errors["email"] = "Email is required"; |
| | } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { |
| | $errors["email"] = "Invalid email format"; |
| | } |
| | |
| | $phone = clean_input($_POST["phone"]); |
| | if (empty($phone)) { |
| | $errors["phone"] = "Phone number is required"; |
| | } |
| | |
| | $sector = clean_input($_POST["sector"]); |
| | if (empty($sector)) { |
| | $errors["sector"] = "Business sector is required"; |
| | } |
| | |
| | $agree_terms = isset($_POST["agree_terms"]) ? 1 : 0; |
| | if (!$agree_terms) { |
| | $errors["agree_terms"] = "You must agree to the terms and conditions"; |
| | } |
| | |
| | // If no errors, insert into database |
| | if (empty($errors)) { |
| | $stmt = $conn->prepare("INSERT INTO business_registrations (business_name, first_name, last_name, email, phone, sector, agree_terms) |
| | VALUES (?, ?, ?, ?, ?, ?, ?)"); |
| | $stmt->bind_param("ssssssi", $business_name, $first_name, $last_name, $email, $phone, $sector, $agree_terms); |
| | |
| | if ($stmt->execute()) { |
| | $success = true; |
| | // Reset form fields |
| | $business_name = $first_name = $last_name = $email = $phone = $sector = ""; |
| | } else { |
| | $errors["database"] = "Error: " . $stmt->error; |
| | } |
| | |
| | $stmt->close(); |
| | } |
| | } |
| | |
| | // Function to clean input data |
| | function clean_input($data) { |
| | $data = trim($data); |
| | $data = stripslashes($data); |
| | $data = htmlspecialchars($data); |
| | return $data; |
| | } |
| | |
| | // Close connection |
| | $conn->close(); |
| | ?> |
| |
|
| | |
| | <header class="fixed w-full bg-white shadow-md z-50 transition-all duration-300"> |
| | <div class="container mx-auto px-6 py-4"> |
| | <div class="flex justify-between items-center"> |
| | <a href="#" class="flex items-center"> |
| | <i class="fas fa-store text-blue-700 text-3xl mr-2"></i> |
| | <span class="text-2xl font-bold text-blue-800">MSME<span class="text-blue-600">Connect</span></span> |
| | </a> |
| | |
| | |
| | <button id="menu-toggle" class="md:hidden focus:outline-none"> |
| | <i class="fas fa-bars text-2xl text-blue-800"></i> |
| | </button> |
| | |
| | |
| | <nav class="hidden md:flex space-x-8"> |
| | <a href="#home" class="font-semibold text-blue-800 hover:text-blue-600 transition">Home</a> |
| | <a href="#about" class="font-semibold text-slate-600 hover:text-blue-800 transition">About</a> |
| | <a href="#services" class="font-semibold text-slate-600 hover:text-blue-800 transition">Services</a> |
| | <a href="#benefits" class="font-semibold text-slate-600 hover:text-blue-800 transition">Benefits</a> |
| | <a href="#success" class="font-semibold text-slate-600 hover:text-blue-800 transition">Success Stories</a> |
| | <a href="#contact" class="font-semibold text-slate-600 hover:text-blue-800 transition">Contact</a> |
| | <a href="#register" class="font-semibold bg-blue-700 text-white px-4 py-2 rounded-lg hover:bg-blue-800 transition">Register Now</a> |
| | </nav> |
| | </div> |
| | |
| | |
| | <nav id="mobile-menu" class="md:hidden hidden mt-4 space-y-3 pb-3"> |
| | <a href="#home" class="block font-medium text-slate-700 hover:text-blue-700 transition">Home</a> |
| | <a href="#about" class="block font-medium text-slate-700 hover:text-blue-700 transition">About</a> |
| | <a href="#services" class="block font-medium text-slate-700 hover:text-blue-700 transition">Services</a> |
| | <a href="#benefits" class="block font-medium text-slate-700 hover:text-blue-700 transition">Benefits</a> |
| | <a href="#success" class="block font-medium text-slate-700 hover:text-blue-700 transition">Success Stories</a> |
| | <a href="#contact" class="block font-medium text-slate-700 hover:text-blue-700 transition">Contact</a> |
| | <a href="#register" class="block mt-2 w-full bg-blue-700 text-white font-semibold py-2 px-4 rounded-lg text-center hover:bg-blue-800 transition">Register Now</a> |
| | </nav> |
| | </div> |
| | </header> |
| |
|
| | |
| | <section id="register" class="py-20 bg-blue-700 text-white"> |
| | <div class="container mx-auto px-6"> |
| | <div class="flex flex-col lg:flex-row items-center gap-12"> |
| | <div class="lg:w-1/2 animate-fade-in"> |
| | <h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to Grow Your MSME?</h2> |
| | <p class="text-xl opacity-90 mb-6 leading-relaxed"> |
| | Join our network of successful MSMEs gaining access to financing, markets, training and support services. |
| | </p> |
| | <p class="text-xl opacity-90 mb-8 leading-relaxed"> |
| | Registration is free and takes less than 5 minutes. Let's build your business together! |
| | </p> |
| | |
| | <div class="mb-8"> |
| | <h3 class="text-xl font-semibold mb-4">Who can join?</h3> |
| | <div class="grid grid-cols-2 gap-4 text-white/90"> |
| | <div class="flex items-start"> |
| | <div class="flex-shrink-0 h-5 w-5 mt-1 mr-3"> |
| | <i class="fas fa-check"></i> |
| | </div> |
| | <p>Micro enterprises (1-10 employees)</p> |
| | </div> |
| | <div class="flex items-start"> |
| | <div class="flex-shrink-0 h-5 w-5 mt-1 mr-3"> |
| | <i class="fas fa-check"></i> |
| | </div> |
| | <p>Small businesses (11-50 employees)</p> |
| | </div> |
| | <div class="flex items-start"> |
| | <div class="flex-shrink-0 h-5 w-5 mt-1 mr-3"> |
| | <i class="fas fa-check"></i> |
| | </div> |
| | <p>Medium businesses (51-250 employees)</p> |
| | </div> |
| | <div class="flex items-start"> |
| | <div class="flex-shrink-0 h-5 w-5 mt-1 mr-3"> |
| | <i class="fas fa-check"></i> |
| | </div> |
| | <p>Startups & entrepreneurs</p> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| | |
| | <div class="lg:w-1/2 bg-white rounded-xl shadow-2xl overflow-hidden animate-fade-in delay-200"> |
| | <div class="p-8"> |
| | <h3 class="text-2xl font-bold text-blue-800 mb-6">Register Your Business</h3> |
| | |
| | <?php if ($success): ?> |
| | <div class="success-message"> |
| | Thank you for registering! We will contact you soon. |
| | </div> |
| | <?php endif; ?> |
| | |
| | <?php if (isset($errors['database'])): ?> |
| | <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert"> |
| | <?php echo $errors['database']; ?> |
| | </div> |
| | <?php endif; ?> |
| | |
| | <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#register" novalidate> |
| | <div class="mb-4"> |
| | <label for="business_name" class="block text-slate-700 text-sm font-medium mb-2">Business Name *</label> |
| | <input type="text" id="business_name" name="business_name" |
| | class="w-full px-4 py-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition <?php echo isset($errors['business_name']) ? 'error' : ''; ?>" |
| | value="<?php echo htmlspecialchars($business_name); ?>"> |
| | <?php if (isset($errors['business_name'])): ?> |
| | <p class="error-message"><?php echo $errors['business_name']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | |
| | <div class="grid md:grid-cols-2 gap-4 mb-4"> |
| | <div> |
| | <label for="first_name" class="block text-slate-700 text-sm font-medium mb-2">First Name *</label> |
| | <input type="text" id="first_name" name="first_name" |
| | class="w-full px-4 py-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition <?php echo isset($errors['first_name']) ? 'error' : ''; ?>" |
| | value="<?php echo htmlspecialchars($first_name); ?>"> |
| | <?php if (isset($errors['first_name'])): ?> |
| | <p class="error-message"><?php echo $errors['first_name']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | <div> |
| | <label for="last_name" class="block text-slate-700 text-sm font-medium mb-2">Last Name *</label> |
| | <input type="text" id="last_name" name="last_name" |
| | class="w-full px-4 py-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition <?php echo isset($errors['last_name']) ? 'error' : ''; ?>" |
| | value="<?php echo htmlspecialchars($last_name); ?>"> |
| | <?php if (isset($errors['last_name'])): ?> |
| | <p class="error-message"><?php echo $errors['last_name']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | </div> |
| | |
| | <div class="mb-4"> |
| | <label for="email" class="block text-slate-700 text-sm font-medium mb-2">Email Address *</label> |
| | <input type="email" id="email" name="email" |
| | class="w-full px-4 py-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition <?php echo isset($errors['email']) ? 'error' : ''; ?>" |
| | value="<?php echo htmlspecialchars($email); ?>"> |
| | <?php if (isset($errors['email'])): ?> |
| | <p class="error-message"><?php echo $errors['email']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | |
| | <div class="mb-4"> |
| | <label for="phone" class="block text-slate-700 text-sm font-medium mb-2">Phone Number *</label> |
| | <input type="tel" id="phone" name="phone" |
| | class="w-full px-4 py-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition <?php echo isset($errors['phone']) ? 'error' : ''; ?>" |
| | value="<?php echo htmlspecialchars($phone); ?>"> |
| | <?php if (isset($errors['phone'])): ?> |
| | <p class="error-message"><?php echo $errors['phone']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | |
| | <div class="mb-4"> |
| | <label for="sector" class="block text-slate-700 text-sm font-medium mb-2">Business Sector *</label> |
| | <select id="sector" name="sector" |
| | class="w-full px-4 py-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition <?php echo isset($errors['sector']) ? 'error' : ''; ?>"> |
| | <option value="">Select sector</option> |
| | <option value="agriculture" <?php echo ($sector == 'agriculture') ? 'selected' : ''; ?>>Agriculture</option> |
| | <option value="manufacturing" <?php echo ($sector == 'manufacturing') ? 'selected' : ''; ?>>Manufacturing</option> |
| | <option value="retail" <?php echo ($sector == 'retail') ? 'selected' : ''; ?>>Retail</option> |
| | <option value="services" <?php echo ($sector == 'services') ? 'selected' : ''; ?>>Services</option> |
| | <option value="technology" <?php echo ($sector == 'technology') ? 'selected' : ''; ?>>Technology</option> |
| | <option value="other" <?php echo ($sector == 'other') ? 'selected' : ''; ?>>Other</option> |
| | </select> |
| | <?php if (isset($errors['sector'])): ?> |
| | <p class="error-message"><?php echo $errors['sector']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | |
| | <div class="mb-6"> |
| | <label for="agree_terms" class="flex items-start"> |
| | <input type="checkbox" id="agree_terms" name="agree_terms" |
| | class="rounded text-blue-600 focus:ring-blue-500 border-slate-300 mt-1 <?php echo isset($errors['agree_terms']) ? 'error' : ''; ?>" |
| | <?php echo isset($_POST['agree_terms']) ? 'checked' : ''; ?>> |
| | <span class="ml-2 text-slate-700">I agree to the <a href="#" class="text-blue-600 hover:underline">terms and conditions</a></span> |
| | </label> |
| | <?php if (isset($errors['agree_terms'])): ?> |
| | <p class="error-message"><?php echo $errors['agree_terms']; ?></p> |
| | <?php endif; ?> |
| | </div> |
| | |
| | <button type="submit" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-lg transition duration-300 transform hover:scale-105"> |
| | Complete Registration |
| | </button> |
| | </form> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| | </section> |
| |
|
| | <script> |
| | |
| | document.getElementById('menu-toggle').addEventListener('click', function() { |
| | const menu = document.getElementById('mobile-menu'); |
| | const icon = this.querySelector('i'); |
| | |
| | |
| | menu.classList.toggle('hidden'); |
| | |
| | |
| | if (menu.classList.contains('hidden')) { |
| | icon.classList.remove('fa-times'); |
| | icon.classList.add('fa-bars'); |
| | } else { |
| | icon.classList.remove('fa-bars'); |
| | icon.classList.add('fa-times'); |
| | } |
| | }); |
| | |
| | |
| | document.querySelectorAll('a[href^="#"]').forEach(anchor => { |
| | anchor.addEventListener('click', function (e) { |
| | e.preventDefault(); |
| | |
| | const targetId = this.getAttribute('href'); |
| | if (targetId === '#') return; |
| | |
| | const targetElement = document.querySelector(targetId); |
| | if (targetElement) { |
| | targetElement.scrollIntoView({ |
| | behavior: 'smooth' |
| | }); |
| | |
| | |
| | const mobileMenu = document.getElementById('mobile-menu'); |
| | if (!mobileMenu.classList.contains('hidden')) { |
| | mobileMenu.classList.add('hidden'); |
| | document.getElementById('menu-toggle').querySelector('i').classList.remove('fa-times'); |
| | document.getElementById('menu-toggle').querySelector('i').classList.add('fa-bars'); |
| | } |
| | } |
| | }); |
| | }); |
| | |
| | |
| | window.addEventListener('scroll', function() { |
| | const header = document.querySelector('header'); |
| | if (window.scrollY > 100) { |
| | header.classList.add('shadow-lg'); |
| | header.classList.add('bg-white/95'); |
| | header.classList.add('backdrop-blur-sm'); |
| | } else { |
| | header.classList.remove('shadow-lg'); |
| | header.classList.remove('bg-white/95'); |
| | header.classList.remove('backdrop-blur-sm'); |
| | } |
| | }); |
| | |
| | |
| | const animateElements = document.querySelectorAll('.animate-fade-in'); |
| | |
| | const observer = new IntersectionObserver((entries) => { |
| | entries.forEach(entry => { |
| | if (entry.isIntersecting) { |
| | entry.target.style.opacity = 1; |
| | entry.target.style.transform = 'translateY(0)'; |
| | } |
| | }); |
| | }, { |
| | threshold: 0.1 |
| | }); |
| | |
| | animateElements.forEach(element => { |
| | element.style.opacity = 0; |
| | element.style.transform = 'translateY(20px)'; |
| | element.style.transition = 'opacity 0.6s ease, transform 0.6s ease'; |
| | observer.observe(element); |
| | }); |
| | |
| | |
| | document.querySelector('form').addEventListener('submit', function(e) { |
| | let isValid = true; |
| | const form = e.target; |
| | |
| | |
| | document.querySelectorAll('.error').forEach(el => { |
| | el.classList.remove('error'); |
| | }); |
| | document.querySelectorAll('.error-message').forEach(el => { |
| | el.style.display = 'none'; |
| | }); |
| | |
| | |
| | const requiredFields = [ |
| | 'business_name', |
| | 'first_name', |
| | 'last_name', |
| | 'email', |
| | 'phone', |
| | 'sector', |
| | 'agree_terms' |
| | ]; |
| | |
| | requiredFields.forEach(fieldId => { |
| | const field = form[fieldId]; |
| | if (field) { |
| | if (field.type === 'checkbox') { |
| | if (!field.checked) { |
| | isValid = false; |
| | const label = field.closest('label'); |
| | if (label) { |
| | label.classList.add('error'); |
| | } |
| | |
| | const errorElement = document.createElement('p'); |
| | errorElement.className = 'error-message'; |
| | errorElement.textContent = 'You must agree to the terms and conditions'; |
| | label.after(errorElement); |
| | } |
| | } else if (!field.value.trim()) { |
| | isValid = false; |
| | field.classList.add('error'); |
| | |
| | const errorElement = document.createElement('p'); |
| | errorElement.className = 'error-message'; |
| | errorElement.textContent = 'This field is required'; |
| | field.after(errorElement); |
| | } |
| | } |
| | }); |
| | |
| | |
| | const emailField = form['email']; |
| | if (emailField && emailField.value.trim()) { |
| | const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; |
| | if (!emailRegex.test(emailField.value.trim())) { |
| | isValid = false; |
| | emailField.classList.add('error'); |
| | |
| | const errorElement = document.createElement('p'); |
| | errorElement.className = 'error-message'; |
| | errorElement.textContent = 'Please enter a valid email address'; |
| | emailField.after(errorElement); |
| | } |
| | } |
| | |
| | if (!isValid) { |
| | e.preventDefault(); |
| | |
| | const firstError = document.querySelector('.error'); |
| | if (firstError) { |
| | firstError.scrollIntoView({ |
| | behavior: 'smooth', |
| | block: 'center' |
| | }); |
| | } |
| | } |
| | }); |
| | </script> |
| | </body> |
| | </html> |