📝 الدرس 10 من 13
النماذج ومدخلات المستخدم
$_GET و $_POST والتحقق من البيانات
النماذج HTML والـ PHP
النماذج (Forms) هي الطريقة الرئيسية لاستقبال مدخلات المستخدم في PHP. عندما المستخدم يرسل نموذجاً، PHP تستقبل البيانات عبر:
متى نستخدم GET ومتى POST؟
$_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)
قاعدة ذهبية: لا تثق أبداً بمدخلات المستخدم! تحقق دائماً قبل استخدامها.
دوال التحقق المهمة:
filter_var FILTER_VALIDATE_EMAIL: يتحقق من صحة الإيميل
filter_var FILTER_VALIDATE_INT: يتحقق أن القيمة عدد صحيح
دوال التحقق المهمة:
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؟