File manager - Edit - /home/webapp69.cm.in.th/u69319090017/shop17/login.php
Back
<?php // login.php require_once 'config.php'; // หากผู้ใช้เข้าสู่ระบบอยู่แล้ว ให้ย้ายหน้าไปยังหน้าที่เหมาะสม if (isset($_SESSION['is_logged_in']) && $_SESSION['is_logged_in'] === true) { if ($_SESSION['user_role'] === 'admin') { header('Location: admin.php'); } elseif ($_SESSION['user_role'] === 'seller') { header('Location: seller_dashboard.php'); } else { header('Location: index.php'); } exit; } // ข้อความคำแปลเฉพาะในหน้าล็อกอิน $login_txt = [ 'th' => [ 'title' => '🔒 เข้าสู่ระบบบัญชีผู้ใช้', 'desc' => 'ยินดีต้อนรับกลับ! เข้าสู่ระบบเพื่อดำเนินการสั่งซื้อและจัดการบัญชีของคุณ', 'hint_title' => 'คำใบ้ทดสอบระบบ:', 'hint_body' => 'ล็อกอินด้วยบัญชีแอดมิน <strong>admin@example.com</strong> รหัสผ่าน <strong>password123</strong> หรือแอดมินระบบทดสอบ <strong>admin</strong> รหัสผ่าน <strong>admin</strong> หรือใช้ชื่อใดๆ เพื่อเข้าสู่ระบบผู้ซื้อแบบด่วน', 'username_label' => 'อีเมล หรือ ชื่อผู้ใช้งาน (Email or Username)', 'username_placeholder' => 'ระบุอีเมลหรือชื่อผู้ใช้งานของคุณ...', 'password_label' => 'รหัสผ่าน (Password)', 'password_placeholder' => '••••••••', 'btn_submit' => 'เข้าสู่ระบบ', 'back_link' => '← ย้อนกลับไปหน้าร้านค้าหลัก', 'empty_username' => 'กรุณากรอกชื่อผู้ใช้งานหรืออีเมลของคุณ', 'admin_reserved' => 'บัญชี admin สงวนไว้สำหรับระบบหลังบ้าน และต้องกรอกรหัสผ่านที่ถูกต้อง', 'wrong_password' => 'รหัสผ่านไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง', 'register_prompt' => 'ยังไม่มีบัญชีผู้ใช้งาน?', 'register_link' => 'สมัครสมาชิกใหม่ที่นี่' ], 'en' => [ 'title' => '🔒 Account Sign-In', 'desc' => 'Welcome back! Log in to manage your orders, shop settings, or administrator panel.', 'hint_title' => 'Test Credentials:', 'hint_body' => 'Log in with admin account <strong>admin@example.com</strong> password <strong>password123</strong> or fallback admin <strong>admin</strong> / <strong>admin</strong>, or use any custom name for quick buyer login.', 'username_label' => 'Email or Username', 'username_placeholder' => 'Enter your email or username...', 'password_label' => 'Password', 'password_placeholder' => '••••••••', 'btn_submit' => 'Sign In', 'back_link' => '← Return to main store', 'empty_username' => 'Please enter your username or email.', 'admin_reserved' => 'Username admin is reserved for admin panel and requires correct password.', 'wrong_password' => 'Incorrect password. Please try again.', 'register_prompt' => 'Don\'t have an account?', 'register_link' => 'Register new account here' ] ]; $lt = $login_txt[$lang]; $error_message = ''; if (isset($_POST['execute_login'])) { $username = isset($_POST['username']) ? trim($_POST['username']) : ''; $password = isset($_POST['password']) ? trim($_POST['password']) : ''; if (empty($username)) { $error_message = $lt['empty_username']; } else { try { // [1] ดำเนินการกรณี Hardcoded Admin ดั้งเดิมสำหรับการทดสอบ if ($username === 'admin') { if ($password === 'admin') { $_SESSION['is_logged_in'] = true; $_SESSION['user_role'] = 'admin'; $_SESSION['username'] = 'Admin (Legacy)'; $_SESSION['user_email'] = 'admin@example.com'; // ตรวจสอบหรือสร้าง admin ในฐานข้อมูลเพื่อหา id $stmtAdmin = $pdo->prepare("SELECT id FROM users WHERE email = 'admin@example.com'"); $stmtAdmin->execute(); $adminId = $stmtAdmin->fetchColumn(); if (!$adminId) { $passHash = password_hash('password123', PASSWORD_DEFAULT); $pdo->prepare("INSERT INTO users (name, email, password, role) VALUES (?, ?, ?, ?)") ->execute(['ผู้ดูแลระบบ (Admin)', 'admin@example.com', $passHash, 'admin']); $adminId = $pdo->lastInsertId(); } $_SESSION['user_id'] = $adminId; header('Location: admin.php'); exit; } else { $error_message = $lt['admin_reserved']; } } else { // [2] ตรวจสอบบัญชีจากฐานข้อมูลจริงใน SQLite $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ? OR name = ?"); $stmt->execute([$username, $username]); $user = $stmt->fetch(); if ($user) { // หากพบผู้ใช้ ให้ทำการตรวจสอบรหัสผ่าน if (password_verify($password, $user['password']) || ($username === 'admin@example.com' && $password === 'password123')) { $_SESSION['is_logged_in'] = true; $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['name']; $_SESSION['user_role'] = $user['role']; $_SESSION['user_email'] = $user['email']; // ส่งผู้ใช้ไปยังหน้าควบคุมตามบทบาท (Role Routing) if ($user['role'] === 'admin') { header('Location: admin.php'); } elseif ($user['role'] === 'seller') { header('Location: seller_dashboard.php'); } else { header('Location: index.php'); } exit; } else { $error_message = $lt['wrong_password']; } } else { // [3] หากไม่พบผู้ใช้งาน และผู้ใช้พิมพ์ชื่อด่วน (เช่น 'somsook') // เพื่อความสะดวกในการใช้งาน/ทดสอบระบบ ให้เราทำการสมัครสมาชิกแบบด่วน (Auto-Registration) $email = strtolower(str_replace(' ', '', $username)) . '@example.com'; $defaultPass = !empty($password) ? $password : 'password123'; $passHash = password_hash($defaultPass, PASSWORD_DEFAULT); $stmtInsert = $pdo->prepare("INSERT INTO users (name, email, password, role) VALUES (?, ?, ?, 'buyer')"); $stmtInsert->execute([$username, $email, $passHash]); $newUserId = $pdo->lastInsertId(); $_SESSION['is_logged_in'] = true; $_SESSION['user_id'] = $newUserId; $_SESSION['username'] = $username; $_SESSION['user_role'] = 'buyer'; $_SESSION['user_email'] = $email; header('Location: index.php'); exit; } } } catch (PDOException $e) { $error_message = "เกิดข้อผิดพลาดทางระบบ: " . $e->getMessage(); } } } ?> <!DOCTYPE html> <html lang="<?= $lang ?>"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?= ($lang == 'th') ? 'เข้าสู่ระบบบัญชี' : 'Account Sign-In' ?> - Noa Shop</title> <script src="https://cdn.tailwindcss.com"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/> <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;800&family=Sarabun:wght@300;400;600;800&display=swap" rel="stylesheet"> <style> body { font-family: 'Outfit', 'Sarabun', sans-serif; background: linear-gradient(135deg, #090d16 0%, #0f172a 40%, #1e1b4b 80%, #2e1005 100%); } .glass-panel { background: rgba(15, 23, 42, 0.65); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px rgba(255, 255, 255, 0.08) solid; } </style> </head> <body class="min-h-screen flex items-center justify-center p-4 text-slate-100 antialiased"> <div class="max-w-md w-full p-8 rounded-3xl glass-panel shadow-2xl animate__animated animate__zoomIn border border-slate-700/30"> <!-- Header --> <div class="text-center mb-6"> <div class="inline-flex p-3 rounded-full bg-amber-500/10 text-amber-500 mb-3 border border-amber-500/20"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8"> <path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" /> </svg> </div> <h2 class="text-2xl font-black text-amber-500 tracking-tight"><?= $lt['title'] ?></h2> <p class="text-xs text-slate-400 mt-1.5 leading-relaxed"><?= $lt['desc'] ?></p> </div> <!-- System Hint Box --> <div class="p-3.5 mb-5 rounded-2xl bg-amber-500/5 border border-amber-500/20 text-[11px] text-amber-400/90 leading-relaxed"> 💡 <strong><?= $lt['hint_title'] ?></strong> <?= $lt['hint_body'] ?> </div> <!-- Alert Notification --> <?php if (!empty($error_message)): ?> <div class="p-3 mb-5 rounded-2xl bg-red-500/10 border border-red-500/30 text-red-400 font-bold text-center text-xs animate__animated animate__shakeX"> ⚠️ <?= $error_message ?> </div> <?php endif; ?> <!-- Form --> <form action="login.php" method="POST" class="space-y-4"> <div> <label class="block text-xs font-bold uppercase tracking-wider text-slate-400 mb-1.5"><?= $lt['username_label'] ?></label> <input type="text" name="username" required class="w-full px-4 py-3 rounded-xl bg-slate-950/50 border border-slate-700 text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-sm transition" placeholder="<?= $lt['username_placeholder'] ?>"> </div> <div> <label class="block text-xs font-bold uppercase tracking-wider text-slate-400 mb-1.5"><?= $lt['password_label'] ?></label> <input type="password" name="password" class="w-full px-4 py-3 rounded-xl bg-slate-950/50 border border-slate-700 text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-transparent text-sm transition" placeholder="<?= $lt['password_placeholder'] ?>"> </div> <button type="submit" name="execute_login" class="w-full py-3.5 rounded-xl font-bold bg-gradient-to-r from-amber-500 to-orange-600 hover:from-amber-600 hover:to-orange-700 text-white shadow-lg shadow-orange-950/20 hover:shadow-orange-500/10 transition transform active:scale-95 text-sm mt-3"> <?= $lt['btn_submit'] ?> </button> </form> <!-- Redirect to Registration --> <div class="mt-6 text-center border-t border-slate-800 pt-4 flex flex-col gap-2.5"> <div class="text-xs text-slate-400"> <?= $lt['register_prompt'] ?> <a href="register.php" class="text-amber-500 hover:text-amber-400 font-bold transition underline hover:no-underline"> <?= $lt['register_link'] ?> </a> </div> <a href="index.php" class="text-xs text-slate-500 hover:text-slate-300 transition font-semibold mt-1"> <?= $lt['back_link'] ?> </a> </div> </div> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.22 |
proxy
|
phpinfo
|
Settings