التحقق من صحة البيانات في PHP: من الفحوصات البسيطة إلى الحلول الاحترافية
التحقق من صحة البيانات هو أحد الركائز الأساسية لتطبيق ويب آمن ومستقر. في PHP، توجد العديد من الأدوات المدمجة التي تسمح بفحص إدخال المستخدم بكفاءة. في هذه المقالة، سنستعرض الأساليب الرئيسية، من الدوال البسيطة إلى المكتبات القوية، وسنعرض أمثلة عملية.
لماذا نحتاج إلى التحقق من صحة البيانات؟
أي تطبيق يستقبل بيانات من المستخدم (نماذج، API، معاملات URL) يجب أن يتحقق من صحتها. يساعد ذلك في:
- منع هجمات حقن SQL وهجمات XSS
- ضمان سلامة البيانات في قاعدة البيانات
- تحسين تجربة المستخدم (رسائل خطأ واضحة)
- تجنب الأخطاء المنطقية في تشغيل التطبيق
دوال التحقق المدمجة في PHP
توفر PHP عدة دوال بسيطة ولكنها فعالة للفحص الأساسي للبيانات:
1. التحقق من الفراغ: empty() و isset()
// التحقق من أن الحقل ليس فارغًا$name = trim($_POST['name'] ?? '');if (empty($name)) { echo "الاسم مطلوب";}
// التحقق من وجود متغيرif (!isset($_POST['email'])) { echo "حقل البريد الإلكتروني لم يتم إرساله";}2. الفلاتر: filter_var()
هذه هي الآلية المدمجة الأكثر ملاءمة للتحقق من أنواع البيانات الشائعة:
$email = "user@example.com";if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "البريد الإلكتروني صحيح";} else { echo "تنسيق البريد الإلكتروني غير صحيح";}
// فلاتر مفيدة أخرى:$url = "https://pythonlib.ru";if (filter_var($url, FILTER_VALIDATE_URL)) { echo "الرابط صحيح";}
$ip = "192.168.1.1";if (filter_var($ip, FILTER_VALIDATE_IP)) { echo "عنوان IP صحيح";}
// فلتر للأعداد الصحيحة$age = 25;if (filter_var($age, FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 120]])) { echo "العمر صحيح";}التعبيرات المنتظمة للتحقق المعقد
عندما لا تكفي الفلاتر القياسية، تأتي التعبيرات المنتظمة للإنقاذ. تسمح الدالة preg_match() بفحص البيانات وفق أي نمط:
// التحقق من رقم الهاتف (التنسيق الروسي)$phone = "+7 (999) 123-45-67";$pattern = '/^\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2}$/';if (preg_match($pattern, $phone)) { echo "رقم الهاتف صحيح";} else { echo "تنسيق الهاتف غير صحيح";}
// التحقق من كلمة المرور (8 أحرف على الأقل، رقم واحد وحرف واحد على الأقل)$password = "MyPass123";$pattern = '/^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$/';if (preg_match($pattern, $password)) { echo "كلمة المرور قوية";} else { echo "كلمة المرور لا تستوفي المتطلبات";}مكتبات التحقق: عندما يصبح المشروع أكثر تعقيدًا
للمشاريع الكبيرة (الأطر، أنظمة إدارة المحتوى)، يصبح التحقق اليدوي غير مريح. هنا تأتي المكتبات المتخصصة للإنقاذ. دعنا نستعرض اثنتين من أشهرها:
1. Symfony Validator
جزء من نظام Symfony البيئي، ولكن يمكن استخدامه بشكل منفصل. يسمح بوصف قواعد التحقق من خلال التعليقات التوضيحية أو YAML/XML:
use Symfony\\Component\\Validator\\Validation;use Symfony\\Component\\Validator\\Constraints as Assert;
class User { /** * @Assert\\NotBlank(message="الاسم لا يمكن أن يكون فارغًا") * @Assert\\Length(min=2, max=50) */ public $name; /** * @Assert\\Email(message="تنسيق البريد الإلكتروني غير صحيح") */ public $email;}
// الاستخدام$validator = Validation::createValidatorBuilder() ->enableAnnotationMapping() ->getValidator();
$user = new User();$user->name = "أ";$user->email = "invalid-email";
$errors = $validator->validate($user);if (count($errors) > 0) { foreach ($errors as $error) { echo $error->getMessage() . "<br>"; }}
أيضاً في المكتبة
توصيات