File manager - Edit - /home/webapp69.cm.in.th/u69319090029/Project SME/login.php
Back
<?php /** * CMTC Solution - Unified Smart Login Portal * Single entry point for both Super Admin and Store Admin users. * Automatically routes users to their respective Dashboard upon login. */ header('Content-Type: text/html; charset=utf-8'); require_once 'db.php'; if (session_status() === PHP_SESSION_NONE) { session_start(); } // Smart Pre-Check: If already logged in, redirect to respective dashboard immediately if (!empty($_SESSION['super_admin_logged_in']) && $_SESSION['super_admin_logged_in'] === true) { header("Location: platform-admin.php"); exit; } if (!empty($_SESSION['shop_admin_id']) || (!empty($_SESSION['role']) && $_SESSION['role'] === 'store_admin')) { header("Location: store-admin.php"); exit; } $error_msg = ''; $success_msg = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) { $username = trim($_POST['username'] ?? ''); $password = $_POST['password'] ?? ''; if (empty($username) || empty($password)) { $error_msg = 'กรุณากรอกชื่อผู้ใช้และรหัสผ่านให้ครบถ้วน'; } else { try { // Query user joined with tenant details $stmt = $pdo->prepare(" SELECT u.*, t.store_name, t.status as tenant_status FROM users u LEFT JOIN tenants t ON u.store_id = t.store_id WHERE u.username = :username LIMIT 1 "); $stmt->execute([':username' => $username]); $user = $stmt->fetch(); if ($user && (password_verify($password, $user['password']) || $user['password'] === $password)) { // Re-hash password if stored in legacy plaintext format if ($user['password'] === $password) { $rehash = password_hash($password, PASSWORD_DEFAULT); $upStmt = $pdo->prepare("UPDATE users SET password = :password WHERE id = :id"); $upStmt->execute([':password' => $rehash, ':id' => $user['id']]); } session_regenerate_id(true); // SMART ROUTING BASED ON ROLE if ($user['role'] === 'super_admin') { // Set Super Admin Session Keys $_SESSION['super_admin_logged_in'] = true; $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = 'super_admin'; $_SESSION['store_id'] = null; $_SESSION['store_name'] = 'ส่วนกลาง Super Admin'; // Smart Redirect to Super Admin Dashboard header("Location: platform-admin.php"); exit; } elseif ($user['role'] === 'store_admin') { // Check if tenant account is active if (!empty($user['tenant_status']) && $user['tenant_status'] !== 'active') { $error_msg = 'บัญชีร้านค้าของคุณถูกระงับการใช้งาน กรุณาติดต่อแอดมินส่วนกลาง'; } else { // Set Store Admin Session Keys (Strictly bound to store_id) $_SESSION['shop_admin_id'] = $user['id']; $_SESSION['shop_id'] = $user['store_id']; $_SESSION['store_id'] = $user['store_id']; $_SESSION['shop_admin_name'] = $user['username']; $_SESSION['shop_name'] = $user['store_name'] ?? "Store #{$user['store_id']}"; $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = 'store_admin'; // Smart Redirect to Store Admin Dashboard header("Location: store-admin.php"); exit; } } else { $error_msg = 'ไม่พบสิทธิ์การใช้งานที่ถูกต้องในระบบ'; } } else { $error_msg = 'ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง'; } } catch (PDOException $e) { $error_msg = 'เกิดข้อผิดพลาดในการตรวจสอบข้อมูล: ' . $e->getMessage(); } } } ?> <!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>เข้าสู่ระบบ - CMTC Smart Restaurant Gateway Portal</title> <link rel="stylesheet" href="style.css"> <link href="https://fonts.googleapis.com/css2?family=Sarabun:wght@300;400;600;700;800&display=swap" rel="stylesheet"> <!-- SweetAlert2 CDN --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <!-- Navigation Sound & SweetAlert Engine --> <script src="js/nav_sound_swal.js"></script> <style> body.login-page { background-color: #060b13; background-image: radial-gradient(at 0% 0%, rgba(255, 90, 0, 0.12) 0px, transparent 50%), radial-gradient(at 100% 100%, rgba(0, 229, 255, 0.08) 0px, transparent 50%); min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px; font-family: 'Sarabun', sans-serif; color: #ffffff; margin: 0; } body.light-theme.login-page { background-color: #f8fafc; background-image: radial-gradient(at 0% 0%, rgba(255, 87, 34, 0.08) 0px, transparent 50%), radial-gradient(at 100% 100%, rgba(0, 180, 216, 0.06) 0px, transparent 50%); color: #0f172a; } .login-card { background: rgba(15, 23, 42, 0.88); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 24px; padding: 40px 35px; width: 100%; max-width: 440px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); transition: all 0.3s ease; box-sizing: border-box; } body.light-theme .login-card { background: #ffffff; border: 1px solid #e2e8f0; box-shadow: 0 20px 40px rgba(0, 51, 102, 0.08); } .login-header { text-align: center; margin-bottom: 30px; } .login-logo { width: 65px; height: 65px; margin-bottom: 12px; object-fit: contain; } .login-title { font-size: 22px; font-weight: 800; margin-bottom: 6px; } .login-subtitle { font-size: 13px; color: #94a3b8; } body.light-theme .login-subtitle { color: #64748b; } .form-group { margin-bottom: 20px; } .form-label { display: block; font-size: 13px; font-weight: 700; margin-bottom: 8px; color: #cbd5e1; } body.light-theme .form-label { color: #334155; } .form-control { width: 100%; padding: 12px 16px; background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 12px; color: #ffffff; font-size: 14px; font-family: inherit; outline: none; transition: all 0.25s ease; box-sizing: border-box; } body.light-theme .form-control { background: #f8fafc; border: 1px solid #cbd5e1; color: #0f172a; } .form-control:focus { border-color: #ff5722; box-shadow: 0 0 0 3px rgba(255, 87, 34, 0.2); } .btn-login { width: 100%; padding: 14px; background: linear-gradient(135deg, #ff5722 0%, #e64a19 100%); border: none; border-radius: 12px; color: #ffffff; font-size: 15px; font-weight: 800; cursor: pointer; transition: all 0.25s ease; box-shadow: 0 8px 25px rgba(255, 87, 34, 0.35); margin-top: 10px; } .btn-login:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(255, 87, 34, 0.45); } .alert-danger { background: rgba(239, 68, 68, 0.15); border: 1px solid rgba(239, 68, 68, 0.4); color: #fca5a5; padding: 12px 16px; border-radius: 12px; font-size: 13px; font-weight: 600; margin-bottom: 20px; } body.light-theme .alert-danger { background: #fef2f2; border-color: #fecaca; color: #dc2626; } .demo-credentials-box { margin-top: 25px; padding: 15px; background: rgba(255, 255, 255, 0.03); border: 1px dashed rgba(255, 255, 255, 0.12); border-radius: 12px; font-size: 12px; color: #94a3b8; line-height: 1.6; } body.light-theme .demo-credentials-box { background: #f1f5f9; border-color: #cbd5e1; color: #475569; } </style> </head> <body class="login-page"> <div class="login-card"> <div class="login-header"> <img src="logo.png" alt="CMTC Logo" class="login-logo" onerror="this.style.display='none'"> <h1 class="login-title">เข้าสู่ระบบ CMTC Solution</h1> <p class="login-subtitle">ระบบคัดแยกสิทธิ์อัจฉริยะ (Unified Smart Gateway)</p> </div> <?php if (!empty($error_msg)): ?> <div class="alert-danger"> ⚠️ <?php echo htmlspecialchars($error_msg); ?> </div> <?php endif; ?> <form method="POST" action="login.php"> <div class="form-group"> <label class="form-label" for="username">ชื่อผู้ใช้งาน (Username)</label> <input type="text" id="username" name="username" class="form-control" placeholder="กรอกชื่อผู้ใช้ของคุณ" required autofocus autocomplete="username"> </div> <div class="form-group"> <label class="form-label" for="password">รหัสผ่าน (Password)</label> <input type="password" id="password" name="password" class="form-control" placeholder="กรอกรหัสผ่าน" required autocomplete="current-password"> </div> <button type="submit" name="login" class="btn-login"> 🔐 เข้าสู่ระบบ (Sign In & Route) </button> </form> <div style="text-align: center; margin-top: 20px;"> <a href="index.php" style="color: #ff5722; font-size: 13px; text-decoration: none; font-weight: 700;"> ← กลับสู่หน้าแรกหลัก (Back to Home) </a> </div> </div> <script> // Theme Pre-check const savedTheme = localStorage.getItem('theme-mode') || 'dark'; if (savedTheme === 'light') { document.body.classList.add('light-theme'); } </script> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.25 |
proxy
|
phpinfo
|
Settings