Spaces:
Running
Running
| ```php | |
| session_start(); | |
| require_once 'includes/config.php'; | |
| // Redirect if already logged in | |
| if (isset($_SESSION['user_id'])) { | |
| header('Location: ' . ($_SESSION['user_role'] === 'admin' ? 'admin-dashboard.php' : 'user-dashboard.php')); | |
| exit; | |
| } | |
| // Handle form submission | |
| if ($_SERVER['REQUEST_METHOD'] === 'POST') { | |
| $email = $_POST['email']; | |
| $password = $_POST['password']; | |
| // TODO: Validate credentials against database | |
| // For now, we'll simulate a login | |
| if (!empty($email) && !empty($password)) { | |
| $_SESSION['user_id'] = 1; | |
| $_SESSION['user_email'] = $email; | |
| $_SESSION['user_name'] = 'John Doe'; | |
| $_SESSION['user_role'] = strpos($email, 'admin@') !== false ? 'admin' : 'user'; | |
| header('Location: ' . ($_SESSION['user_role'] === 'admin' ? 'admin-dashboard.php' : 'user-dashboard.php')); | |
| exit; | |
| } else { | |
| $error = "Please enter both email and password"; | |
| } | |
| } | |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Login | CommunityPulse Hub</title> | |
| <link rel="stylesheet" href="style.css"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| </head> | |
| <body class="bg-gray-50 min-h-screen flex flex-col"> | |
| <custom-navbar></custom-navbar> | |
| <main class="flex-grow flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8"> | |
| <div class="w-full max-w-md space-y-8"> | |
| <div class="text-center"> | |
| <i data-feather="users" class="mx-auto h-12 w-12 text-primary-500"></i> | |
| <h2 class="mt-6 text-3xl font-extrabold text-gray-900">Sign in to your account</h2> | |
| <p class="mt-2 text-sm text-gray-600"> | |
| Or <a href="/register.php" class="font-medium text-primary-500 hover:text-primary-600">register for an account</a> | |
| </p> | |
| </div> | |
| <?php if (isset($error)): ?> | |
| <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative" role="alert"> | |
| <span class="block sm:inline"><?php echo htmlspecialchars($error); ?></span> | |
| </div> | |
| <?php endif; ?> | |
| <form class="mt-8 space-y-6" id="loginForm" method="POST"> | |
| <div class="rounded-md shadow-sm space-y-4"> | |
| <div> | |
| <label for="email" class="block text-sm font-medium text-gray-700 mb-1">Email address</label> | |
| <input id="email" name="email" type="email" autocomplete="email" required | |
| class="appearance-none relative block w-full px-3 py-3 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-md focus:outline-none focus:ring-primary-500 focus:border-primary-500 focus:z-10 sm:text-sm" | |
| placeholder="Email address"> | |
| </div> | |
| <div> | |
| <label for="password" class="block text-sm font-medium text-gray-700 mb-1">Password</label> | |
| <input id="password" name="password" type="password" autocomplete="current-password" required | |
| class="appearance-none relative block w-full px-3 py-3 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-md focus:outline-none focus:ring-primary-500 focus:border-primary-500 focus:z-10 sm:text-sm" | |
| placeholder="Password"> | |
| </div> | |
| </div> | |
| <div class="flex items-center justify-between"> | |
| <div class="flex items-center"> | |
| <input id="remember-me" name="remember-me" type="checkbox" | |
| class="h-4 w-4 text-primary-500 focus:ring-primary-500 border-gray-300 rounded"> | |
| <label for="remember-me" class="ml-2 block text-sm text-gray-900">Remember me</label> | |
| </div> | |
| <div class="text-sm"> | |
| <a href="/forgot-password.php" class="font-medium text-primary-500 hover:text-primary-600">Forgot your password?</a> | |
| </div> | |
| </div> | |
| <div> | |
| <button type="submit" class="group relative w-full flex justify-center py-3 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-primary-500 hover:bg-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500 transition duration-300"> | |
| <span class="absolute left-0 inset-y-0 flex items-center pl-3"> | |
| <i data-feather="log-in" class="h-5 w-5 text-primary-200 group-hover:text-primary-100"></i> | |
| </span> | |
| Sign in | |
| </button> | |
| </div> | |
| </form> | |
| <div class="mt-6"> | |
| <div class="relative"> | |
| <div class="absolute inset-0 flex items-center"> | |
| <div class="w-full border-t border-gray-300"></div> | |
| </div> | |
| <div class="relative flex justify-center text-sm"> | |
| <span class="px-2 bg-white text-gray-500">Or continue with</span> | |
| </div> | |
| </div> | |
| <div class="mt-6 grid grid-cols-2 gap-3"> | |
| <div> | |
| <a href="#" class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-500 hover:bg-gray-50 transition duration-300"> | |
| <i data-feather="facebook" class="h-5 w-5 text-blue-600"></i> | |
| </a> | |
| </div> | |
| <div> | |
| <a href="#" class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-500 hover:bg-gray-50 transition duration-300"> | |
| <i data-feather="github" class="h-5 w-5 text-gray-800"></i> | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <custom-footer></custom-footer> | |
| <script src="components/navbar.js"></script> | |
| <script src="components/footer.js"></script> | |
| <script src="script.js"></script> | |
| <script> | |
| feather.replace(); | |
| </script> | |
| </body> | |
| </html> | |
| ``` |