0Pricing
PHP Academy · درس

تقنيات التحقق من صحة الإدخال

تحققوا من الحقول المطلوبة والأنواع والأطوال قبل المعالجة

تقنيات التحقق من صحة الإدخال درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

لماذا نتحقق من صحة الإدخال؟

لا تثقوا بالبيانات الواردة من المستخدمين أبدًا. يضمن التحقق من الصحة استيفاء البيانات لمتطلباتكم قبل معالجتها. فهو يمنع:

  • أخطاء قاعدة البيانات الناتجة عن أنواع غير صحيحة
  • أخطاء منطق الأعمال الناتجة عن قيم غير متوقعة
  • الثغرات الأمنية الناتجة عن إدخال ضار

التحقق من الحقول المطلوبة

تحققوا من أن الحقول المطلوبة ليست فارغة بعد إزالة المسافات البيضاء:

<?php
$errors = [];
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');

if (empty($name)) {
    $errors['name'] = 'Name is required';
}
if (empty($email)) {
    $errors['email'] = 'Email is required';
}

if (!empty($errors)) {
    // show errors
}

التحقق من النوع

تحققوا من أن القيم من النوع المتوقع قبل استخدامها:

<?php
$age = $_POST['age'] ?? '';

// Method 1: filter_var
$validAge = filter_var($age, FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1, 'max_range' => 120]
]);

if ($validAge === false) {
    $errors[] = 'Age must be a number between 1 and 120';
}

التحقق من البريد الإلكتروني

تحققوا من عناوين البريد الإلكتروني باستخدام عامل التصفية FILTER_VALIDATE_EMAIL:

<?php
$email = trim($_POST['email'] ?? '');

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Invalid email address';
}

// Also check domain has MX record for extra validation
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    [$user, $domain] = explode('@', $email);
    if (!checkdnsrr($domain, 'MX')) {
        $errors[] = 'Email domain not found';
    }
}

التحقق من طول السلسلة النصية

فرضوا حدًّا أدنى وحدًّا أقصى لطول السلاسل النصية:

<?php
$username = trim($_POST['username'] ?? '');

$len = mb_strlen($username);

if ($len < 3) {
    $errors[] = 'Username must be at least 3 characters';
}
if ($len > 30) {
    $errors[] = 'Username must be at most 30 characters';
}

التحقق باستخدام القائمة البيضاء

تحققوا من القيم بمقارنتها بمجموعة القيم المسموح بها (القائمة البيضاء)، بدلًا من محاولة حظر القيم غير الصالحة:

<?php
$allowedRoles  = ['admin', 'editor', 'viewer'];
$allowedSorts  = ['name', 'date', 'price'];

$role = $_POST['role'] ?? '';
$sort = $_GET['sort']  ?? 'name';

if (!in_array($role, $allowedRoles, true)) {
    $errors[] = 'Invalid role selected';
}

// Default to 'name' if sort value invalid
if (!in_array($sort, $allowedSorts, true)) {
    $sort = 'name';
}

التحقق من عناوين URL وIP

تحققوا من عناوين URL وعناوين IP باستخدام عوامل التصفية المضمنة:

<?php
$url = $_POST['website'] ?? '';
$ip  = $_POST['ip']      ?? '';

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    $errors[] = 'Invalid URL';
}

if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    $errors[] = 'Invalid IPv4 address';
}

التحقق من الأنماط باستخدام Regex

استخدموا preg_match() للتحقق من التنسيقات المخصصة:

<?php
$phone = preg_replace('/[^0-9+]/', '', $_POST['phone'] ?? '');

// Validate format: +1234567890
if (!preg_match('/^\+?[0-9]{7,15}$/', $phone)) {
    $errors[] = 'Invalid phone number';
}

// Validate date format YYYY-MM-DD
$date = $_POST['date'] ?? '';
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) {
    $errors[] = 'Date must be in YYYY-MM-DD format';
}

التحقق من التاريخ

تحققوا من أن السلسلة النصية تمثل تاريخًا تقويميًا حقيقيًا:

<?php
function isValidDate(string $date, string $format = 'Y-m-d'): bool {
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) === $date;
}

var_dump(isValidDate('2024-02-29'));  // true (2024 is leap year)
var_dump(isValidDate('2023-02-29'));  // false (not a leap year)
var_dump(isValidDate('2024-13-01'));  // false (no month 13)

التحقق من الملفات المرفوعة

تحققوا من الملفات المرفوعة حسب النوع والحجم ورمز الخطأ:

<?php
$file = $_FILES['photo'] ?? null;

if ($file) {
    if ($file['error'] !== UPLOAD_ERR_OK) {
        $errors[] = 'Upload failed with error: ' . $file['error'];
    } elseif ($file['size'] > 2 * 1024 * 1024) {
        $errors[] = 'File exceeds 2MB limit';
    } elseif (!in_array(mime_content_type($file['tmp_name']), ['image/jpeg', 'image/png'])) {
        $errors[] = 'Only JPEG and PNG files allowed';
    }
}

عرض أخطاء التحقق

اعرضوا الأخطاء بجوار حقول النموذج مباشرةً، وحافظوا على القيم التي أدخلها المستخدم:

<?php
// Preserve entered values:
$name = htmlspecialchars($_POST['name'] ?? '');
?>
<form method="POST">
    <input name="name" value="<?= $name ?>">
    <?php if (isset($errors['name'])): ?>
        <p class="error"><?= htmlspecialchars($errors['name']) ?></p>
    <?php endif; ?>
    <button type="submit">Submit</button>
</form>

تحقق سريع

ما المقصود بنهج القائمة البيضاء في التحقق؟

مراجعة: التحقق من الإدخال

أفضل ممارسات التحقق:

  • تحققوا من الحقول المطلوبة بعد استخدام trim()
  • استخدموا filter_var() للتحقق من النوع والتنسيق
  • اسمحوا بالقيم المسموح بها باستخدام القائمة البيضاء مع in_array()
  • استخدموا preg_match() للأنماط المخصصة
  • تحققوا من الملفات المرفوعة: رمز الخطأ والحجم ونوع MIME
  • حافظوا على إدخال المستخدم عند إعادة عرض النماذج التي تتضمن أخطاء

الأسئلة الشائعة

هل درس «تقنيات التحقق من صحة الإدخال» مجاني؟

نعم — نص درس «تقنيات التحقق من صحة الإدخال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «تقنيات التحقق من صحة الإدخال»؟

تحققوا من الحقول المطلوبة والأنواع والأطوال قبل المعالجة تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تقنيات التحقق من صحة الإدخال»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. GET مقابل POST: متى تستخدمون كلًّا منهما
  2. قراءة بيانات النماذج باستخدام المتغيرات العامة الفائقة
  3. تقنيات التحقق من صحة الإدخال
  4. تنقية إدخال المستخدم
← العودة إلى PHP Academy