File manager - Edit - /home/webapp69.cm.in.th/u69319090030/030 shop/profile.php
Back
<?php require_once __DIR__ . '/config/db.php'; require_once __DIR__ . '/helpers/jwt_helper.php'; require_once __DIR__ . '/helpers/auth.php'; if (session_status() === PHP_SESSION_NONE) { session_start(); } // 1. ตรวจสอบการล็อกอิน (บังคับล็อกอินสำหรับลูกค้าเท่านั้น) $currentUser = get_current_user_data(); if (!$currentUser) { header("Location: login.php"); exit(); } // 2. ถ้าเป็น Admin ให้ Redirect ไปที่ admin/profile.php ของแอดมินโดยเฉพาะ if (in_array($currentUser['role'], ['admin', 'super_admin'])) { header("Location: admin/profile.php"); exit(); } $error = ''; $success = ''; // ดึงข้อมูลลูกค้าปัจจุบันล่าสุดจากตาราง users try { $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$currentUser['id']]); $user = $stmt->fetch(); if (!$user) { die("ไม่พบข้อมูลผู้ใช้ในระบบ"); } // ดึงประวัติรายการสั่งซื้อของลูกค้านี้ $stmtOrders = $pdo->prepare("SELECT * FROM orders WHERE user_id = ? ORDER BY created_at DESC"); $stmtOrders->execute([$user['id']]); $myOrders = $stmtOrders->fetchAll(); } catch (PDOException $e) { die("เกิดข้อผิดพลาดในการดึงข้อมูล: " . $e->getMessage()); } // เมื่อมีการส่งฟอร์มอัปเดตโปรไฟล์ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; // อัปเดตรูปโปรไฟล์ (Avatar Preset หรือ Upload) if ($action === 'update_avatar') { $avatar_choice = $_POST['avatar_preset'] ?? ''; $final_avatar = $user['avatar'] ?? ''; if (isset($_FILES['avatar_file']) && $_FILES['avatar_file']['error'] === UPLOAD_ERR_OK) { $file = $_FILES['avatar_file']; $allowedExts = ['jpg', 'jpeg', 'png', 'gif', 'webp']; $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); if (in_array($ext, $allowedExts)) { $uploadDir = __DIR__ . '/uploads/avatars/'; if (!is_dir($uploadDir)) { mkdir($uploadDir, 0777, true); } $filename = 'customer_' . $user['id'] . '_' . time() . '.' . $ext; $targetPath = $uploadDir . $filename; if (move_uploaded_file($file['tmp_name'], $targetPath)) { $final_avatar = 'uploads/avatars/' . $filename; } else { $error = 'ไม่สามารถบันทึกไฟล์รูปภาพได้'; } } else { $error = 'อนุญาตเฉพาะไฟล์รูปภาพ (JPG, PNG, GIF, WEBP) เท่านั้น'; } } elseif (!empty($avatar_choice)) { $final_avatar = $avatar_choice; } if (empty($error)) { try { $stmtAv = $pdo->prepare("UPDATE users SET avatar = ? WHERE id = ?"); $stmtAv->execute([$final_avatar, $user['id']]); $user['avatar'] = $final_avatar; $success = 'อัปเดตรูปโปรไฟล์สำเร็จแล้ว!'; } catch (PDOException $e) { $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); } } } // อัปเดตชื่อผู้ใช้, ชื่อ-นามสกุล, อีเมล, เบอร์โทร และที่อยู่ if ($action === 'update_profile') { $username = trim($_POST['username'] ?? ''); $full_name = trim($_POST['full_name'] ?? ''); $email = trim($_POST['email'] ?? ''); $phone = trim($_POST['phone'] ?? ''); $address = trim($_POST['address'] ?? ''); if (empty($username) || empty($email)) { $error = 'กรุณากรอกชื่อผู้ใช้งานและอีเมลให้ครบถ้วน'; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $error = 'รูปแบบอีเมลไม่ถูกต้อง'; } else { try { $stmtCheck = $pdo->prepare("SELECT id FROM users WHERE (username = ? OR email = ?) AND id != ?"); $stmtCheck->execute([$username, $email, $user['id']]); if ($stmtCheck->fetch()) { $error = 'ชื่อผู้ใช้งานหรืออีเมลนี้ถูกใช้งานแล้วในระบบ'; } else { $stmtUpdate = $pdo->prepare("UPDATE users SET username = ?, full_name = ?, email = ?, phone = ?, address = ? WHERE id = ?"); $stmtUpdate->execute([$username, $full_name, $email, $phone, $address, $user['id']]); $user['username'] = $username; $user['full_name'] = $full_name; $user['email'] = $email; $user['phone'] = $phone; $user['address'] = $address; $success = 'อัปเดตข้อมูลส่วนตัวเรียบร้อยแล้ว!'; } } catch (PDOException $e) { $error = 'ไม่สามารถอัปเดตข้อมูลได้: ' . $e->getMessage(); } } } // เปลี่ยนรหัสผ่าน if ($action === 'change_password') { $current_password = $_POST['current_password'] ?? ''; $new_password = $_POST['new_password'] ?? ''; $confirm_password = $_POST['confirm_password'] ?? ''; if (empty($current_password) || empty($new_password) || empty($confirm_password)) { $error = 'กรุณากรอกรหัสผ่านให้ครบถ้วนทุกช่อง'; } elseif (!password_verify($current_password, $user['password'])) { $error = 'รหัสผ่านปัจจุบันไม่ถูกต้อง'; } elseif (strlen($new_password) < 6) { $error = 'รหัสผ่านใหม่ต้องมีความยาวอย่างน้อย 6 ตัวอักษร'; } elseif ($new_password !== $confirm_password) { $error = 'รหัสผ่านใหม่และการยืนยันรหัสผ่านไม่ตรงกัน'; } else { try { $newHash = password_hash($new_password, PASSWORD_BCRYPT); $stmtPass = $pdo->prepare("UPDATE users SET password = ? WHERE id = ?"); $stmtPass->execute([$newHash, $user['id']]); $user['password'] = $newHash; $success = 'เปลี่ยนรหัสผ่านสำเร็จเรียบร้อย!'; } catch (PDOException $e) { $error = 'ไม่สามารถเปลี่ยนรหัสผ่านได้: ' . $e->getMessage(); } } } } ?> <!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CyberGear // โปรไฟล์ของฉัน</title> <link rel="stylesheet" href="assets/css/style.css"> </head> <body> <nav class="navbar"> <a href="index.php" class="navbar-brand"> CYBER<span class="brand-red">GEAR</span> </a> <div class="navbar-menu"> <a href="index.php" class="nav-link">หน้าร้านค้า</a> <a href="cart.php" class="nav-link">ตะกร้าสินค้า</a> <a href="profile.php" class="nav-link active" style="color: var(--neon-green);">👤 โปรไฟล์ของฉัน</a> <a href="logout.php" class="btn-cyber" style="padding: 0.4rem 0.9rem; font-size: 0.75rem; border-color: var(--text-gray);">ออกจากระบบ</a> </div> </nav> <div class="container" style="max-width: 1200px; margin-top: 2rem;"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;"> <div> <h1 style="font-size: 2.2rem; text-shadow: 0 0 10px var(--glow-green); color: var(--text-white);">👤 โปรไฟล์ของฉัน (Customer Profile)</h1> <p style="color: var(--text-gray); font-size: 0.95rem;">จัดการข้อมูลส่วนตัว รูปโปรไฟล์ และตรวจสอบประวัติการสั่งซื้อพัสดุ</p> </div> <a href="index.php" class="btn-cyber btn-green" style="font-size: 0.85rem; padding: 0.6rem 1.2rem;">🛒 เลือกซื้อสินค้าต่อ</a> </div> <?php if ($error): ?> <div class="cyber-alert cyber-alert-error" style="margin-bottom: 1.5rem;"> <strong>[เกิดข้อผิดพลาด]</strong> <?php echo htmlspecialchars($error); ?> </div> <?php endif; ?> <?php if ($success): ?> <div class="cyber-alert" style="border-color: var(--neon-green); color: var(--neon-green); background: rgba(0, 255, 102, 0.1); padding: 1rem; border-radius: 8px; margin-bottom: 1.5rem; text-shadow: 0 0 5px var(--glow-green);"> <strong>[สำเร็จ]</strong> <?php echo htmlspecialchars($success); ?> </div> <?php endif; ?> <div style="display: grid; grid-template-columns: 300px 1fr; gap: 2rem; align-items: start;"> <!-- บัตรข้อมูลโปรไฟล์สรุปภาพรวม (Sidebar Card) --> <div class="cyber-card" style="text-align: center; padding: 2rem 1.5rem;"> <div style="position: relative; width: 110px; height: 110px; margin: 0 auto 1.2rem auto;"> <?php if (!empty($user['avatar']) && file_exists(__DIR__ . '/' . $user['avatar'])): ?> <img src="<?php echo htmlspecialchars($user['avatar']); ?>" alt="Customer Avatar" style="width: 110px; height: 110px; border-radius: 50%; object-fit: cover; border: 3px solid var(--neon-green); box-shadow: 0 0 20px rgba(0,255,102,0.4);"> <?php elseif (!empty($user['avatar']) && strpos($user['avatar'], 'http') === 0): ?> <img src="<?php echo htmlspecialchars($user['avatar']); ?>" alt="Customer Avatar" style="width: 110px; height: 110px; border-radius: 50%; object-fit: cover; border: 3px solid var(--neon-green); box-shadow: 0 0 20px rgba(0,255,102,0.4);"> <?php else: ?> <div style="width: 110px; height: 110px; border-radius: 50%; background: linear-gradient(135deg, rgba(0,255,102,0.2), rgba(0,240,255,0.2)); border: 3px solid var(--neon-green); display: flex; align-items: center; justify-content: center; font-size: 3.2rem; box-shadow: 0 0 20px rgba(0,255,102,0.4);"> 🛍️ </div> <?php endif; ?> </div> <h3 style="color: #ffffff; font-size: 1.3rem; margin-bottom: 0.3rem;"> <?php echo htmlspecialchars($user['username']); ?> </h3> <p style="color: var(--text-gray); font-size: 0.9rem; margin-bottom: 1rem;"> <?php echo htmlspecialchars($user['email']); ?> </p> <div style="margin-bottom: 1.5rem;"> <span class="badge" style="font-size: 0.85rem; padding: 4px 12px; background: rgba(0, 255, 102, 0.15); border: 1.5px solid var(--neon-green); color: var(--neon-green); text-transform: uppercase;"> 🛒 สมาชิก VIP ลูกค้า </span> </div> <div style="background: rgba(0,0,0,0.4); border: 1px solid var(--border-color); border-radius: 8px; padding: 1rem; text-align: left; font-size: 0.85rem; line-height: 1.8;"> <div style="color: var(--text-gray);">🆔 รหัสสมาชิก: <strong style="color: #fff; font-family: monospace;">#<?php echo $user['id']; ?></strong></div> <div style="color: var(--text-gray);">📦 ประวัติการสั่งซื้อ: <strong style="color: var(--neon-green);"><?php echo count($myOrders); ?> รายการ</strong></div> <div style="color: var(--text-gray);">📅 วันที่สมัคร: <span style="color: #fff;"><?php echo date('d/m/Y', strtotime($user['created_at'])); ?></span></div> </div> </div> <!-- ฟอร์มแก้ไขข้อมูล --> <div style="display: flex; flex-direction: column; gap: 2rem;"> <!-- 1. เปลี่ยนรูปโปรไฟล์ Avatar --> <div class="cyber-card"> <h3 style="margin-bottom: 1.2rem; border-bottom: 1px solid var(--border-color); padding-bottom: 0.6rem; color: var(--text-white); text-transform: uppercase;"> 🖼️ เปลี่ยนรูปโปรไฟล์ประจำตัว (Avatar) </h3> <form action="profile.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="action" value="update_avatar"> <div style="margin-bottom: 1.5rem;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff; margin-bottom: 0.8rem;">เลือกรูปโปรไฟล์สำเร็จรูป (Preset):</label> <div style="display: flex; gap: 1rem; flex-wrap: wrap;"> <?php $presets = [ 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=200&auto=format&fit=crop&q=80', 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=200&auto=format&fit=crop&q=80', 'https://images.unsplash.com/photo-1517841905240-472988babdf9?w=200&auto=format&fit=crop&q=80', 'https://images.unsplash.com/photo-1539571696357-5a69c17a67c6?w=200&auto=format&fit=crop&q=80', 'https://images.unsplash.com/photo-1522075469751-3a6694fb2f61?w=200&auto=format&fit=crop&q=80' ]; foreach ($presets as $presetUrl): ?> <label style="cursor: pointer; position: relative;"> <input type="radio" name="avatar_preset" value="<?php echo $presetUrl; ?>" style="position: absolute; opacity: 0;" <?php echo ($user['avatar'] === $presetUrl) ? 'checked' : ''; ?>> <img src="<?php echo $presetUrl; ?>" style="width: 65px; height: 65px; border-radius: 50%; object-fit: cover; border: 2px solid <?php echo ($user['avatar'] === $presetUrl) ? 'var(--neon-green)' : '#444'; ?>; padding: 2px; transition: all 0.2s;"> </label> <?php endforeach; ?> </div> </div> <div class="cyber-input-group" style="margin-bottom: 1.5rem;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">หรืออัปโหลดรูปโปรไฟล์จากอุปกรณ์ของคุณ:</label> <input type="file" name="avatar_file" class="cyber-input" accept="image/*" style="font-size: 0.9rem; color: #ffffff; background: #181818; padding: 0.6rem;"> <span style="font-size: 0.8rem; color: var(--text-gray); margin-top: 0.3rem; display: block;">รองรับไฟล์ JPG, PNG, WEBP หรือ GIF</span> </div> <div> <button type="submit" class="btn-cyber btn-green" style="padding: 0.65rem 1.6rem; font-size: 0.9rem;"> 🖼️ บันทึกรูปโปรไฟล์ </button> </div> </form> </div> <!-- 2. แก้ไขข้อมูลส่วนตัว --> <div class="cyber-card"> <h3 style="margin-bottom: 1.2rem; border-bottom: 1px solid var(--border-color); padding-bottom: 0.6rem; color: var(--text-white); text-transform: uppercase;"> ✏️ แก้ไขข้อมูลส่วนตัว (Profile Info) </h3> <form action="profile.php" method="POST"> <input type="hidden" name="action" value="update_profile"> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.2rem;"> <div class="cyber-input-group" style="margin-bottom: 0;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">ชื่อผู้ใช้งาน (Username) *:</label> <input type="text" name="username" class="cyber-input" value="<?php echo htmlspecialchars($user['username']); ?>" required style="font-size: 0.95rem; color: #ffffff; background: #181818;"> </div> <div class="cyber-input-group" style="margin-bottom: 0;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">ชื่อ-นามสกุลจริง:</label> <input type="text" name="full_name" class="cyber-input" value="<?php echo htmlspecialchars($user['full_name'] ?? ''); ?>" placeholder="เช่น นายสมชาย ใจดี" style="font-size: 0.95rem; color: #ffffff; background: #181818;"> </div> </div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.2rem;"> <div class="cyber-input-group" style="margin-bottom: 0;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">อีเมลของคุณ (Email Address) *:</label> <input type="email" name="email" class="cyber-input" value="<?php echo htmlspecialchars($user['email']); ?>" required style="font-size: 0.95rem; color: #ffffff; background: #181818;"> </div> <div class="cyber-input-group" style="margin-bottom: 0;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">เบอร์โทรศัพท์ติดต่อ:</label> <input type="tel" name="phone" class="cyber-input" value="<?php echo htmlspecialchars($user['phone'] ?? ''); ?>" placeholder="เช่น 0812345678" style="font-size: 0.95rem; color: #ffffff; background: #181818;"> </div> </div> <div class="cyber-input-group" style="margin-bottom: 1.5rem;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">ที่อยู่สำหรับจัดส่งสินค้า:</label> <textarea name="address" class="cyber-input" rows="2" placeholder="บ้านเลขที่, ถนน, แขวง/ตำบล, เขต/อำเภอ, จังหวัด, รหัสไปรษณีย์" style="font-size: 0.92rem; color: #ffffff; background: #181818; resize: vertical; min-height: 60px;"><?php echo htmlspecialchars($user['address'] ?? ''); ?></textarea> </div> <div> <button type="submit" class="btn-cyber btn-green" style="padding: 0.75rem 1.8rem; font-size: 0.95rem;"> 💾 บันทึกข้อมูลส่วนตัว </button> </div> </form> </div> <!-- 3. เปลี่ยนรหัสผ่าน --> <div class="cyber-card"> <h3 style="margin-bottom: 1.2rem; border-bottom: 1px solid var(--border-color); padding-bottom: 0.6rem; color: var(--text-white); text-transform: uppercase;"> 🔑 เปลี่ยนรหัสผ่าน (Change Password) </h3> <form action="profile.php" method="POST"> <input type="hidden" name="action" value="change_password"> <div class="cyber-input-group" style="margin-bottom: 1.2rem;"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">รหัสผ่านเดิม (Current Password):</label> <input type="password" name="current_password" class="cyber-input" placeholder="กรอกรหัสผ่านเดิมเพื่อยืนยันตัวตน" required style="font-size: 1rem; color: #ffffff; background: #181818;"> </div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.5rem;"> <div class="cyber-input-group"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">รหัสผ่านใหม่ (New Password):</label> <input type="password" name="new_password" class="cyber-input" placeholder="อย่างน้อย 6 ตัวอักษร" required style="font-size: 1rem; color: #ffffff; background: #181818;"> </div> <div class="cyber-input-group"> <label class="cyber-label" style="font-size: 0.95rem; color: #ffffff;">ยืนยันรหัสผ่านใหม่:</label> <input type="password" name="confirm_password" class="cyber-input" placeholder="กรอกรหัสผ่านใหม่อีกครั้ง" required style="font-size: 1rem; color: #ffffff; background: #181818;"> </div> </div> <div> <button type="submit" class="btn-cyber" style="padding: 0.75rem 1.8rem; font-size: 0.95rem; border-color: var(--neon-red); color: #ffffff; background: rgba(255, 0, 85, 0.15);"> 🔒 เปลี่ยนรหัสผ่านใหม่ </button> </div> </form> </div> <!-- 4. ประวัติคำสั่งซื้อ --> <div class="cyber-card"> <h3 style="margin-bottom: 1.2rem; border-bottom: 1px solid var(--border-color); padding-bottom: 0.6rem; color: var(--text-white); text-transform: uppercase;"> 📦 ประวัติการสั่งซื้อพัสดุของคุณ </h3> <?php if (empty($myOrders)): ?> <div style="text-align: center; color: var(--text-gray); padding: 2rem;"> คุณยังไม่มีประวัติการสั่งซื้อสินค้ากับเรา <a href="index.php" style="color: var(--neon-green);">เริ่มเลือกช้อปสินค้าเลย »</a> </div> <?php else: ?> <table class="cyber-table"> <thead> <tr> <th>รหัสคำสั่งซื้อ</th> <th>ยอดรวม</th> <th>สถานะ</th> <th>วันที่สั่งซื้อ</th> </tr> </thead> <tbody> <?php foreach ($myOrders as $ord): ?> <tr> <td style="font-family: monospace; color: var(--neon-green);">#<?php echo $ord['id']; ?></td> <td style="font-weight: bold; color: #ffffff;">฿<?php echo number_format($ord['total_amount'], 2); ?></td> <td> <span class="badge" style="background: rgba(0,255,102,0.1); border: 1px solid var(--neon-green); color: var(--neon-green);"> <?php echo strtoupper($ord['status']); ?> </span> </td> <td style="font-size: 0.88rem; color: var(--text-gray);"><?php echo date('d/m/Y H:i', strtotime($ord['created_at'])); ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> </div> </div> </div> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.24 |
proxy
|
phpinfo
|
Settings