← الرئيسية

📋 النماذج ($_GET / $_POST)

الدرس السابع — تعلم كيف تستقبل بيانات من النماذج

📖 GET vs POST

لما المستخدم يملأ نموذج ويضغط Submit، البيانات تروح للسيرفر بطريقتين:

الميزةGETPOST
البيانات في URL✅ نعم❌ لا
مناسب للبحث✅ نعم❌ لا
مناسب لكلمات السر❌ لا✅ نعم
حجم البياناتمحدود (~2048 حرف)غير محدود
قابل للـ Bookmark✅ نعم❌ لا

⚠️ مهم: لا تثق بأي بيانات تأتي من المستخدم! دائماً نظّفها وتحقق منها.

🧪 محاكي النماذج التفاعلي

🌐 المتصفح (Form)
🖥️ السيرفر (PHP)

اضغط "إرسال النموذج" لتشوف البيانات

💻 كود استقبال النماذج

// استقبال بيانات POST if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = htmlspecialchars($_POST["name"]); $email = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL); if ($email) { echo "أهلاً $name!"; echo "إيميلك: $email"; } else { echo "إيميل غير صحيح!"; } } // Null Coalescing (PHP 7+) $name = $_POST["name"] ?? "زائر";

🧪 جرّب بنفسك

النتيجة ستظهر هنا...

⚠️ أخطاء شائعة

الخطأالسببالحل
استخدام $_POST["key"] بدون isset()خطأ لو ما أرسلاستخدم $_POST["key"] ?? ""
عدم تنظيف البياناتXSS Attackاستخدم htmlspecialchars()
$_GET لكلمة سرتظهر في الرابطاستخدم $_POST دائماً
\n$clean = htmlspecialchars($unsafe, ENT_QUOTES, 'UTF-8');\necho "Unsafe: " . $unsafe . "\\n";\necho "Clean: " . $clean;\n?>` }; function runSimulation() { const code = document.getElementById('codeInput').value; const output = document.getElementById('simOutput'); let result = ''; const echoMatches = code.match(/echo\s+(.+?);/gs); if (echoMatches) { echoMatches.forEach(match => { let content = match.replace(/echo\s+/, '').replace(/;$/, '').trim(); content = content.replace(/\$name/g, 'أحمد').replace(/\$email/g, '[email protected]').replace(/\$search/g, 'PHP').replace(/\$unsafe/g, "").replace(/\$clean/g, '<script>alert('XSS')</script>'); content = content.replace(/["']/g, '').replace(/\s*\.\s*/g, ' '); content = content.replace(/\\n/g, '\n'); content = content.replace(/<\?php|\?>/g, '').trim(); if (content) result += content + '\n'; }); } if (!result) result = '// لم يتم العثور على echo statements'; output.textContent = result.trim(); } function loadPreset(name) { document.getElementById('codeInput').value = presets[name].replace(/\\n/g, '\n'); runSimulation(); } function resetCode() { document.getElementById('codeInput').value = ``; document.getElementById('simOutput').textContent = 'النتيجة ستظهر هنا...'; }