المتغيرات فائقة النطاق — $_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. ويمكن لطلب واحد أن يحمل كليهما.

📖 ملخص

📝 تمارين

  1. إنشاء greet.php: قبول معلمة URL ?name=YourName وعرض "مرحبًا، اسمك!". إذا لم يتم توفير اسم، فاعرض "مرحبًا، ضيف!".
  2. إنشاء صفحة تجريبية لترقيم الصفحات: قبول ?page=N، وعرض عبارة "أنت في الصفحة N"، وإنشاء روابط للصفحات من 1 إلى 10.
  3. قم بإنشاء نموذج لسجل الزوار (باستخدام طريقة POST): تظهر الإرسالات أسفل النموذج. قم بتخزين الرسائل في ملف (تلميح: file_put_contents + file_get_contents).
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%