ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

ไอเดีย (Idea) idea php event beginner

ไอเดีย #5: ระบบรับสมัครกิจกรรม/อีเวนต์ พร้อมตั๋ว QR

เคยเป็นทีมงานหน้างานอีเวนต์ไหมครับ ผู้เข้าร่วมต่อแถวยาว ทีมงานถือรายชื่อที่พิมพ์ออกมาหลายแผ่น ไล่หาชื่อทีละคน บางคนสมัครผ่านฟอร์มออนไลน์ไว้สองรอบ บางคนบอกว่าสมัครแล้วแต่หาไม่เจอ แถมที่นั่งที่ประกาศไว้จำกัดก็มีคนสมัครเกินมาเพราะไม่มีใครปิดฟอร์มทัน ไม่ว่าจะเป็นงานวิ่ง เวิร์กช็อป หรืองานสัมมนาของชมรม ระบบรับสมัครพร้อมตั๋ว QR ช่วยให้วันงานราบรื่นขึ้นมาก

ใครจะใช้

  • ผู้จัดงาน — สร้างอีเวนต์ กำหนดโควตา และดูรายชื่อผู้สมัคร
  • ผู้สมัคร — กรอกฟอร์มสมัคร รับตั๋ว และแสดงตั๋วตอนเข้างาน
  • ทีมงานหน้างาน (staff) — สแกนตั๋วเพื่อเช็กอินผ่านมือถือ

ฟีเจอร์ขั้นต่ำ (MVP)

  • สร้างอีเวนต์ ระบุชื่องาน สถานที่ วันเวลา รายละเอียด และวันปิดรับสมัคร
  • ฟอร์มสมัครที่ผู้จัดกำหนดช่องเพิ่มเติมได้ เช่น ไซซ์เสื้อ หรืออาหารที่แพ้
  • โควตาที่นั่ง ปิดรับอัตโนมัติเมื่อเต็ม และมีรายชื่อสำรองให้เลือกเปิดใช้
  • ออกตั๋วพร้อม QR Code ที่มีรหัสสุ่มยาวพอเดาไม่ได้ ส่งทางอีเมลและดูได้ในหน้าเว็บ
  • หน้าเช็กอินสำหรับ staff สแกน QR ด้วยกล้องมือถือ แสดงชื่อและสถานะทันที
  • กันการเช็กอินซ้ำ ตั๋วที่ใช้แล้วต้องขึ้นเตือนพร้อมเวลาที่เช็กอินครั้งแรก
  • แดชบอร์ดผู้จัด แสดงยอดสมัคร ยอดเช็กอิน และ export รายชื่อเป็น Excel

ต่อยอดได้อีก

  • อีเวนต์แบบเสียเงิน รับชำระผ่าน PromptPay QR และแนบสลิปให้ผู้จัดตรวจ หรือเชื่อม payment gateway
  • ตั๋วหลายประเภท เช่น Early Bird ตั๋วนักศึกษา แต่ละแบบมีโควตาแยก
  • ส่งตั๋วและข้อความเตือนก่อนวันงานผ่าน LINE OA
  • ออกใบประกาศนียบัตรเป็น PDF ให้คนที่เช็กอินจริง

โครงข้อมูลตั้งต้น

  • events — id, organizer_id, title, venue, start_at, capacity, close_at, status
  • event_fields — id, event_id, label, field_type, is_required, sort_order
  • registrations — id, event_id, full_name, email, phone, answers (JSON), status, created_at
  • tickets — id, registration_id, ticket_code, checked_in_at, checked_in_by

ระดับความยาก และสิ่งที่จะได้เรียนรู้

ระดับ มือใหม่ แต่ได้เจอโจทย์ที่ใช้จริงในงานลูกค้าหลายอย่าง เขียนด้วย Yii2 หรือ Laravel กับ PostgreSQL หรือ MySQL ส่วนการสแกนใช้ไลบรารีอ่าน QR ฝั่ง JavaScript ผ่านกล้องในเบราว์เซอร์ สิ่งที่จะได้เรียนรู้

  • การนับโควตาให้ถูกต้องเมื่อมีคนสมัครพร้อมกันจำนวนมาก
  • การเก็บคำตอบฟอร์มแบบยืดหยุ่นด้วยคอลัมน์ JSON
  • การสร้าง QR และส่งอีเมลผ่าน queue แทนการส่งตรงในคำขอ
  • การทำหน้าเว็บที่ใช้กล้องมือถือ

ข้อควรระวัง

  • Race condition ตอนที่นั่งใกล้เต็ม ถ้าเช็กยอดแล้วค่อย insert แยกกัน อาจได้ผู้สมัครเกินโควตา ควรล็อกแถวของอีเวนต์ใน transaction ก่อนนับ
  • รหัสตั๋วห้ามเป็นเลขเรียงต่อกัน ไม่อย่างนั้นใครก็เดารหัสตั๋วของคนอื่นได้
  • ชื่อ เบอร์โทร และข้อมูลการแพ้อาหารเป็นข้อมูลส่วนบุคคลตาม PDPA บางอย่างอาจเข้าข่ายข้อมูลสุขภาพ ควรขอความยินยอม แจ้งวัตถุประสงค์ และกำหนดเวลาลบหลังจบงาน

ใครเคยดูแลระบบลงทะเบียนวันงานจริงบ้าง วันนั้นเจอปัญหาอะไรหน้างานที่ไม่ได้คิดไว้ก่อน เช่น เน็ตล่ม หรือมือถือ staff แบตหมด และถ้าเป็นคุณจะออกแบบให้เช็กอินแบบออฟไลน์ได้อย่างไร มาแลกเปลี่ยนและโพสต์ผลงานกันในกระทู้นี้ได้เลยครับ

0 คะแนน

0 คำตอบ

ยังไม่มีคำตอบ

รู้คำตอบ? ช่วยแบ่งปันได้เลย

ตอบคำถามนี้

เข้าสู่ระบบเพื่อตอบคำถามและโหวต

เข้าสู่ระบบ สมัครสมาชิก