/ دورة PHP الشاملة
0/13 مكتملة
📝 الدرس 10 من 13

النماذج ومدخلات المستخدم

$_GET و $_POST والتحقق من البيانات

🕐 20-30 دقيقة 📝 5 أسئلة 💻 2 أمثلة برمجية

النماذج HTML والـ PHP

النماذج (Forms) هي الطريقة الرئيسية لاستقبال مدخلات المستخدم في PHP. عندما المستخدم يرسل نموذجاً، PHP تستقبل البيانات عبر:

  • $_GET: البيانات المُرسَلة في الـ URL (method="get") — مرئية في الـ URL
  • $_POST: البيانات المُرسَلة بشكل مخفي (method="post") — لا تظهر في الـ URL
  • $_REQUEST: يجمع $_GET و $_POST و $_COOKIE

متى نستخدم GET ومتى POST؟
  • GET: للبحث والفلترة (البيانات غير حساسة)
  • POST: لإرسال كلمات مرور، بيانات شخصية، أو لتغيير حالة في السيرفر
PHP
<!-- form.html -->
<!DOCTYPE html>
<html>
<body dir="rtl">
<form action="process.php" method="POST">
    <label>الاسم:</label>
    <input type="text" name="username" required><br>
    
    <label>البريد:</label>
    <input type="email" name="email" required><br>
    
    <label>العمر:</label>
    <input type="number" name="age" min="1" max="120"><br>
    
    <button type="submit">إرسال</button>
</form>
</body>
</html>

<!-- process.php -->
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // استقبال وتنظيف البيانات
    $name  = htmlspecialchars(trim($_POST["username"]));
    $email = htmlspecialchars(trim($_POST["email"]));
    $age   = (int) $_POST["age"];
    
    echo "مرحباً $name!<br>";
    echo "إيميلك: $email<br>";
    echo "عمرك: $age سنة<br>";
}
?>
الناتج المتوقع
مرحباً أحمد! إيميلك: ahmed@example.com عمرك: 25 سنة

التحقق من البيانات (Validation)

قاعدة ذهبية: لا تثق أبداً بمدخلات المستخدم! تحقق دائماً قبل استخدامها.

دوال التحقق المهمة:
  • isset(): هل المتغير معرَّف وليس null؟
  • empty(): هل المتغير فارغ؟
  • filter_var(): تحقق وتصفية متقدمة
  • htmlspecialchars(): حماية من XSS

filter_var FILTER_VALIDATE_EMAIL: يتحقق من صحة الإيميل
filter_var FILTER_VALIDATE_INT: يتحقق أن القيمة عدد صحيح
PHP
<?php
function validateForm(array $data): array {
    $errors = [];
    
    // تحقق من الاسم
    if (empty(trim($data["name"] ?? ""))) {
        $errors[] = "الاسم مطلوب";
    } elseif (strlen($data["name"]) < 3) {
        $errors[] = "الاسم يجب أن يكون 3 أحرف أو أكثر";
    }
    
    // تحقق من الإيميل
    if (empty($data["email"])) {
        $errors[] = "البريد الإلكتروني مطلوب";
    } elseif (!filter_var($data["email"], FILTER_VALIDATE_EMAIL)) {
        $errors[] = "البريد الإلكتروني غير صحيح";
    }
    
    // تحقق من العمر
    $age = filter_var($data["age"] ?? "", FILTER_VALIDATE_INT);
    if ($age === false || $age < 1 || $age > 120) {
        $errors[] = "العمر يجب أن يكون بين 1 و 120";
    }
    
    return $errors;
}

// اختبار
$input = [
    "name"  => "أحمد",
    "email" => "invalid-email",
    "age"   => 25
];

$errors = validateForm($input);
if (empty($errors)) {
    echo "✅ البيانات صحيحة!";
} else {
    echo "❌ أخطاء:<br>";
    foreach ($errors as $err) {
        echo "• $err<br>";
    }
}
?>
الناتج المتوقع
❌ أخطاء: • البريد الإلكتروني غير صحيح
🧠

اختبر فهمك — النماذج ومدخلات المستخدم

5/5 للمتابعة
السؤال 1
ما الـ superglobal المستخدم لاستقبال بيانات نموذج method="post"؟
السؤال 2
لماذا نستخدم htmlspecialchars() مع مدخلات المستخدم؟
السؤال 3
ما الدالة التي تتحقق من صحة الإيميل؟
السؤال 4
متى نستخدم method="get" بدلاً من "post"؟
السؤال 5
ما وظيفة isset() في PHP؟