GET مقابل POST: متى تستخدمون كلًّا منهما
افهموا الفرق بين HTTP GET وPOST في PHP
GET مقابل POST: متى تستخدمون كلًّا منهما درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
أساليب HTTP في PHP للويب
عندما يرسل المتصفح نموذج HTML، فإنه يستخدم إحدى طريقتي HTTP GET أو POST. يلتقط PHP البيانات المُرسلة عبر المتغيرات العامة الفائقة:
$_GET— البيانات المضافة إلى عنوان URL$_POST— البيانات الموجودة في نص الطلب
طريقة GET
تضيف GET بيانات النموذج إلى عنوان URL على هيئة معاملات سلسلة استعلام:
<!-- HTML form -->
<form method="GET" action="search.php">
<input name="query" type="text">
<button type="submit">Search</button>
</form>
<!-- URL becomes: search.php?query=php+tutorial -->
<?php
$q = $_GET['query'] ?? '';
echo 'You searched for: ' . htmlspecialchars($q);طريقة POST
ترسل POST البيانات في نص طلب HTTP — ولا تظهر في عنوان URL:
<!-- HTML form -->
<form method="POST" action="login.php">
<input name="email" type="email">
<input name="password" type="password">
<button type="submit">Log In</button>
</form>
<?php
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';متى تستخدم GET
استخدم GET عندما:
- يكون الطلب غير مؤثر (لا يسبب آثارًا جانبية)
- يمكن أن تظهر البيانات في عنوان URL — مثل استعلامات البحث وعوامل التصفية وترقيم الصفحات
- تريد عناوين URL يمكن وضع علامات عليها أو مشاركتها
- لا تكون البيانات حساسة
متى تستخدم POST
استخدم POST عندما:
- يغيّر الطلب حالة الخادم (إنشاء أو تحديث أو حذف)
- تكون البيانات حساسة (كلمات المرور أو المعلومات الشخصية)
- ترسل كمية كبيرة من البيانات (ملفات أو نصًا طويلًا)
- لا تريد تخزين البيانات مؤقتًا في المتصفحات أو الوكلاء الوسيطين
حدود طول GET
تخضع طلبات GET لحدود طول عنوان URL (نحو 2000 محرف عادةً في التطبيقات العملية). ولا يملك POST حدًا عمليًا، باستثناء ما يحدده إعداد الخادم:
<?php
// php.ini settings for POST limits:
// post_max_size = 8M (total POST body size)
// upload_max_filesize = 2M
// Check current limits at runtime:
echo ini_get('post_max_size'); // 8M
echo ini_get('upload_max_filesize'); // 2Mالمتغير العام الفائق $_REQUEST
يدمج $_REQUEST كلًا من $_GET و$_POST و$_COOKIE. وهو مريح، لكنه لا يوضح مصدر البيانات بقدر كافٍ:
<?php
// Works for both GET and POST but is ambiguous
$name = $_REQUEST['name'] ?? '';
// Better: be explicit about the expected method
$name = match($_SERVER['REQUEST_METHOD']) {
'GET' => $_GET['name'] ?? '',
'POST' => $_POST['name'] ?? '',
default => '',
};التحقّق من طريقة الطلب
تحقّق دائمًا من طريقة الطلب قبل معالجة بيانات النموذج:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
if (!empty($name)) {
echo 'Hello, ' . htmlspecialchars($name);
}
} else {
// Show empty form
}HTTPS وأمان البيانات
حتى مع POST، تكون البيانات ظاهرة بنص واضح ما لم تستخدم HTTPS. قواعد الأمان الأساسية:
- استخدم HTTPS دائمًا في بيئة الإنتاج
- لا ترسل كلمات المرور عبر GET مطلقًا
- يبقى POST عبر HTTP غير آمن — إذ يشفر HTTPS نص الطلب أيضًا
إعادة التوجيه بعد POST (نمط PRG)
بعد نجاح POST، أعد التوجيه إلى طلب GET لمنع الإرسال المكرر عند تحديث الصفحة:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Process the form...
$id = saveToDatabase($_POST);
// Post-Redirect-Get (PRG) pattern
header('Location: /success.php?id=' . $id);
exit;
}النماذج متعددة الأجزاء لرفع الملفات
لرفع الملفات، يجب أن يستخدم النموذج enctype="multipart/form-data" مع POST:
<!-- Required for file uploads -->
<form method="POST" action="upload.php"
enctype="multipart/form-data">
<input type="file" name="avatar">
<button type="submit">Upload</button>
</form>
<?php
$file = $_FILES['avatar'];
echo $file['name']; // original filenameتحقّق سريعًا
أي طريقة HTTP ينبغي استخدامها عند إرسال نموذج تسجيل دخول يتضمن اسم المستخدم وكلمة المرور؟
مراجعة: GET مقابل POST
الاختلافات الأساسية:
- GET — في عنوان URL، قابل لوضع علامة عليه، بلا آثار جانبية، وحجمه محدود
- POST — في نص الطلب، مناسب للبيانات الحساسة، ولا يفرض حدًا على طول عنوان URL
- استخدم HTTPS دائمًا لحماية بيانات GET وPOST معًا
- تحقّق من
$_SERVER['REQUEST_METHOD']قبل المعالجة - طبّق نمط PRG لمنع عمليات POST المكررة
الأسئلة الشائعة
هل درس «GET مقابل POST: متى تستخدمون كلًّا منهما» مجاني؟
نعم — نص درس «GET مقابل POST: متى تستخدمون كلًّا منهما» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «GET مقابل POST: متى تستخدمون كلًّا منهما»؟
افهموا الفرق بين HTTP GET وPOST في PHP تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «GET مقابل POST: متى تستخدمون كلًّا منهما»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- GET مقابل POST: متى تستخدمون كلًّا منهما
- قراءة بيانات النماذج باستخدام المتغيرات العامة الفائقة
- تقنيات التحقق من صحة الإدخال
- تنقية إدخال المستخدم