File manager - Edit - /home/webapp69.cm.in.th/u69319090030/030 shop/admin/profile.php
Back
<?php require_once __DIR__ . '/header.php'; $error = ''; $success = ''; // ลองสร้างคอลัมน์ avatar หากยังไม่มีใน DB try { $pdo->exec("ALTER TABLE `users` ADD COLUMN IF NOT EXISTS `avatar` VARCHAR(255) DEFAULT NULL"); } catch (PDOException $e) { // ข้ามหากมีอยู่แล้ว } // ดึงข้อมูลผู้ใช้ปัจจุบันล่าสุดจากตาราง users try { $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$currentUser['id']]); $user = $stmt->fetch(); if (!$user) { die("ไม่พบข้อมูลผู้ใช้ในระบบ"); } } 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 = 'avatar_' . $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(); } } } // 1. อัปเดตข้อมูลทั่วไป (ชื่อผู้ใช้ & อีเมล) if ($action === 'update_profile') { $username = trim($_POST['username'] ?? ''); $email = trim($_POST['email'] ?? ''); 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 = ?, email = ? WHERE id = ?"); $stmtUpdate->execute([$username, $email, $user['id']]); // อัปเดตข้อมูลเซสชัน / ตัวแปร $user $user['username'] = $username; $user['email'] = $email; // หากมีระบบ session หรือ helper อัปเดตข้อมูล if (isset($_SESSION['user_username'])) { $_SESSION['user_username'] = $username; } $success = 'อัปเดตข้อมูลโปรไฟล์เรียบร้อยแล้ว!'; } } catch (PDOException $e) { $error = 'ไม่สามารถอัปเดตข้อมูลได้: ' . $e->getMessage(); } } } // 2. เปลี่ยนรหัสผ่าน 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(); } } } } ?> <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-red); color: var(--text-white);">👤 ตั้งค่าโปรไฟล์แอดมิน</h1> <p style="color: var(--text-gray); font-size: 0.95rem;">จัดการข้อมูลส่วนตัว ชื่อผู้ใช้ อีเมล และความปลอดภัยของบัญชีผู้ดูแลระบบ</p> </div> <a href="dashboard.php" class="btn-cyber" style="font-size: 0.85rem; padding: 0.5rem 1rem;"><< กลับหน้าแผงควบคุม</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: 320px 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="Profile Picture" style="width: 110px; height: 110px; border-radius: 50%; object-fit: cover; border: 3px solid var(--neon-red); box-shadow: 0 0 20px rgba(255,0,85,0.4);"> <?php elseif (!empty($user['avatar']) && strpos($user['avatar'], 'http') === 0): ?> <img src="<?php echo htmlspecialchars($user['avatar']); ?>" alt="Profile Picture" style="width: 110px; height: 110px; border-radius: 50%; object-fit: cover; border: 3px solid var(--neon-red); box-shadow: 0 0 20px rgba(255,0,85,0.4);"> <?php else: ?> <div style="width: 110px; height: 110px; border-radius: 50%; background: linear-gradient(135deg, rgba(255,0,85,0.2), rgba(0,240,255,0.2)); border: 3px solid var(--neon-red); display: flex; align-items: center; justify-content: center; font-size: 3.2rem; box-shadow: 0 0 20px rgba(255,0,85,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(255, 0, 85, 0.15); border: 1.5px solid var(--neon-red); color: var(--neon-red); text-transform: uppercase;"> 🛡️ <?php echo htmlspecialchars($user['role']); ?> </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);">🆔 User ID: <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 strtoupper($user['status'] ?? 'approved'); ?></strong></div> <div style="color: var(--text-gray);">📅 สร้างเมื่อ: <span style="color: #fff;"><?php echo date('d/m/Y H:i', strtotime($user['created_at'])); ?></span></div> </div> </div> <!-- ฟอร์มแก้ไขข้อมูล --> <div style="display: flex; flex-direction: column; gap: 2rem;"> <!-- 0. ฟอร์มเปลี่ยนรูปโปรไฟล์ 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;"> 🖼️ เปลี่ยนรูปโปรไฟล์ (Profile 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;">เลือกรูปโปรไฟล์สำเร็จรูป (Avatar 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 $idx => $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;" onmouseover="this.style.borderColor='var(--neon-cyan)'" onmouseout="if(!this.previousElementSibling.checked) this.style.borderColor='#444'"> </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> <!-- 1. ฟอร์มแก้ไขชื่อและอีเมล --> <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 class="cyber-input-group" style="margin-bottom: 1.2rem;"> <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: 1rem; color: #ffffff; background: #181818;"> </div> <div class="cyber-input-group" style="margin-bottom: 1.5rem;"> <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: 1rem; color: #ffffff; background: #181818;"> </div> <div> <button type="submit" class="btn-cyber btn-green" style="padding: 0.75rem 1.8rem; font-size: 0.95rem;"> 💾 บันทึกการเปลี่ยนแปลงโปรไฟล์ </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;"> 🔑 เปลี่ยนรหัสผ่านเข้าสู่ระบบ (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> </div> </div> <?php require_once __DIR__ . '/footer.php'; ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.24 |
proxy
|
phpinfo
|
Settings