Error & Validation · สำหรับมือใหม่

จัดการข้อผิดพลาด + ตรวจฟอร์ม

ระบบดี ไม่ใช่ไม่มี error — แต่ error แล้วผู้ใช้ไม่งง รู้ว่าต้องทำอะไรต่อ. ซ้ายอธิบาย ขวากดลองได้จริง

ทำไมเรื่องนี้สำคัญ

ตอนทุกอย่างปกติใคร ๆ ก็ทำได้ — ระบบที่ดีวัดกันตอน "พลาด": กรอกผิด · เน็ตหลุด · ของหมด · ไม่มีสิทธิ์. ถ้าจัดการ error ไม่ดี ผู้ใช้จะงง โทษว่าเว็บเสีย แล้วเลิกใช้. หน้านี้สอนทำให้ error เป็นมิตร + ช่วยผู้ใช้แก้

หน้า errorตรวจฟอร์มข้อความ errorแจ้งแบบไหนกันพลาดทำไม error เกิด
หน้า/สถานะ Error Error states

หน้าที่บอกผู้ใช้ว่า "เกิดอะไรขึ้น" เมื่อสิ่งต่าง ๆ ไม่เป็นไปตามปกติ — เปิดลิงก์ผิด · ไม่มีสิทธิ์ · โหลดไม่ขึ้น. ห้ามปล่อยจอขาวหรือ error ดิบ ๆต้องบอกสาเหตุ + ทางออก (ปุ่มกลับ/ลองใหม่)

ตัวอย่างจริงลูกค้ากดลิงก์เก่าจากอีเมล → หน้าไม่มีแล้ว. แทนจอขาวว่าง ๆ โชว์ "ไม่พบหน้านี้ — กลับหน้าแรก"ลูกค้าไม่หลงทาง ไม่คิดว่าเว็บพัง
ต้องมี
404 (ไม่พบหน้า) · 403 (ไม่มีสิทธิ์) · โหลดล้มเหลว (ลองใหม่) · 500 (ระบบขัดข้อง)
ระวัง
อย่าโชว์ error ดิบของระบบ (เช่น stack trace) ให้ผู้ใช้เห็น — งง + ดูไม่ปลอดภัย
🔍
404 ไม่พบหน้านี้
ลิงก์อาจเปลี่ยน/ถูกลบ
🔒
ไม่มีสิทธิ์เข้า
ติดต่อผู้ดูแลเพื่อขอสิทธิ์
📡
โหลดไม่สำเร็จ
เน็ตอาจมีปัญหา
🛠️
ระบบขัดข้อง
ทีมงานกำลังแก้ไข
ตรวจฟอร์ม Validation

เช็คข้อมูลที่ผู้ใช้กรอก ก่อนส่ง— ช่องบังคับครบไหม · รูปแบบถูกไหม (อีเมล/เบอร์) · ค่าอยู่ในช่วงที่ควร. ถ้าผิด โชว์ ข้อความสีแดงใต้ช่องนั้นชี้ชัดว่าช่องไหนต้องแก้

ตัวอย่างจริงกรอกฟอร์มสมัครแล้วลืมใส่เบอร์ กดส่ง → แทนที่จะส่งไปแล้ว error ทั้งหน้า ระบบ ไฮไลต์ช่องเบอร์เป็นสีแดง + บอก "กรุณากรอกเบอร์โทร"ใต้ช่องนั้นเลย แก้ตรงจุด
ใช้เมื่อ
เช็คตอน กดส่งหรือตอนออกจากช่อง (blur) — ไม่ใช่เด้ง error ทุกตัวอักษรที่พิมพ์ (น่ารำคาญ)
ลองกดส่งโดยเว้นว่าง
กรุณากรอกชื่อ
เบอร์ต้องเป็นตัวเลข 9-10 หลัก
ข้อความ error ที่ดี Error messages

ข้อความ error ที่ดีบอก 3 อย่าง: ผิดตรงไหน· ทำไม· แก้ยังไง— เขียนภาษาคน ไม่โทษผู้ใช้ ไม่โชว์ศัพท์เทคนิค/รหัส error ดิบ ๆ

ตัวอย่างจริงบันทึกไม่ได้เพราะเน็ตหลุด — แทน "Error 500: Internal Server Error"(ผู้ใช้อ่านไม่รู้เรื่อง) เขียนว่า "บันทึกไม่สำเร็จ เน็ตอาจหลุด — ลองกดอีกครั้ง"ผู้ใช้รู้ว่าต้องทำอะไร
อย่า
โทษผู้ใช้ ("คุณกรอกผิด") · โชว์ technical ("NullPointerException") · บอกแค่ "เกิดข้อผิดพลาด" ลอย ๆ
✗ แบบที่ผู้ใช้งง
Error 500Internal Server Error
ลอยเกินไปเกิดข้อผิดพลาด
โทษผู้ใช้คุณกรอกข้อมูลผิด กรุณาลองใหม่
✓ แบบที่ช่วยผู้ใช้
บอกสาเหตุ + ทางออกบันทึกไม่สำเร็จ— เน็ตอาจหลุด ลองกดอีกครั้ง
ชี้จุด + วิธีแก้อีเมลไม่ถูกต้อง— ต้องมี @ เช่น name@email.com
ไม่โทษ + บอกที่ถูกรหัสไปรษณีย์ต้องมี 5 หลัก— ที่กรอกมี 4 หลัก ลองเช็กอีกที
แจ้ง error แบบไหน inline · toast · banner · modal

error คนละแบบ แจ้งคนละที่: ผูกกับช่องไหน → ใต้ช่องนั้น· พลาดชั่วคราว → toast· ปัญหาที่ต้องเห็นค้าง → banner· ร้ายแรงต้องหยุด → modal

ตัวอย่างจริงกรอกอีเมลผิด → error ใต้ช่อง (inline). กดบันทึกแล้วเน็ตหลุด → toast แดง. โควต้าใกล้เต็ม → banner เหลืองคาไว้. บัตรหมดอายุตอนจ่ายเงิน → modal บล็อกให้แก้ก่อน
inline
ใต้ช่องฟอร์ม— error ที่ผูกกับช่องนั้น ๆ (กรอกผิด/ไม่ครบ)
toast
เด้งชั่วคราว— พลาดแล้วลองใหม่ได้ (บันทึกไม่ติด/เน็ตหลุด)
banner
คาในหน้า— สถานะที่ต้องเห็นตลอด (โควต้าใกล้เต็ม)
modal
บล็อกหน้าจอ— ร้ายแรง ต้องจัดการก่อนไปต่อ
กันพลาดล่วงหน้า Prevent errors

กันไว้ดีกว่าแก้— ออกแบบให้ผู้ใช้ทำผิดได้ยากตั้งแต่แรก: ปิดปุ่มจนกรอกครบ · เลือกจาก dropdown แทนพิมพ์เอง · ยืนยันก่อนทำสิ่งอันตราย · มีปุ่ม undo

ตัวอย่างจริงปุ่ม "ส่ง" จะ กดไม่ได้ (จาง)จนกว่าจะกรอกครบทุกช่องบังคับ — ผู้ใช้ไม่มีทางส่งฟอร์มที่ไม่สมบูรณ์ ไม่ต้องเจอ error เลย
เทคนิค
disable ปุ่มจนพร้อม · dropdown แทนพิมพ์ · confirm สิ่งย้อนไม่ได้ · undo · ใส่ตัวอย่างใน placeholder
ปุ่มเปิดเมื่อกรอกครบ
← กรอกอีเมลก่อน ปุ่มถึงกดได้
ทำไม error เกิด + จัดการยังไง causes & handling

error ไม่ได้แปลว่าโค้ดพัง — ส่วนใหญ่มาจากสิ่งที่ คาดเดาไม่ได้(เน็ต/ข้อมูล/สิทธิ์). หน้าที่เราคือ "เตรียมรับมือ" ไม่ใช่หวังว่ามันจะไม่เกิด

ตัวอย่างจริงมือถือลูกค้าเน็ตอ่อน กดบันทึกแล้ว timeout → ระบบที่ดี ลองส่งซ้ำให้อัตโนมัติ 1-2 ครั้งถ้ายังไม่ได้ค่อยบอก "ลองใหม่" — ไม่ใช่พังเงียบ ๆ ข้อมูลหาย
📶
เน็ตหลุด / timeoutลองซ้ำอัตโนมัติ + บอกสถานะ
✏️
ผู้ใช้กรอกผิดvalidation ดักก่อนส่ง
🔒
ไม่มีสิทธิ์บอกชัด + ทางขอสิทธิ์
📦
ของหมด/ข้อมูลชนกันเช็คก่อนทำ + แจ้งเหตุผล
💥
ระบบล่มหน้าขอโทษ + log ให้ทีมรู้

สั่ง AI ให้ทำ error ครบทุกจุด — ก๊อปไปต่อท้ายคำสั่งได้เลย

เวลาให้ Claude สร้างฟอร์มหรือหน้าใดก็ตาม วาง 5 ข้อนี้ต่อท้าย จะได้ error ที่ผู้ใช้ไม่งง:

จัดการ error ให้ครบด้วย: 1. ตรวจฟอร์มตอนกดส่ง โชว์ข้อความแดงใต้ช่องที่ผิด (อย่าเด้ง alert รวม) 2. ข้อความ error บอก "ผิดตรงไหน + แก้ยังไง" เป็นภาษาคน ห้ามโชว์รหัส/stack trace 3. เน็ตหลุดหรือบันทึกไม่ติด ให้ลองซ้ำอัตโนมัติ 1 ครั้ง ถ้ายังไม่ได้ค่อยขึ้น toast แดง + ปุ่มลองใหม่ 4. ปุ่มส่งให้ disable จนกรอกครบช่องบังคับ 5. ทำหน้า 404 / 403 / 500 พร้อมปุ่มกลับหน้าแรก ห้ามปล่อยจอขาว

สรุป: error แบบนี้ → แจ้งแบบไหน

กรอกฟอร์มผิด/ไม่ครบinline ใต้ช่อง
บันทึกไม่ติด / เน็ตหลุด (ลองใหม่ได้)Toast แดง
สถานะที่ต้องเห็นค้าง (โควต้า/ทดลองหมด)Banner
ร้ายแรง ต้องจัดการก่อนไปต่อModal
เปิดหน้าผิด/ไม่มีสิทธิ์/ระบบล่มError state (เต็มหน้า)
กลับห้องสมุดออกแบบ

อ่านต่อ — เรื่องที่เกี่ยวข้อง

แก้ปัญหาที่เจอบ่อย สร้างระบบแรกของคุณ ความปลอดภัย กันข้อมูลรั่ว Do & Don't ออกแบบ UI