02

สำหรับผู้เล่น / นักกีฬา

วิธีใช้งานทุกฟีเจอร์สำหรับ User ทั่วไป

👤 Role: user

2.1 สมัครสมาชิกใหม่

การสมัครสมาชิกใช้เวลา ~2 นาที ทำได้ 3 ช่องทาง:

หน้าสมัครสมาชิก

รูปที่ 2.1 — หน้า signup.php

ขั้นตอน (สมัครด้วยฟอร์ม)

  1. เข้า thaibadtournaments.com/badminton/signup.php
  2. กรอก username (a-z, 0-9, _ — ไม่มีช่องว่าง)
  3. กรอก email (ระบบเช็ค MX DNS — ต้องใช้งานได้จริง)
  4. กรอก password + ยืนยัน (อย่างน้อย 8 ตัว)
  5. กรอก ชื่อจริง-นามสกุล ภาษาไทย
  6. ยอมรับ Privacy Policy → กด "สมัครสมาชิก"
⚠️ ตรวจ duplicate

ระบบจะเช็ค check_username.php, check_email.php, check_name_duplicate.php แบบ realtime — ถ้า username/email/ชื่อ ซ้ำ จะเตือนทันทีก่อน submit

💡 Tip — ทำไมต้องใช้ชื่อจริง?

ระบบใช้ชื่อจริงในการแมตช์ผู้เล่นกับการสมัครแข่งและ ranking — ใช้ชื่อเล่นไม่ได้

2.2 เข้าสู่ระบบ (Login)

หน้า login

รูปที่ 2.2 — หน้า login.php — มี 3 ช่องทาง

  1. ใส่ username หรือ email (ระบบรับทั้งคู่)
  2. ใส่ password → กด "ลงชื่อเข้าใช้"
  3. หากมี 2FA เปิดอยู่ ระบบจะถามรหัส OTP 6 หลัก

🔐 ระบบความปลอดภัย

🔑 ลืมรหัสผ่าน

forgot password
  1. กด "ลืมรหัสผ่าน?"
  2. ใส่ email ที่ลงทะเบียนไว้
  3. เปิด email → กดลิงก์ reset (อายุ 1 ชม.)
  4. ตั้ง password ใหม่

2.3 ผูกบัญชี LINE

การผูก LINE สำคัญมาก เพราะระบบจะส่ง reminder ก่อนแข่ง 30 นาที + 1 ชั่วโมง ผ่าน LINE

หน้าผูก LINE

รูปที่ 2.3 — หน้า link_line.php แสดง QR + PIN 6 หลัก

วิธีผูก

  1. Login เข้าระบบ → ไปที่ โปรไฟล์ → "ผูก LINE"
  2. ระบบสร้าง PIN 6 หลัก (อายุ 15 นาที)
  3. เพิ่มเพื่อน LINE Bot: @thaibadtournaments (สแกน QR)
  4. พิมพ์ ลงทะเบียน 123456 ในแชท (แทน 123456 ด้วย PIN ของคุณ)
  5. Bot ตอบกลับ "เชื่อมต่อสำเร็จ" → จบ
🔒 ความปลอดภัย

PIN ใช้ได้ครั้งเดียวเท่านั้น, expire ใน 15 นาที — ถ้าไม่ใช้ทัน ต้องสร้างใหม่ ระบบจะเช็คว่า LINE UID ไม่ได้ผูกกับ user อื่นก่อน

ยกเลิกการผูก

ไปที่ โปรไฟล์ → กดปุ่ม "ยกเลิกการผูก LINE" — ระบบจะลบ link และหยุดส่ง notification ทันที

2.4 ตั้งค่า 2FA (Two-Factor Authentication)

เปิด 2FA เพื่อความปลอดภัยขั้นสูง — ต้องใช้ Google Authenticator หรือ app TOTP อื่น

วิธีเปิด 2FA

  1. ไปที่ โปรไฟล์แก้ไขข้อมูล → tab "ความปลอดภัย"
  2. กด "เปิดใช้ 2FA"
  3. สแกน QR code ด้วย Google Authenticator (หรือ Authy, 1Password)
  4. กรอกรหัส 6 หลักจาก app → ยืนยัน
  5. ระบบให้ backup codes 10 รหัส — บันทึกไว้ในที่ปลอดภัย
🚨 ระวัง — Backup Codes

Backup codes แต่ละรหัสใช้ได้ ครั้งเดียว — ใช้เมื่อมือถือหาย/Authenticator app เปลี่ยนเครื่อง ห้ามแชร์ ห้าม screenshot บน cloud

เวลา login ด้วย 2FA

  1. ใส่ username + password ปกติ
  2. ระบบพาไปหน้า verify_2fa.php
  3. เปิด Authenticator → กรอกรหัส 6 หลัก → ผ่าน

2.5 ยืนยันตัวตน (Identity Verification)

ทัวร์บางรายการ (โดยเฉพาะ Association tournament รุ่นอายุ) บังคับให้ยืนยันตัวตนก่อนสมัคร เพื่อยืนยันอายุจริง

ขั้นตอน

  1. ไปที่ โปรไฟล์ → "ยืนยันตัวตน"
  2. อัปโหลดรูปบัตรประชาชน (ปิดเลข 4 ตัวท้ายได้)
  3. กรอกข้อมูล: ชื่อ-นามสกุล, วันเกิด, เพศ (ต้องตรงกับบัตร)
  4. กด "ส่งคำขอ" → รอแอดมินตรวจ (ปกติ 1-2 วันทำการ)
🔒 Privacy-First

เมื่อแอดมินอนุมัติแล้ว ระบบจะลบรูปบัตรประชาชนทันที — เก็บแค่ flag "verified" + วันเกิด + เพศ ไม่มีการเก็บภาพถาวร

หลังยืนยันแล้ว

2.6 ดูและแก้ไขโปรไฟล์

หน้าโปรไฟล์

รูปที่ 2.6 — หน้าโปรไฟล์ profile.php

ส่วนประกอบ

แก้ไขข้อมูล

edit profile

รูปที่ 2.6.2 — edit_profile.php

แก้ไขได้ทันที (ไม่ต้อง OTP):

ต้องใช้ OTP ผ่าน email ก่อนเปลี่ยน:

💡 ทำไมต้อง OTP?

ข้อมูลพวกนี้ส่งผลต่อ identity + การสมัครรุ่นอายุ — ระบบบังคับให้ยืนยันผ่าน OTP เพื่อป้องกัน account takeover

2.7 ดูปฏิทินการแข่งขัน

calendar

รูปที่ 2.7 — calendar.php — แสดงรายการแข่งทุกสถานะ

วิธีกรอง

วิธีอ่านสีบนปฏิทิน

เปิดรับสมัครสีเขียว — สมัครได้ตอนนี้
ปิดรับสมัครสีแดง — หมดเวลาสมัครแล้ว
กำลังแข่งขันสีเหลือง — แข่งวันนี้/สัปดาห์นี้
เสร็จสิ้นสีเทา — จบแล้ว ดูผลย้อนหลัง

คลิกที่รายการเพื่อเข้าสู่หน้า match_detail.php?id=...

2.8 หน้ารายละเอียดรายการแข่ง (Match Detail Tabs)

หน้ารายการแข่ง match_detail.php?id=N มี 9 tabs ที่จะแสดง/ซ่อนตามสถานะของรายการ

tab info

รูปที่ 2.8 — Tab "รายละเอียดการแข่งขัน" (default)

Tabไอคอนเนื้อหาเห็นเมื่อ
รายละเอียดℹ️วันแข่ง, สถานที่, โปสเตอร์, Google Mapเสมอ
กติกา📜กฎการแข่ง + รูปประกอบเปิดโดยแอดมิน
รายชื่อผู้สมัคร📋ทีมที่สมัครแล้ว + สถานะชำระเงินเปิดโดยแอดมิน
ตารางแข่งขันคิว + สนาม + เวลา (อัปเดตสด)หลังจัดสาย
รอบแบ่งกลุ่ม📊ตารางคะแนนกลุ่ม (W/D/L)มี group stage
รอบน็อกเอาต์🌳สายแข่ง (bracket tree)มี knockout
ผลการแข่งขัน🏆ผู้ชนะ + เหรียญหลังจบ
จำนวนลูกแบด🏸track ลูกแบดมินตันที่ใช้เปิดโดยแอดมิน
รูปภาพ📸gallery รูปจากการแข่งเปิดโดยแอดมิน

📡 Tab "การแข่งสด" (Live)

เมื่อรายการอยู่สถานะ กำลังแข่งขัน และเปิด YouTube Live URL — จะมีปุ่ม "🔴 ดูการแข่งสด" แยกพิเศษ ฝัง YouTube embed

2.9 สมัครเข้าแข่ง

กดได้เมื่อรายการอยู่สถานะ เปิดรับสมัคร เท่านั้น

ขั้นตอน

  1. เข้าหน้า match_detail.php?id=N
  2. กดปุ่ม "สมัครเข้าแข่งขัน" (สีเขียว ขวามือ)
  3. เลือก event ที่ต้องการ (เช่น ชายคู่, หญิงคู่, คู่ผสม)
  4. เลือก รุ่นอายุ (ถ้ามี — บังคับยืนยันตัวตนก่อน)
  5. กรอก ชื่อทีม (ค้นหาจากชื่อชมรมอัตโนมัติ)
  6. ส่วน คู่ที่ 2: 3 ทางเลือก
    • 📨 ชวนผ่าน UID — กรอก UID ของคู่ → ระบบส่ง invite ใน Inbox + LINE
    • 🔍 ค้นหาด้วยชื่อ — autocomplete จาก search_users_by_name
    • ✍️ ใส่ชื่อ guest — สำหรับผู้ที่ไม่มีบัญชีในระบบ
  7. กด "ส่งใบสมัคร"
⚠️ ค่าธรรมเนียม

หลังส่งใบสมัคร สถานะจะเป็น "รอชำระเงิน" ต้องอัปโหลดสลิปภายในเวลาที่กำหนด (ส่วนใหญ่ 24-48 ชม.) ไม่งั้นใบสมัครจะถูกยกเลิกอัตโนมัติ

2.10 ตอบรับการเชิญจากคู่

เมื่อมีคนชวนคุณ — คุณจะได้รับการแจ้งเตือน 2 ช่องทาง:

inbox

รูปที่ 2.10 — Inbox แสดง invite จากคู่

ขั้นตอนตอบรับ

  1. เปิด Inbox → คลิกที่ข้อความ "🎾 [ชื่อ] ชวนคุณลงแข่ง [ทัวร์]"
  2. ระบบพาไป respond_invite.php?token=...
  3. ตรวจข้อมูล: รายการ, event, คู่ของคุณ
  4. กด "ยอมรับ" หรือ "ปฏิเสธ"
  5. หากยอมรับ — ใบสมัครเข้าสถานะ "รอชำระเงิน" ทันที (คนชวนต้องชำระเอง หรือคุยกันเอง)
💡 Token Security

Token ของ invite ใช้ครั้งเดียว, ผูกกับ user_id ของคุณ — คนอื่นเปิดลิงก์ไม่ได้

2.11 ชำระเงิน + อัปโหลดสลิป

ระบบรองรับ 3 โหมดการชำระ:

โหมดวิธีการการตรวจ
manualไม่มีระบบ online — โอนแล้วแจ้งแอดมินเองแอดมิน manual
manual_qrสแกน QR code → อัปโหลดสลิปแอดมิน manual
slipokสแกน QR → อัปโหลดสลิป → SlipOK API ตรวจอัตโนมัติอัตโนมัติ

ขั้นตอนอัปโหลดสลิป

  1. เข้าหน้า match_detail.php → tab "รายชื่อผู้สมัคร" → หาแถวของคุณ
  2. กด "อัปโหลดสลิป"
  3. เลือกรูปสลิป (JPG/PNG, ขนาด < 5 MB)
  4. กด "ส่ง" → ระบบตรวจสลิป
    • SlipOK mode — ตรวจอัตโนมัติใน 5-10 วินาที → สถานะ "ผ่านชำระแล้ว"
    • Manual mode — รอแอดมินตรวจ (1-24 ชม.)
⚠️ SlipOK เช็คอะไรบ้าง

API ตรวจ: ยอดเงิน, ชื่อผู้รับโอน, เลข trans_ref, และ unique check ไม่ให้ใช้สลิปเดียวกันซ้ำ

2.12 Inbox — กล่องข้อความ

inbox

ประเภทข้อความที่จะเข้า Inbox

เปิดข้อความ → ระบบ mark เป็น "read" อัตโนมัติ

2.13 ตั้งค่าการแจ้งเตือน

เปิด/ปิดการแจ้งเตือนแต่ละประเภทได้ใน notification_settings.php

ช่องทาง

ประเภทที่ตั้งค่าได้

Flagเมื่อไร
notify_match_reminderก่อนแข่ง 30 นาที + 1 ชั่วโมง
notify_court_changeแอดมินเปลี่ยนสนาม/คิว
notify_morning_broadcastสรุปตารางวันแข่ง 06:00
notify_partner_inviteมีคนชวนเป็นคู่
notify_result_postedผลแข่งของคุณถูก post
notify_payment_statusสลิปได้รับอนุมัติ/ปฏิเสธ

ตั้งค่าได้ ต่อรายการแข่ง (per-tournament) ไม่ใช่ global เท่านั้น

2.14 ข่าวสาร (News)

news

รูปที่ 2.14 — หน้าข่าวสาร news.php

ข่าวสารโพสต์โดยแอดมิน — รวม:

2.15 ค้นหารูปภาพด้วยใบหน้า (Photo Face Search)

🚧 ฟีเจอร์อยู่ระหว่างพัฒนา

ระบบ AI Face Recognition กำลังติดตั้งบน Proxmox VM (GPU) — รายละเอียดเทคนิคอ่านที่ส่วนที่ 7

การใช้งานที่วางแผนไว้

  1. เข้าหน้า photo_search.php
  2. อัปโหลด selfie (รูปหน้าตัวเอง 1 รูป)
  3. เลือกรายการที่ต้องการค้นหารูป
  4. ระบบส่ง embedding ไปยัง AI → match กับรูปทั้งหมดในรายการ
  5. แสดงผล: รูปที่มีใบหน้าใกล้เคียง พร้อม similarity score
  6. ดาวน์โหลดรูปที่ต้องการ