𝗧𝗼𝗽 𝟭𝟬 𝗣𝗛𝗣 𝗕𝘂𝗴𝘀 𝗘𝘃𝗲𝗿𝘆 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 𝗠𝗮𝗸𝗲𝘀
คุณเขียนโค้ด กดรีเฟรช แล้วก็เจอหน้าจอสีขาวว่างเปล่า
สิ่งนี้เกิดขึ้นเพราะโดยปกติแล้ว 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