ไอเดีย #8: ระบบแบบสอบถามออนไลน์ (Form Builder)
หน่วยงานราชการ โรงเรียน หรือแม้แต่ร้านค้าเล็ก ๆ ต่างก็ต้องทำแบบสอบถามกันอยู่เรื่อย ๆ ทั้งประเมินความพึงพอใจ สำรวจความต้องการ หรือรับสมัครอาสาสมัคร หลายที่ใช้เครื่องมือฟรีจากต่างประเทศ แต่ก็กังวลว่าข้อมูลไปเก็บอยู่ที่ไหน บางที่อยากได้รายงานสรุปตามแบบฟอร์มของหน่วยงาน ซึ่งเครื่องมือสำเร็จรูปทำให้ไม่ได้ ระบบ Form Builder ของเราเองจึงเป็นทั้งโจทย์ฝึกที่สนุกและเป็นงานที่มีลูกค้าอยากจ้างจริง
ใครจะใช้
- ผู้สร้างแบบสอบถาม — เจ้าหน้าที่หรือครูที่ออกแบบคำถาม เปิด-ปิดการรับคำตอบ และดูผล
- ผู้ตอบ — ประชาชน นักเรียน หรือลูกค้า ที่เปิดลิงก์แล้วตอบได้ทันทีบนมือถือ
- ผู้ดูแลระบบ — จัดการบัญชีผู้ใช้และดูภาพรวมของทุกแบบสอบถาม
ฟีเจอร์ขั้นต่ำ (MVP)
- สร้างแบบสอบถาม ตั้งชื่อ คำอธิบาย วันเปิด-ปิด และเลือกได้ว่าต้องล็อกอินก่อนตอบหรือไม่
- เพิ่มคำถามได้หลายประเภท ข้อความสั้น ข้อความยาว ตัวเลือกเดียว หลายตัวเลือก มาตราส่วน 1–5 และวันที่
- สลับลำดับคำถาม และกำหนดว่าข้อไหนบังคับตอบ
- หน้าตอบแบบสอบถามที่ใช้งานบนมือถือได้ดี และตรวจความถูกต้องก่อนส่ง
- หน้าสรุปผล นับจำนวนผู้ตอบ แสดงกราฟแท่งหรือกราฟวงกลมต่อข้อ และค่าเฉลี่ยของข้อมาตราส่วน
- Export คำตอบทั้งหมดเป็น CSV หรือ Excel โดยหนึ่งแถวต่อผู้ตอบหนึ่งคน
ต่อยอดได้อีก
- เงื่อนไขข้ามคำถาม เช่น ตอบว่า "ไม่เคยใช้บริการ" ให้ข้ามไปส่วนท้ายเลย
- เทมเพลตแบบประเมินที่ใช้บ่อย สร้างแบบสอบถามใหม่ได้ในไม่กี่คลิก
- สร้าง QR Code ของลิงก์แบบสอบถาม ไว้แปะหน้าเคาน์เตอร์
- แจ้งเตือนผ่าน LINE ทุกครั้งที่มีคำตอบใหม่ หรือสรุปรายวัน
โครงข้อมูลตั้งต้น
forms— id, owner_id, title, description, require_login, open_at, close_at, statusquestions— id, form_id, type, label, options (JSON), is_required, sort_orderresponses— id, form_id, user_id, submitted_at, ip_hashanswers— id, response_id, question_id, value_text, value_number
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ มือใหม่ ค่อนไปทางปานกลางนิดหน่อยตรงส่วนหน้าจอสร้างฟอร์ม ใช้ Yii2 หรือ Laravel กับ PostgreSQL หรือ MySQL และวาดกราฟด้วย Chart.js สิ่งที่จะได้เรียนรู้
- การออกแบบข้อมูลที่โครงสร้างไม่ตายตัว และข้อดีข้อเสียของการเก็บเป็น JSON เทียบกับแยกตาราง
- การ render ฟอร์มแบบ dynamic จากข้อมูลในฐานข้อมูล
- การเขียน query สรุปผลรายข้อ และ export ข้อมูลขนาดใหญ่โดยไม่กินหน่วยความจำ
- การจัดการฟอร์มฝั่ง JavaScript เพิ่ม ลบ สลับลำดับคำถาม
ข้อควรระวัง
- ถ้าแก้หรือลบคำถามหลังมีคนตอบแล้ว ข้อมูลเก่าอาจไม่ตรงกับคำถามใหม่ ควรล็อกการแก้ไขหรือทำ version ของแบบสอบถาม
- แบบสอบถามที่ถามชื่อ เบอร์โทร หรือข้อมูลสุขภาพ ต้องคำนึงถึง PDPA แจ้งวัตถุประสงค์ให้ชัด และจำกัดคนที่เห็นคำตอบ
- Export เป็น CSV ระวัง formula injection ถ้าคำตอบขึ้นต้นด้วยเครื่องหมายเท่ากับหรือบวก ควร escape ก่อนเขียนไฟล์
ใครเคยทำ Form Builder ให้หน่วยงานหรือลูกค้าบ้าง เก็บคำตอบแบบไหน ตารางแยกหรือ JSON แล้วเจอปัญหาอะไรตอนข้อมูลเยอะขึ้น ถ้าเป็นคุณจะเพิ่มคำถามประเภทไหนเป็นอันดับแรก มาเล่าและโพสต์ผลงานกันในกระทู้นี้ได้เลยครับ