File manager - Edit - /home/webapp69.cm.in.th/u69319090041/Shop41/vendor_panel/profile.php
Back
<?php /** * vendor_panel/profile.php * โปรไฟล์และข้อมูลร้านค้า — Vendor แก้ไขได้เอง */ session_start(); require_once __DIR__ . '/../config/config.php'; require_once __DIR__ . '/../includes/middleware.php'; require_once __DIR__ . '/../includes/image_helper.php'; requireVendor(); $vendorId = getCurrentVendorId(); $db = getDBConnection(); $error = ''; // Reload fresh vendor data $stmt = $db->prepare("SELECT * FROM vendors WHERE user_id=?"); $stmt->execute([$_SESSION['user']['id']]); $v = $stmt->fetch(); // ── SAVE ────────────────────────────────────────────────── if ($_SERVER['REQUEST_METHOD'] === 'POST') { verifyCSRFToken($_POST['csrf_token'] ?? ''); $storeName = sanitize($_POST['store_name'] ?? ''); $description = sanitize($_POST['description'] ?? ''); $contactEmail = sanitize($_POST['contact_email'] ?? ''); $contactPhone = sanitize($_POST['contact_phone'] ?? ''); $storeAddress = sanitize($_POST['store_address'] ?? ''); $bankName = sanitize($_POST['bank_name'] ?? ''); $bankAccount = sanitize($_POST['bank_account'] ?? ''); $bankAccountName = sanitize($_POST['bank_account_name'] ?? ''); if (empty($storeName)) { $error = 'กรุณากรอกชื่อร้านค้า'; } else { // อัปโหลด Logo $logoPath = $v['store_logo']; if (isset($_FILES['store_logo']) && $_FILES['store_logo']['error'] === UPLOAD_ERR_OK) { $result = processAndUploadImage($_FILES['store_logo'], 'vendors/' . $vendorId . '/logo'); if ($result['success']) { $logoPath = UPLOAD_URL . $result['main_path']; } else { $error = $result['error']; } } // อัปโหลด Banner $bannerPath = $v['store_banner']; if (isset($_FILES['store_banner']) && $_FILES['store_banner']['error'] === UPLOAD_ERR_OK) { $result = processAndUploadImage($_FILES['store_banner'], 'vendors/' . $vendorId . '/banner'); if ($result['success']) { $bannerPath = UPLOAD_URL . $result['main_path']; } else { $error = $result['error']; } } if (empty($error)) { $db->prepare(" UPDATE vendors SET store_name=?, description=?, contact_email=?, contact_phone=?, store_address=?, bank_name=?, bank_account=?, bank_account_name=?, store_logo=?, store_banner=?, updated_at=NOW() WHERE id=? ")->execute([ $storeName, $description, $contactEmail, $contactPhone, $storeAddress, $bankName, $bankAccount, $bankAccountName, $logoPath, $bannerPath, $vendorId ]); clearVendorSessionCache(); // เคลียร์ session cache $_SESSION['flash_success'] = 'บันทึกโปรไฟล์ร้านค้าเรียบร้อยแล้ว'; header('Location: profile.php'); exit; } } // reload $stmt->execute([$_SESSION['user']['id']]); $v = $stmt->fetch(); } // ── โหลด vendor_header (ส่ง HTML) หลังประมวล POST เสร็จ ── require_once __DIR__ . '/vendor_header.php'; ?> <div class="mb-4"> <h4 class="fw-bold mb-0">⚙️ โปรไฟล์ร้านค้า</h4> <small class="text-muted">แก้ไขข้อมูลร้านค้า โลโก้ แบนเนอร์ และข้อมูลการชำระเงิน</small> </div> <?php if ($error): ?> <div class="alert alert-danger rounded-3"><?php echo $error; ?></div> <?php endif; ?> <!-- Store Banner Preview --> <?php if ($v['store_banner']): ?> <div class="v-card mb-4 overflow-hidden" style="max-height:180px"> <img src="<?php echo htmlspecialchars($v['store_banner']); ?>" class="w-100" style="object-fit:cover;height:180px"> </div> <?php endif; ?> <form method="POST" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>"> <div class="row g-4"> <!-- ── LEFT: Store Info ─────────────────────────── --> <div class="col-md-8"> <!-- Store Identity --> <div class="v-card mb-4"> <div class="v-card-header">🏪 ข้อมูลร้านค้า</div> <div class="v-card-body"> <div class="row g-3"> <div class="col-12"> <label class="form-label fw-semibold">ชื่อร้านค้า <span class="text-danger">*</span></label> <input type="text" name="store_name" class="form-control" value="<?php echo htmlspecialchars($v['store_name']); ?>" required> </div> <div class="col-md-6"> <label class="form-label fw-semibold">URL Slug</label> <div class="input-group"> <span class="input-group-text text-muted" style="font-size:.8rem">/shop/</span> <input type="text" class="form-control" value="<?php echo htmlspecialchars($v['store_slug']); ?>" readonly disabled> </div> <div class="form-text">URL ของร้าน (ติดต่อ Admin เพื่อเปลี่ยน)</div> </div> <div class="col-md-6"> <label class="form-label fw-semibold">สถานะร้านค้า</label> <?php $sv = ['approved'=>['bg-success','✅ เปิดขาย'], 'suspended'=>['bg-danger','🚫 ถูกระงับ']]; [$sb, $sl] = $sv[$v['status']] ?? ['bg-secondary', $v['status']]; ?> <div><span class="badge <?php echo $sb; ?> px-3 py-2 rounded-pill fs-6"><?php echo $sl; ?></span></div> </div> <div class="col-12"> <label class="form-label fw-semibold">คำอธิบายร้านค้า</label> <textarea name="description" class="form-control" rows="4" placeholder="เล่าเกี่ยวกับร้านของคุณ สินค้าที่จำหน่าย..."><?php echo htmlspecialchars($v['description'] ?? ''); ?></textarea> </div> </div> </div> </div> <!-- Contact --> <div class="v-card mb-4"> <div class="v-card-header">📞 ข้อมูลติดต่อ</div> <div class="v-card-body"> <div class="row g-3"> <div class="col-md-6"> <label class="form-label fw-semibold">อีเมลร้านค้า</label> <input type="email" name="contact_email" class="form-control" value="<?php echo htmlspecialchars($v['contact_email'] ?? ''); ?>" placeholder="shop@example.com"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">เบอร์โทรร้านค้า</label> <input type="text" name="contact_phone" class="form-control" value="<?php echo htmlspecialchars($v['contact_phone'] ?? ''); ?>" placeholder="08X-XXX-XXXX"> </div> <div class="col-12"> <label class="form-label fw-semibold">ที่อยู่ร้านค้า</label> <textarea name="store_address" class="form-control" rows="2" placeholder="ที่อยู่สำหรับแสดงบนหน้าร้าน"><?php echo htmlspecialchars($v['store_address'] ?? ''); ?></textarea> </div> </div> </div> </div> <!-- Bank --> <div class="v-card"> <div class="v-card-header">🏦 ข้อมูลบัญชีธนาคาร</div> <div class="v-card-body"> <div class="alert alert-info rounded-3 mb-3" style="font-size:.82rem"> 💡 ข้อมูลนี้ใช้สำหรับ Admin โอนยอดขายให้คุณ (ลูกค้าจะไม่เห็นข้อมูลนี้) </div> <div class="row g-3"> <div class="col-md-4"> <label class="form-label fw-semibold">ธนาคาร</label> <select name="bank_name" class="form-select"> <option value="">-- เลือกธนาคาร --</option> <?php $banks = ['กสิกรไทย','ไทยพาณิชย์','กรุงไทย','กรุงเทพ','ทหารไทยธนชาต','กรุงศรีอยุธยา','ออมสิน','ธ.ก.ส.','UOB']; foreach ($banks as $b): ?> <option value="<?php echo $b; ?>" <?php echo ($v['bank_name'] ?? '') === $b ? 'selected' : ''; ?>><?php echo $b; ?></option> <?php endforeach; ?> </select> </div> <div class="col-md-4"> <label class="form-label fw-semibold">เลขบัญชี</label> <input type="text" name="bank_account" class="form-control" value="<?php echo htmlspecialchars($v['bank_account'] ?? ''); ?>" placeholder="XXX-X-XXXXX-X"> </div> <div class="col-md-4"> <label class="form-label fw-semibold">ชื่อบัญชี</label> <input type="text" name="bank_account_name" class="form-control" value="<?php echo htmlspecialchars($v['bank_account_name'] ?? ''); ?>" placeholder="ชื่อ-นามสกุล"> </div> </div> </div> </div> </div> <!-- ── RIGHT: Images + Stats ─────────────────────── --> <div class="col-md-4"> <!-- Logo Upload --> <div class="v-card mb-4"> <div class="v-card-header">🖼️ โลโก้ร้านค้า</div> <div class="v-card-body text-center"> <?php if ($v['store_logo']): ?> <img src="<?php echo htmlspecialchars($v['store_logo']); ?>" class="rounded-3 mb-3" style="width:100px;height:100px;object-fit:cover"> <?php else: ?> <div class="rounded-3 bg-light d-inline-flex align-items-center justify-content-center mb-3" style="width:100px;height:100px;font-size:2.5rem"> <?php echo mb_substr($v['store_name'], 0, 1); ?> </div> <?php endif; ?> <input type="file" name="store_logo" class="form-control form-control-sm" accept="image/*" onchange="previewLogo(this)"> <div class="form-text">แนะนำ: ภาพสี่เหลี่ยมจัตุรัส, JPG/PNG</div> </div> </div> <!-- Banner Upload --> <div class="v-card mb-4"> <div class="v-card-header">🖼️ แบนเนอร์ร้านค้า</div> <div class="v-card-body"> <input type="file" name="store_banner" class="form-control form-control-sm" accept="image/*"> <div class="form-text">แนะนำ: 1200×300px, JPG/PNG</div> </div> </div> <!-- Store Stats --> <div class="v-card mb-4"> <div class="v-card-header">📊 สถิติร้านค้า</div> <div class="v-card-body"> <?php $stats = $db->prepare(" SELECT COUNT(DISTINCT p.id) AS products, COUNT(DISTINCT vo.id) AS orders, COALESCE(SUM(vo.subtotal),0) AS revenue FROM vendors v LEFT JOIN products p ON p.vendor_id = v.id LEFT JOIN vendor_orders vo ON vo.vendor_id = v.id AND vo.status='completed' WHERE v.id = ? "); $stats->execute([$vendorId]); $stats = $stats->fetch(); ?> <div class="d-flex justify-content-between align-items-center mb-2"> <span class="text-muted small">📦 สินค้าทั้งหมด</span> <span class="fw-bold"><?php echo number_format($stats['products']); ?></span> </div> <div class="d-flex justify-content-between align-items-center mb-2"> <span class="text-muted small">🛒 ออเดอร์ที่สำเร็จ</span> <span class="fw-bold"><?php echo number_format($stats['orders']); ?></span> </div> <div class="d-flex justify-content-between align-items-center mb-2"> <span class="text-muted small">💰 ยอดขายรวม</span> <span class="fw-bold text-success">฿<?php echo number_format($stats['revenue'], 0); ?></span> </div> <hr> <div class="d-flex justify-content-between align-items-center"> <span class="text-muted small">📅 เปิดร้านเมื่อ</span> <span class="text-muted small"><?php echo date('d/m/Y', strtotime($v['created_at'])); ?></span> </div> </div> </div> </div> </div> <!-- Save Button --> <div class="d-flex justify-content-end mt-3"> <button type="submit" class="btn btn-vendor-primary px-5 py-2 rounded-pill fw-bold fs-6"> 💾 บันทึกข้อมูลร้านค้า </button> </div> </form> <script> function previewLogo(input) { if (input.files && input.files[0]) { const reader = new FileReader(); reader.onload = e => { const imgs = document.querySelectorAll('.store-logo img, .col-md-4 img'); imgs.forEach(img => img.src = e.target.result); }; reader.readAsDataURL(input.files[0]); } } </script> <?php require_once __DIR__ . '/vendor_footer.php'; ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings