المتغيرات فائقة النطاق — $_GET و$_POST
أنت الآن تقف تمامًا على الحد الفاصل بين الخادم والمتصفح. المتغيرات الفائقة (Superglobals) هي حزم التوصيل المدمجة في لغة PHP — ففي كل طلب، يقوم المتصفح بتجميع بيانات المستخدم وإرسالها؛ ثم تقوم لغة PHP بفكها إلى هذه المتغيرات، لتصبح جاهزة للاستخدام في أي مكان في البرنامج النصي الخاص بك.
1. ما هي المتغيرات الفائقة العالمية؟
المتغيرات الفائقة العالمية هي متغيرات مدمجة في لغة PHP يمكن الوصول إليها من أي نطاق دون الحاجة إلى الكلمة الرئيسية global. تبدأ جميعها بـ $_ وتكون متاحة دائمًا.
| سوبرجلوبال | الحصص | الاستخدام العام |
|---|---|---|
$_SERVER |
معلومات عن الخادم وبيئة التنفيذ | الحصول على عنوان URL الحالي، والكشف عن HTTPS |
$_GET |
معلمات استعلام URL | ترقيم الصفحات ?page=2، البحث ?q=PHP |
$_POST |
بيانات النماذج المرسلة عبر طريقة POST | بيانات تسجيل الدخول والتسجيلات |
$_FILES |
بيانات الملفات التي تم تحميلها | تحميل الصور الرمزية |
$_COOKIE |
ملفات تعريف الارتباط الخاصة بالمتصفح | ميزة «تذكرني» |
$_SESSION |
بيانات الجلسة من جانب الخادم | استمرار حالة تسجيل الدخول |
2. $_SERVER
$_SERVER هو مصفوفة تحتوي على معلومات على مستوى الخادم والطلب:
PHP
<?php
// Basic info
echo $_SERVER['REQUEST_METHOD']; // GET or POST
echo $_SERVER['REQUEST_URI']; // /myphp/page.php?id=1
echo $_SERVER['HTTP_HOST']; // localhost
echo $_SERVER['SERVER_NAME']; // localhost
echo $_SERVER['SERVER_PORT']; // 80
echo $_SERVER['REMOTE_ADDR']; // 127.0.0.1 (user's IP)
echo $_SERVER['HTTP_USER_AGENT']; // User's browser info
echo $_SERVER['SCRIPT_NAME']; // /myphp/page.php
echo $_SERVER['PHP_SELF']; // /myphp/page.php
// Detect HTTPS
$isHttps = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on';
// Build the current full URL
$currentUrl = ($isHttps ? "https" : "http") . "://"
. $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];
echo $currentUrl; // http://localhost/myphp/demo.php
?>
💡 نصيحة: توفر لك
$_SERVER['REMOTE_ADDR'] عنوان IP الخاص بالمستخدم (على الرغم من أنه قد يكون عنوان IP الخاص بالبروكسي إذا كان هناك بروكسي بينك وبين المستخدم). تتيح لك $_SERVER['HTTP_USER_AGENT'] تحديد نوع المتصفح، لكن لا تعتمد عليها في أي أمور حساسة — فمن السهل جدًّا تزوير معلومات وكيل المستخدم.
3. $_GET — معلمات استعلام عنوان URL
أضف أزواج ?key=value إلى عنوان URL، وسيقوم PHP تلقائيًا بتحويلها إلى $_GET:
TEXT
http://localhost/search.php?q=PHP&page=2&sort=newest
↑ ↑ ↑
$_GET['q'] $_GET['page'] $_GET['sort']
PHP
<?php
// search.php
$keyword = $_GET['q'] ?? "No search term provided";
$page = $_GET['page'] ?? 1;
$sort = $_GET['sort'] ?? "relevance";
echo "Search term: {$keyword}<br>";
echo "Page {$page}<br>";
echo "Sort by: {$sort}<br>";
?>
▶ مثال: روابط ترقيم الصفحات
PHP
<?php
$page = (int)($_GET['page'] ?? 1);
$perPage = 20;
echo "<h3>Products — Page {$page}</h3>";
// Generate pagination links
for ($i = 1; $i <= 5; $i++) {
$active = ($i == $page) ? "style='font-weight:bold;color:red'" : "";
echo "<a href='?page={$i}' {$active}>{$i}</a> ";
}
?>
💡 نصيحة: القيم الموجودة في
$_GET هي دائمًا سلاسل نصية ("2"، وليست 2). قم بتحويلها باستخدام (int) أو intval() قبل استخدامها في العمليات الحسابية.
4. $_POST — بيانات النموذج
يستقبل $_POST البيانات المرسلة من النماذج التي تستخدم method="POST". وهذا هو نمط التفاعل الأساسي في تطوير الويب:
▶ مثال: معالجة عملية إرسال النموذج
PHP
<?php
// Check if this is a POST request
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
$message = trim($_POST['message'] ?? '');
if ($name && $message) {
echo "<h3>Message received!</h3>";
echo "<p><strong>{$name}:</strong> {$message}</p>";
} else {
echo "<p style='color:red'>Please fill in all fields</p>";
}
}
?>
<form method="POST" action="">
<p>
<label>Name:</label>
<input type="text" name="name" value="<?= $_POST['name'] ?? '' ?>">
</p>
<p>
<label>Message:</label>
<textarea name="message"><?= $_POST['message'] ?? '' ?></textarea>
</p>
<button type="submit">Submit</button>
</form>
💡 نصيحة: يقوم
action="" بإرسال البيانات إلى نفس الصفحة — وهو نمط شائع حيث يقوم ملف PHP واحد بعرض النموذج ومعالجة عملية الإرسال في آن واحد.
5. GET مقابل POST
| GET | POST | |
|---|---|---|
| موقع البيانات | سلسلة استعلام URL (مرئية) | نص طلب HTTP (مخفي) |
| حجم البيانات | ~2048 حرفًا | غير محدود نظريًّا |
| يمكن إضافتها إلى المفضلة / مشاركتها | ✅ نعم | ❌ لا |
| التخزين المؤقت للمتصفح | مخزّن مؤقتًا | غير مخزّن مؤقتًا |
| الأفضل لـ | البحث، ترقيم الصفحات، عوامل التصفية | تسجيل الدخول، التسجيل، تعديل البيانات |
| الأمان | المعلمات المكشوفة في عنوان URL | أكثر أمانًا نسبيًّا (ولكن غير مشفرة) |
TEXT
GET → "Show me page 2 of the catalog" → Best for queries
POST → "Here are my login credentials" → Best for mutations
💡 نصيحة: إليك القاعدة الذهبية — استخدم GET لعمليات القراءة، وPOST لعمليات الكتابة. لا تضع أبدًا كلمات المرور أو أرقام بطاقات الائتمان أو أي بيانات حساسة في سلسلة استعلام GET — فهي ستظهر في سجل المتصفح وسجلات الخادم ورؤوس الإحالة.
▶ مثال: $_REQUEST (غير موصى به)
PHP
<?php
// $_REQUEST merges $_GET + $_POST + $_COOKIE
// Don't use it! It's unsafe and you can't tell where the data came from
$unreliable = $_REQUEST['name'] ?? '';
// Always use explicit $_GET or $_POST
?>
❓ أسئلة شائعة
س هل يمكن لـ $_GET تمرير المصفوفات؟
ج نعم.
?tags[]=PHP&tags[]=MySQL ينتج $_GET['tags'] = ['PHP', 'MySQL']. ?user[name]=John&user[age]=25 ينشئ مصفوفة متداخلة.س أين توجد معلمات POST؟ إنها غير موجودة في عنوان URL.
ج تُنقل معلمات POST ضمن نص طلب HTTP. افتح «أدوات المطور» في متصفحك → علامة التبويب «الشبكة» لفحصها.
س لقد رأيت مواقع تحتوي على
?key=val في عنوان URL وعلى نموذج POST في الوقت نفسه. كيف يحدث ذلك؟ج من الأنماط الشائعة وجود نموذج يحتوي على
action="page.php?id=1" — حيث يتم إرسال id=1 عبر GET بينما تُرسل حقول النموذج عبر POST. ويمكن لطلب واحد أن يحمل كليهما.📖 ملخص
$_SERVERيوفر معلومات عن الخادم — عنوان URL، وعنوان IP، وطريقة الطلب، وغيرها$_GETيلتقط معلمات الاستعلام في عنوان URL (?key=val، تُستخدم للبحث وتقسيم الصفحات)$_POSTيسجل عمليات إرسال النماذج (method="POST"، يُستخدم للتسجيل والدخول)- تُستخدم طريقة GET لعمليات القراءة (الاستعلامات)؛ بينما تُستخدم طريقة POST لعمليات الكتابة (التعديلات)
- لا تستخدم أبدًا طريقة GET لنقل كلمات المرور أو البيانات الحساسة الأخرى
- استخدم
$_GET['key'] ?? 'default'للوصول الآمن إلى المعلمات - تجنب استخدام
$_REQUEST— فهو يخلط بين مصادر البيانات
📝 تمارين
- إنشاء
greet.php: قبول معلمة URL?name=YourNameوعرض "مرحبًا، اسمك!". إذا لم يتم توفير اسم، فاعرض "مرحبًا، ضيف!". - إنشاء صفحة تجريبية لترقيم الصفحات: قبول
?page=N، وعرض عبارة "أنت في الصفحة N"، وإنشاء روابط للصفحات من 1 إلى 10. - قم بإنشاء نموذج لسجل الزوار (باستخدام طريقة POST): تظهر الإرسالات أسفل النموذج. قم بتخزين الرسائل في ملف (تلميح:
file_put_contents+file_get_contents).



