𝗧𝗼𝗽 𝟭𝟬 𝗣𝗛𝗣 𝗕𝘂𝗴𝘀 𝗘𝘃𝗲𝗿𝘆 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 𝗠𝗮𝗸𝗲𝘀

คุณเขียนโค้ด กดรีเฟรช แล้วก็เจอหน้าจอสีขาวว่างเปล่า

สิ่งนี้เกิดขึ้นเพราะโดยปกติแล้ว PHP จะไม่แสดงข้อผิดพลาดออกมา (fails silently) คุณจึงต้องตั้งค่าให้มันแสดง error ระหว่างการพัฒนา

เพิ่มบรรทัดเหล่านี้ไว้ที่ส่วนบนสุดของไฟล์ของคุณ:

ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

อย่าใช้คำสั่งนี้ในระบบจริง (production) ให้ใช้การบันทึก log ลงไฟล์แทน

และนี่คือ 10 ข้อผิดพลาดที่พบบ่อยพร้อมวิธีแก้ไข:

  • ลืมใส่เครื่องหมาย Semicolon PHP จะหยุดทำงานหากคุณลืมใส่ semicolon ซึ่งมักจะทำให้โปรแกรมหยุดทำงานไปเฉยๆ โดยไม่แจ้งเตือน วิธีแก้: ตรวจสอบให้แน่ใจว่าทุกคำสั่งจบด้วย semicolon

  • การเปรียบเทียบแบบไม่เข้มงวด (Loose Comparison) (== vs ===) เครื่องหมายเท่ากับสองตัวจะทำการแปลงประเภทข้อมูล (type coercion) ซึ่งอาจนำไปสู่ข้อผิดพลาดทางตรรกะได้ วิธีแก้: ใช้เครื่องหมายเท่ากับสามตัว (===) เพราะจะตรวจสอบทั้งค่า (value) และประเภทข้อมูล (type)

  • ตัวแปรที่ไม่ได้กำหนดค่า (Undefined Variables) การเรียกใช้ตัวแปรที่ยังไม่ได้กำหนดค่าจะทำให้ตรรกะของโปรแกรมผิดพลาด วิธีแก้: ใช้ null coalescing operator ตัวอย่าง: $name = $_GET['name'] ?? 'Guest';

  • ขอบเขตของตัวแปร Global (Global Variable Scope) ฟังก์ชันไม่สามารถมองเห็นตัวแปรที่อยู่นอกขอบเขตของมันได้ วิธีแก้: ส่งตัวแปรเข้าไปในฟังก์ชันในรูปแบบของพารามิเตอร์ (parameters)

  • SQL Injection การสร้าง query โดยใช้ข้อมูลจากผู้ใช้โดยตรง เปิดโอกาสให้แฮกเกอร์ขโมยข้อมูลได้ วิธีแก้: ใช้ prepared statements ร่วมกับ placeholder (?)

  • Cross-Site Scripting (XSS) การแสดงผลข้อมูลจากผู้ใช้โดยตรงอาจทำให้สคริปต์ที่เป็นอันตรายทำงานบนเบราว์เซอร์ได้ วิธีแก้: ใช้ฟังก์ชัน htmlspecialchars() ครอบข้อมูลที่แสดงผล

  • ส่ง Header ไปก่อนแล้ว (Headers Already Sent) คุณไม่สามารถสั่ง redirect ผู้ใช้ได้หากมีการส่งข้อความไปยังเบราว์เซอร์ไปก่อนหน้านั้นแล้ว แม้แต่ช่องว่างเพียงช่องเดียวก็ทำให้เกิดข้อผิดพลาดนี้ได้ วิธีแก้: วางคำสั่ง header() ไว้ที่ส่วนบนสุดของไฟล์เสมอ และใช้ exit() ทุกครั้งหลังจากการสั่ง redirect

  • คีย์ของ Array ที่ไม่ได้กำหนดไว้ (Undefined Array Keys) การเข้าถึงคีย์ของฟอร์มที่ไม่มีอยู่จริงจะทำให้เกิด warning วิธีแก้: ใช้ null coalescing operator กับข้อมูลจาก $_POST และ $_GET ทั้งหมด

  • Include vs Require include จะแสดงเพียงแค่ warning หากไม่พบไฟล์ ซึ่งจะทำให้สคริปต์ยังคงทำงานต่อไปและไปพังในภายหลัง วิธีแก้: ใช้ require_once สำหรับไฟล์ที่สำคัญ เช่น การเชื่อมต่อฐานข้อมูล

  • ไม่ได้ตรวจสอบค่าที่ส่งกลับมา (Unchecked Return Values) ฟังก์ชัน PHP หลายตัวจะคืนค่าเป็น false เมื่อทำงานล้มเหลว หากคุณนำผลลัพธ์นั้นไปใช้งานทันที จะทำให้เกิดข้อผิดพลาดอื่นๆ ตามมา วิธีแก้: ตรวจสอบว่าผลลัพธ์เป็น false หรือไม่ก่อนที่จะนำไปใช้งาน

สรุปเพื่อความสำเร็จ:

  • เปิดการรายงานข้อผิดพลาด (error reporting) ในระหว่างการพัฒนา
  • ใช้ === สำหรับการเปรียบเทียบทั้งหมด
  • ทำความสะอาดข้อมูล (sanitize) จากผู้ใช้เสมอ
  • ตรวจสอบค่าที่ส่งกลับมา (return values)

Source: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh