📖 GET vs POST
لما المستخدم يملأ نموذج ويضغط Submit، البيانات تروح للسيرفر بطريقتين:
| الميزة | GET | POST |
| البيانات في URL | ✅ نعم | ❌ لا |
| مناسب للبحث | ✅ نعم | ❌ لا |
| مناسب لكلمات السر | ❌ لا | ✅ نعم |
| حجم البيانات | محدود (~2048 حرف) | غير محدود |
| قابل للـ Bookmark | ✅ نعم | ❌ لا |
⚠️ مهم: لا تثق بأي بيانات تأتي من المستخدم! دائماً نظّفها وتحقق منها.
💻 كود استقبال النماذج
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 "إيميل غير صحيح!";
}
}
$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, '