การเป็นครูที่เขียนเว็บได้ด้วย (School Web Developer) คือยอดมนุษย์ค่ะ เพราะเราต้องเข้าใจทั้ง “บริบทโรงเรียน” และ “ภาษาคอมพิวเตอร์” แต่ด้วยความที่งานโรงเรียนมักจะ “ด่วน” และ “เน้นใช้งานได้จริง” ทำให้บางครั้งเราอาจเผลอเขียนโค้ดแบบ “ทางลัด” จนกลายเป็นระเบิดเวลาโดยไม่รู้ตัว
จากประสบการณ์ นี่คือ 5 ข้อผิดพลาดคลาสสิกของระบบโรงเรียนที่เขียนด้วย PHP และวิธีแก้ไขให้ถูกต้องค่ะ
1. ยังใช้ mysql_query หรือต่อ String ใน SQL (ประตูบ้านที่เปิดทิ้งไว้)
นี่คือบาปมหันต์ข้อที่ 1 ค่ะ! หลายโรงเรียนยังใช้โค้ด PHP เวอร์ชั่นเก่า (Legacy Code) ที่รับค่าจากฟอร์มแล้วเอาไปแปะในคำสั่ง SQL ตรงๆ
- ความเสี่ยง: นักเรียนสายคอมฯ ที่รู้วิธี SQL Injection สามารถแฮ็กระบบเกรด หรือล็อกอินเป็น Admin ได้ง่ายๆ แค่พิมพ์
' OR '1'='1ลงในช่องรหัสผ่าน - วิธีแก้: เลิกใช้ฟังก์ชันตระกูล
mysql_(ซึ่ง PHP รุ่นใหม่เลิก support แล้ว) และหันมาใช้ PDO หรือ MySQLi แบบ Prepared Statements แทนค่ะ วิธีนี้จะแยก “คำสั่ง” กับ “ข้อมูล” ออกจากกัน ปลอดภัย 100%
2. เก็บระบบรหัสผ่านด้วย MD5 (กุญแจที่ใครก็ปั๊มได้)
สมัยเรียนเราอาจถูกสอนให้เข้ารหัสรหัสผ่านด้วย md5($password) แต่ในยุค 2025 MD5 ถือว่า “ไม่ปลอดภัย” แล้วค่ะ เพราะมันถอดรหัสกลับได้ง่ายมากภายในเสี้ยววินาที
- ความเสี่ยง: ถ้าระเบียนประวัติเด็กหลุดออกไป แฮ็กเกอร์จะรู้รหัสผ่านของทุกคนทันที
- วิธีแก้: ใช้ฟังก์ชันมาตรฐานของ PHP สมัยใหม่ คือ
password_hash()ในการเก็บ และใช้password_verify()ในการตรวจสอบตอนล็อกอินค่ะ ปลอดภัยกว่าและเขียนง่ายกว่าด้วย
3. Spaghetti Code: ยำรวม HTML กับ PHP ในไฟล์เดียว (นรกของคนมาแก้ต่อ)
ไฟล์ index.php ไฟล์เดียวที่มี 2,000 บรรทัด ข้างบนเป็น SQL ตรงกลางเป็น HTML ข้างล่างเป็น JavaScript วนลูปไปมา
- ความเสี่ยง: เมื่อระบบมีปัญหา หรือต้องการเพิ่มฟีเจอร์ใหม่ (เช่น เพิ่มปีการศึกษา 2569) ครูจะตาลายและไม่กล้าแก้โค้ด เพราะกลัวแก้ตรงนี้แล้วไปพังตรงอื่น
- วิธีแก้: เริ่มต้นง่ายๆ ด้วยการ “แยกไฟล์” ค่ะ
- แยกการเชื่อมต่อฐานข้อมูลไว้ที่
db_connect.php - แยกส่วนหัวเว็บ/เมนู ไว้ที่
header.php - แยกส่วนท้ายเว็บ ไว้ที่
footer.php - แล้วใช้คำสั่ง
includeเข้ามาแปะ จะช่วยให้ดูแลรักษาง่ายขึ้นมากค่ะ
- แยกการเชื่อมต่อฐานข้อมูลไว้ที่
4. ฐานข้อมูลไม่ Normalize (เก็บข้อมูลซ้ำซ้อน)
เช่น ในตาราง “การส่งงาน” มีคอลัมน์ ชื่อนักเรียน, นามสกุล, เลขที่ ซ้ำๆ ทุกบรรทัด แทนที่จะเก็บแค่ student_id
- ความเสี่ยง: วันหนึ่งเด็กหญิงสมหญิง เปลี่ยนชื่อเป็น “นางสาวสมสวย” ครูต้องตามไปแก้ใน Database ทุกตาราง ถ้าแก้ไม่หมด ข้อมูลจะขัดแย้งกันเอง (Data Inconsistency)
- วิธีแก้: ออกแบบ Database ให้เป็น Relational (เชิงสัมพันธ์) เก็บเฉพาะ ID เชื่อมโยงกัน (Foreign Key) แล้วใช้คำสั่ง
JOINเวลาเรียกดูข้อมูลค่ะ
5. Hardcode ข้อมูลที่เปลี่ยนบ่อย (แก้โค้ดทุกปี)
เช่น เขียนโค้ด if ($year == '2568') { ... } ฝังไว้ในไฟล์ PHP หลายๆ จุด
- ความเสี่ยง: พอขึ้นปีการศึกษาใหม่ ระบบพัง หรือแสดงผลผิด ครูต้องมานั่งไล่แก้โค้ดทีละไฟล์ ซึ่งเสี่ยงต่อการแก้ไม่ครบ
- วิธีแก้: สร้างตาราง
configในฐานข้อมูล หรือสร้างไฟล์config.phpเพื่อเก็บตัวแปรที่เปลี่ยนบ่อยๆ เช่น ปีการศึกษาปัจจุบัน, วันที่เปิดปิดระบบรับสมัคร แล้วดึงตัวแปรนี้ไปใช้ทั่วทั้งเว็บค่ะ
บทสรุป
การเขียนเว็บโรงเรียนให้ “ใช้งานได้” นั้นไม่ยาก แต่การเขียนให้ “ปลอดภัยและยั่งยืน” ต้องอาศัยความใส่ใจในรายละเอียดเล็กๆ น้อยๆ เหล่านี้ค่ะ การปรับแก้เพียงนิดเดียวในวันนี้ จะช่วยประหยัดเวลาปวดหัวของครูไปได้อีกหลายปีเลยค่ะ



