Data Validation: การตรวจสอบข้อมูลเบื้องต้น
ในบทเรียนที่แล้ว เราได้เรียนรู้เกี่ยวกับการจัดการ Transaction ด้วย PDO ซึ่งเป็นส่วนสำคัญในการรักษาความถูกต้องของข้อมูลในฐานข้อมูล ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับการตรวจสอบข้อมูล (Data Validation) ซึ่งเป็นขั้นตอนสำคัญในการป้องกันข้อมูลที่ไม่ถูกต้องหรือไม่พึงประสงค์เข้าสู่ระบบของเรา การตรวจสอบข้อมูลจะช่วยให้ระบบของเรามีความน่าเชื่อถือและปลอดภัยมากยิ่งขึ้น
การตรวจสอบข้อมูลเบื้องต้นที่เราจะพูดถึงในบทนี้ เน้นไปที่การตรวจสอบประเภทข้อมูลและความยาวของข้อมูล โดยเราจะใช้ฟังก์ชันพื้นฐานของ PHP เช่น is_numeric(), strlen() และ Regular Expression เบื้องต้น
ทำไมต้องตรวจสอบข้อมูล?
การตรวจสอบข้อมูลมีความสำคัญอย่างยิ่งด้วยเหตุผลหลายประการ:
- ความถูกต้องของข้อมูล: ทำให้มั่นใจว่าข้อมูลที่จัดเก็บในฐานข้อมูลเป็นไปตามรูปแบบและข้อกำหนดที่กำหนดไว้
- ความปลอดภัย: ป้องกันการโจมตีผ่านช่องโหว่ต่างๆ เช่น SQL Injection โดยการตรวจสอบและทำความสะอาดข้อมูลที่ผู้ใช้ป้อนเข้ามา
- ประสบการณ์ผู้ใช้: ช่วยให้ผู้ใช้ได้รับประสบการณ์ที่ดี โดยการแจ้งข้อผิดพลาดให้ผู้ใช้ทราบทันที หากข้อมูลที่ป้อนไม่ถูกต้อง
การใช้ is_numeric()
is_numeric() เป็นฟังก์ชันที่ใช้ตรวจสอบว่าตัวแปรเป็นตัวเลขหรือไม่ ฟังก์ชันนี้จะคืนค่า TRUE หากตัวแปรเป็นตัวเลข (integer หรือ float) และคืนค่า FALSE หากไม่ใช่
<?php
$age = $_POST['age'];
if (is_numeric($age)) {
echo "อายุของคุณคือ: " . $age;
} else {
echo "กรุณากรอกอายุเป็นตัวเลข";
}
?>
คำอธิบาย:
- เราสมมติว่าเราได้รับข้อมูลอายุจากฟอร์มผ่าน
$_POST['age'] - เราใช้
is_numeric()เพื่อตรวจสอบว่าค่าที่ได้รับเป็นตัวเลขหรือไม่ - หากเป็นตัวเลข เราจะแสดงอายุ หากไม่ใช่ เราจะแสดงข้อความแจ้งเตือน
ข้อควรระวัง: is_numeric() จะคืนค่า TRUE สำหรับ string ที่เป็นตัวเลขด้วย เช่น "123" หรือ "3.14" ถ้าต้องการตรวจสอบว่าเป็น integer จริงๆ ควรใช้ is_int() แทน
การใช้ strlen()
strlen() เป็นฟังก์ชันที่ใช้หาความยาวของ string (จำนวนตัวอักษร) ฟังก์ชันนี้จะคืนค่าเป็น integer ซึ่งเป็นจำนวนตัวอักษรใน string
<?php
$username = $_POST['username'];
if (strlen($username) >= 5 && strlen($username) <= 20) {
echo "ชื่อผู้ใช้ของคุณคือ: " . $username;
} else {
echo "ชื่อผู้ใช้ต้องมีความยาวระหว่าง 5 ถึง 20 ตัวอักษร";
}
?>
คำอธิบาย:
- เราสมมติว่าเราได้รับข้อมูลชื่อผู้ใช้จากฟอร์มผ่าน
$_POST['username'] - เราใช้
strlen()เพื่อตรวจสอบความยาวของชื่อผู้ใช้ - หากความยาวอยู่ระหว่าง 5 ถึง 20 ตัวอักษร เราจะแสดงชื่อผู้ใช้ หากไม่ใช่ เราจะแสดงข้อความแจ้งเตือน
Regular Expression เบื้องต้น
Regular Expression (RegEx) เป็นรูปแบบที่ใช้ในการจับคู่ string ที่มีรูปแบบเฉพาะ Regular Expression มีประโยชน์อย่างมากในการตรวจสอบข้อมูลที่มีรูปแบบที่ซับซ้อน เช่น อีเมล เบอร์โทรศัพท์ หรือรหัสไปรษณีย์
ในบทนี้ เราจะพูดถึง Regular Expression เบื้องต้น โดยใช้ฟังก์ชัน preg_match() ซึ่งเป็นฟังก์ชันที่ใช้ตรวจสอบว่า string ตรงกับรูปแบบ Regular Expression ที่กำหนดหรือไม่
<?php
$email = $_POST['email'];
// Regular Expression สำหรับตรวจสอบรูปแบบอีเมล
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo "อีเมลของคุณคือ: " . $email;
} else {
echo "รูปแบบอีเมลไม่ถูกต้อง";
}
?>
คำอธิบาย:
- เราสมมติว่าเราได้รับข้อมูลอีเมลจากฟอร์มผ่าน
$_POST['email'] - เรากำหนด Regular Expression ในตัวแปร
$patternเพื่อตรวจสอบรูปแบบอีเมล - เราใช้
preg_match()เพื่อตรวจสอบว่าอีเมลตรงกับรูปแบบ Regular Expression ที่กำหนดหรือไม่ - หากตรงกัน เราจะแสดงอีเมล หากไม่ตรงกัน เราจะแสดงข้อความแจ้งเตือน
คำอธิบาย Regular Expression:
^: เริ่มต้น string[a-zA-Z0-9._%+-]+: ตัวอักษร a-z, A-Z, 0-9, จุด, ขีดล่าง, เปอร์เซ็นต์, บวก, หรือขีด (อย่างน้อยหนึ่งตัว)@: เครื่องหมาย @[a-zA-Z0-9.-]+: ตัวอักษร a-z, A-Z, 0-9, จุด, หรือขีด (อย่างน้อยหนึ่งตัว)\.: จุด (ต้อง escape ด้วย backslash)[a-zA-Z]{2,}: ตัวอักษร a-z หรือ A-Z (อย่างน้อยสองตัว)$: สิ้นสุด string
ตัวอย่าง Regular Expression อื่นๆ:
- เบอร์โทรศัพท์ (ประเทศไทย):
/^[0][0-9]{8,9}$/ - รหัสไปรษณีย์ (ประเทศไทย):
/^[0-9]{5}$/ - ตัวอักษรภาษาอังกฤษเท่านั้น:
/^[a-zA-Z]+$/
สรุป
ในบทนี้ เราได้เรียนรู้เกี่ยวกับการตรวจสอบข้อมูลเบื้องต้น โดยใช้ฟังก์ชัน is_numeric(), strlen() และ Regular Expression เบื้องต้น การตรวจสอบข้อมูลเป็นขั้นตอนสำคัญในการสร้างระบบที่น่าเชื่อถือและปลอดภัย การใช้ฟังก์ชันเหล่านี้จะช่วยให้เราสามารถตรวจสอบประเภทข้อมูลและความยาวของข้อมูลได้อย่างมีประสิทธิภาพ
ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับการทำความสะอาดข้อมูล (Data Sanitization) ด้วยฟังก์ชัน filter_var() ซึ่งเป็นอีกขั้นตอนสำคัญในการป้องกันข้อมูลที่ไม่ถูกต้องหรือไม่พึงประสงค์เข้าสู่ระบบของเรา