الرئيسية تعليم لغات البرمجة معالجة النماذج في PHP: فهم واستخدام GET و POST

معالجة النماذج في PHP: فهم واستخدام GET و POST

amr gamal سبتمبر 15, 2026

في الدروس السابقة من هذا المسار، تعلّمنا كيف تكتب كود PHP ينفذ مهام أساسية ويعرض نصوصاً ومتغيرات للمستخدم. لكن حتى الآن، كانت تطبيقاتنا أحادية الاتجاه؛ البرمجية تعرض شيئاً، ولا يمكن للمستخدم التفاعل معها لتغيير النتائج أو إدخال بيانات حقيقية. التفاعل الحقيقي في الويب يبدأ عندما نطلب من المستخدم إدخال بيانات —مثل تسجيل الدخول، أو البحث في موقع، أو إرسال رسالة— ثم نستقبل هذه البيانات ونعالجها. هنا يأتي دور النماذج (Forms) في HTML، ومعالجة بياناتها عبر لغة PHP باستخدام طريقتين رئيسيتين: GET و POST. في هذا الدرس، سنتعرف على الفرق الجوهري بين هاتين الطريقتين، ومتى تستخدم كل واحدة منهما، وكيف تكتب كود PHP آمناً وصحيحاً لاستقبال ومعالجة بيانات المستخدم خطوة بخطوة، مع التركيز على الجوانب الأمنية وطرق التحقق السليمة.

ما هي نماذج الويب وكيف تصل البيانات إلى PHP؟

لكي تفهم كيف تنتقل البيانات من متصفح المستخدم إلى خادم الويب (Server)، عليك أن تخيل العملية كأنها رسالة بريدية أو طلب رسمي. المستخدم يملأ استمارة على المتصفح (الواجهة الأمامية أو Front-end)، ثم يضغط زر "إرسال". يقوم المتصفح بتغليف هذه البيانات وإرسالها إلى ملف PHP محدد على الخادم (الخلفية أو Back-end).

عندما تصل البيانات إلى ملف PHP، توفر اللغات مصفوفات عامة جاهزة للاستخدام تُعرف باسم المصفوفات الفائقة (Superglobals). هذه المصفوفات تكون متاحة في أي مكان داخل سكربت PHP دون الحاجة لتعريفها أو استدعائها بطرق معقدة. للطريقتين اللتين نتحدث عنهما اليوم، لدينا مصفوفتان أساسيتان: $_GET و $_POST.

من المهم جداً إدراك أن بيانات المستخدم القادمة عبر هذه المصفوفات تُعتبر دائماً "غير موثوقة"؛ لأنها تأتي من خارج الخادم ويمكن التلاعب بها بسهولة من قبل المستخدم أو عبر أدوات الفحص التابعة للمتصفح. لذلك، فإن فهم كيفية التعامل معها بوعي وأمان هو الفاصل بين مطور مبتدئ ومطور محترف.

طريقة GET: الاستخدام والخصائص

تُستخدم طريقة GET عندما ترغب في جلب أو طلب معلومات من الخادم دون تغيير حالته أو تعديل بيانات مخزنة. عندما ترسل نموذجاً أو رابطاً باستخدام GET، فإن البيانات التي يكتبها المستخدم تُدمج مباشرة في عنوان الصفحة وتظهر بوضوح في شريط العنوان (URL) الخاص بالمتصفح بعد إشارة الاستفهام (? على هيئة أزواج من المفتاح والقيمة مثل key=value).

على سبيل المثال، إذا كان لديك نموذج بحث في مدونة أو متجر إلكتروني، فسترغب غالباً في استخدام GET لكي يتمكن المستخدم من نسخ رابط الصفحة بنتائج البحث ومشاركته مع الآخرين، أو حفظه في المفضلة (Bookmarks) للعودة إليه لاحقاً.

مثال عملي على استخدام GET

لننشئ ملفين، الأول عبارة عن صفحة HTML تحتوي على نموذج بحث بسيط، والثاني هو ملف PHP الذي سيعالج البيانات الواردة.

ملف HTML (سُمّه search.html):

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>بحث موقع SiteGeeky</title>
</head>
<body>
<form action="result.php" method="GET">
<label for="keyword">ابحث عن درس:</label>
<input type="text" id="keyword" name="q">
<button type="submit">بحث</button>
</form>
</body>
</html>

الآن، لننشئ ملف المعالجة result.php:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>نتائج البحث</title>
</head>
<body>
<h2>نتائج البحث</h2>
<p>
<?php
if (isset($_GET['q']) && !empty(trim($_GET['q']))) {
    $search_term = trim($_GET['q']);
    echo "أنت تبحث عن: " . htmlspecialchars($search_term, ENT_QUOTES, 'UTF-8');
} else {
    echo "لم تقم بإدخال كلمة بحث صحيحة.";
}
?>
</p>
</body>
</html>

شرح تفصيلي لكود GET

في نموذج HTML، حددنا خاصية method="GET" وخاصية action="result.php" لنخبر المتصفح أين يرسل البيانات وبأي طريقة. عندما يكتب المستخدم كلمة "PHP" مثلاً ويضغط زر البحث، سيتحول الرابط في متصفح المستخدم إلى الشكل التالي:

http://localhost/result.php?q=PHP

في ملف PHP، استخدمنا دالة isset() للتأكد أولاً من أن المتغير q تم إرساله فعلاً عبر الرابط، وذلك لتجنب ظهور تحذيرات برمجية (Undefined index) إذا حاول شخص فتح الملف مباشرة بدون معاملات. ثم أضفنا فحصاً إضافياً باستخدام !empty() للتأكد من أن الحقل ليس فارغاً بعد إزالة المسافات، وحفظنا القيمة في متغير نظيف. وأخيراً، استخدمنا دالة htmlspecialchars() مع تحديد المعاملات الإضافية لضمان تحويل الرموز الخاصة إلى كيانات HTML، وهو إجراء دفاعي أساسي لمنع ثغرات الحقن البرمجي (XSS).

طريقة POST: الاستخدام والخصائص

على عكس GET، تُستخدم طريقة POST عندما تكون البيانات حساسة أو كبيرة الحجم، أو عندما تقوم بتغيير أو إنشاء بيانات على الخادم (مثل إنشاء حساب جديد، تعديل كلمة مرور، حذف عنصر، أو إضافة تعليق). في طريقة POST، لا تظهر البيانات في شريط العنوان أبداً، بل تُرسل مخفية تماماً داخل جسم الطلب (Request Body) بين المتصفح والخادم.

هذا يجعل طريقة POST الخيار الآمن والأفضل لمعالجة بيانات النماذج الحساسة. مع ذلك، يجب التذكير بأن إخفاء البيانات في جسم الطلب لا يعني أنها آمنة أثناء انتقالها عبر شبكة الإنترنت العادية، ولذلك يجب دائماً استخدام بروتوكول التشفير HTTPS مع نماذج POST.

مثال عملي على استخدام POST

دعنا نصمم نموذج تسجيل بيانات مستخدم (مثل نموذج اشتراك بسيط)، لنرى كيف نتعامل مع POST ونفحص البيانات بدقة.

ملف HTML (سُمّه register.html):

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>التسجيل في الموقع</title>
</head>
<body>
<form action="process.php" method="POST">
<div>
<label for="username">اسم المستخدم:</label>
<input type="text" id="username" name="username">
</div>
<div>
<label for="email">البريد الإلكتروني:</label>
<input type="email" id="email" name="email">
</div>
<button type="submit" name="submit_btn">تسجيل</button>
</form>
</body>
</html>

ملف المعالجة process.php:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>تأكيد التسجيل</title>
</head>
<body>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST['submit_btn'])) {
        $username = trim($_POST['username']);
        $email = trim($_POST['email']);
        
        if (!empty($username) && !empty($email)) {
            if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
                echo "<h3>مرحباً بك، " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8') . "</h3>";
                echo "<p>تم تسجيل بريدك الإلكتروني بنجاح: " . htmlspecialchars($email, ENT_QUOTES, 'UTF-8') . "</p>";
            } else {
                echo "<p style='color: red;'>البريد الإلكتروني المدخل غير صالح.</p>";
            }
        } else {
            echo "<p style='color: red;'>الرجاء ملء جميع الحقول المطلوبة.</p>";
        }
    }
} else {
    echo "<p>لا يمكنك الوصول لهذه الصفحة مباشرة.</p>";
}
?>
</body>
</html>

شرح تفصيلي لكود POST

في هذا المثال، قمنا بعدة خطوات احترافية تضمن سلامة المعالجة:

  • استخدمنا فحص طريقة الطلب باستخدام $_SERVER["REQUEST_METHOD"] == "POST" لضمان أن السكربت لا يتم تنفيذه إلا إذا جاء الطلب عبر إرسال نموذج حقيقي.
  • تأكدنا من وجود زر الإرسال عبر isset($_POST['submit_btn']).
  • استخدمنا دالة trim() لحذف أي مسافات زائدة قد يضيفها المستخدم بالخطأ في بداية أو نهاية النصوص.
  • استخدمنا دالة الفحص المدمجة filter_var() مع الفلتر FILTER_VALIDATE_EMAIL للتأكد من أن البريد الإلكتروني مدخل بتنسيق صحيح وليس مجرد نص عشوائي.
  • قمنا بتأمين مخرجات النصوص المعروضة للمستخدم باستخدام htmlspecialchars() لمنع أي ثغرات حقن محتملة.

مقارنة تحليلية: متى تختار GET ومتى تختار POST؟

اختيار الطريقة المناسبة يعتمد بالكامل على طبيعة الوظيفة البرمجية وما تفعله بالبيانات:

استخدم GET عندما:

  • تريد جلب معلومات أو بيانات للقراءة فقط.
  • تنفيذ عمليات بحث أو تصفية منتجات حسب الفئة أو السعر.
  • تريد أن يتمكن المستخدم من حفظ الصفحة في المفضلة أو مشاركة الرابط مع الآخرين متضمناً نتائج البحث أو العرض.
  • حجم البيانات صغير جداً وغير حساس.

استخدم POST عندما:

  • تعامل معلومات حساسة أو خاصة مثل كلمات المرور أو البيانات الشخصية.
  • تريد تعديل بيانات على الخادم (مثل إنشاء حساب، تعديل ملف شخصي، أو حذف منشور).
  • إرسال ملفات ومستندات عبر نموذج (تتطلب عادة استخدام enctype="multipart/form-data" مع POST).
  • حجم البيانات كبير (لأن شريط العنوان يمتلك حدوداً تقريبية لطول النصوص بينما POST لا يمتلك هذا القيد العملي).

أخطاء شائعة يقع فيها المبتدئون

عند التعامل مع النماذج للمرة الأولى، يقع الكثير من المطورين المبتدئين في بعض الأخطاء المتكررة التي تؤدي إلى توقف الكود أو ظهور ثغرات أمنية واضحة:

1. الوثوق الكامل ببيانات المستخدم

لا تقم أبداً بإدخال بيانات $_GET أو $_POST مباشرة إلى قاعدة البيانات أو طباعتها على الشاشة دون تنظيفها والتحقق من صحتها. الاعتماد على افتراض أن المستخدم سيكتب ما طلبته منه فقط هو خطأ فادح يعرض التطبيق للاختراق.

2. استخدام GET لكلمات المرور أو البيانات السرية

إرسال كلمة مرور أو بيانات اعتماد عبر GET يعني أنها ستظهر مكتوبة بوضوح في شريط العنوان، وفي تاريخ المتصفح (Browser History)، وفي ملفات سجلات الخادم (Server Logs)، وهو خطأ أمني كارثي يسهل سرقة الحسابات.

3. نسيان خاصية name في مدخلات HTML

يعتمد PHP كلياً على قيم الخاصية name في عناصر الإدخال للتعرف على البيانات وتصنيفها داخل المصفوفات الفائقة. إذا نسيت كتابة name="username" مثلاً في حقل الإدخال، فلن تصل هذه البيانات إلى مصفوفة $_POST أو $_GET أبداً، وستبقى القيمة مفقودة دون رسالة خطأ واضحة من المتصفح.

4. إهمال معالجة الأخطاء والتحقق من نوع البيانات

ترك النماذج بدون تحقق من نوع البيانات المدخلة (مثل التأكد من أن العمر رقم صحيح أو أن البريد الإلكتروني صالح) يؤدي إلى إدخال بيانات فاسدة ومشوّهة إلى قاعدة البيانات، مما يسبب أخطاء غير متوقعة في أجزاء أخرى من التطبيق.

خلاصة

معالجة النماذج باستخدام GET و POST هي الجسر الحيوي الذي يربط بين تصفح المستخدم السلبي والتفاعل الحقيقي مع تطبيقات الويب الحديثة. تذكر دائماً أن GET مخصصة لجلب البيانات وعرضها وتظهر بوضوح في الرابط، بينما POST مخصصة للإرسال الآمن وتغيير حالة البيانات خلف الكواليس.

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

الكاتب
عمرو جمال

محرر متخصص في تطوير قوالب بلوجر وووردبريس وتقديم شروحات التقنية. أقدم حلولاً مبتكرة لتصميم مواقع عصرية وجذابة.