ما الفرق بين GET و POST في PHP

ما الفرق بين GET و POST في PHP

تشتمل لغة PHP على طريقتين أساسيتين لارسال البيانات الى الخادم وهما GET و POST , سنوضح في هذا المقال الفروقات الأساسية بينهما ومتى نقوم باستخدام GET أو POST في الكود الخاص بنا.

لنبدأ أولاً بفهم ماهية ال PHP Requests ومن أين ظهرت مصطلحات GET , POST في الأساس؟

ارسال البيانات في PHP

عادة , حتى تقوم بارسال بيانات الى الخادم يوجد لدينا عنصر وله خاصية method لتحديد نوع الطلب (Request Method) كي يتم ارسالها الى الخادم , ستجد في أي موقع هذا المثال فهو أفضل طريقة لارسال البيانات وتبادلها مع الخادم

يوجد طرق أخرى يستخدمها اطار عمل Laravel مثل PUT , PATCH , DELETE لكنها غير رسمية , لكن يقوم اطار عمل لارافل بانشائها بطريقة مخادعة للغة PHP ليضيف المزيد من الامكانيات الى اطار العمل 

مقال مرتبط : ما هو لارافل Laravel ؟ تعرف على أهم اطار عمل ل لغة PHP

لا يوجد أي شيئ غير اعتيادي في الكود السابق , عنصر

عادي يوجه الطلبات لصفحة somepage.php عبر طريقة POST , و هنا الجزء الذي يهم مقالنا , لم تم استخدام طريقة POST ؟

المثال السابق من أكثر الأمثلة شهرة في توضيح الفرق الأساسي بين POST و GET , سنبدأ الان بتوضيح الفروقات و تطبيقها على ال

السابق.

GET تظهر البيانات في الرابط

عند استخدام GET تظهر البيانات في الرابط بوضوح , على سبيل المثال لو أن لدينا عنصر input فيه باسم my_input فرضاً و يوجه الطلبات الى صفحة show_get.php , فسيظهر الرابط بالشكل التالي عند الضغى على زر Submit:

http://domain.com/show_get.php?my_input=YOUR_INPUT_VALUE

وهذه خاصية GET الأساسية , فهي تظهر بيانات ال

في الرابط على شكل سلسلة من أسماء الحقول و القيمة المدخلة , قد تبدو هذه فكرة مناسبة لعرض صفحة مستخدم أو صفحة بحث مثلاَ , لكن في حال كلمة المرور و اسم المستخدم فمن المؤكد أنك لا تريد ذلك , فبهذه الطريقة أي شخص موجود بجانب المستخدم سيعرف بياناته الخاصة و يحصل على دخول مستمر لحسابه في موقعك ولا تبدو هذه بفكرة جيدة .

على العكس تماماً , تقوم POST بارسال البيانات الى الصفحة دون اظهارها في الرابط , وهنا تكمن أهمية POST في التعامل مع بعض أنواع الطلبات في موقعك كطلب تسجيل دخول مثلاً.

POST لا تقبل الدخول المباشر الى الرابط

خاصية أخرى مهمة , بنفس المثال السابق لنفترض أن شخصاً ما يعرف ان الرابط الذي يستقبل طلبات تسجيل الدخول في موقعك هو login.php , وغالباً ما يستخدم المخترقون عدة طرق ومنحنيات تفكير لتوقع مثل هذه الروابط , فبمجرد ما حصل على الرابط يستطيع الآن البدء بتخمين كلمة سر حساب معين عبر المحاولة مرات عدة (و يوجد بعض الأدوات المخصصة لعمل هذه التخمينات) , فان كنت قد سمحت بطلبات من نوع GET على هذا الرابط فسيبدأ المخترق المحاولة , والفكرة كالتالي , سيبدأ بمحاولة استخدام كلمة مرور مرة تلو الأخرى حتى يصل لطلبه , فسيدخل على الرابط :

http://domain.com/login.php?username=username&password=12345

لم تنجح ؟ سيعيد المحاولة مرات عدة بكلمات سر مختلفة حتى ينجح , أما في POST فشكل الرابط يكون كالتالي : 

http://domain.com/login.php

فلن يستطيع المحاولة الا بارسال POST Request الى الرابط المعني و يمكنك أنت الحفاظ على أمانك باستخدام CSRF Token أو اي سبيل آخر للحماية , لكن الخط الأول لدفاعك هو أن ألا تسمح له بارسال بيانات مباشرة عبر الرابط.

و من المهم التوضيح هنا , مجرد استخدام POST لا يعني أن موقعك آمن , لا بد من استخدام سبل حماية مختلفة لسد جميع الثغرات و عدم ترك أي مجال للمخاطرة.

مقال مرتبط : 5 ثغرات خطيرة عليك التأكد من حمايتها في موقعك

كيف يمكنني الوصول لمحتوى طلبات GET و POST ؟ 

لكل من الطلبين السابقين أمر مخصص للوصول الى المعلومات الخاصة بهم , ففي حالة GET يمكنك الوصول الى البيانات عبر $_GET وهي Super Global Array ولا بد من كتابتها بأحرف كابيتل , لنأخذ المثال التالي :

لنفترض أن لديك form يوجه الطلبات الى صفحة somepage.php وب "method="get ولديك عنصر input باسم my_input وعنصر input من نوع submit باسم send_form أما في صفحة somepage.php سنكتب الكود التالي:

<?php 

if(isset($_GET['send_form'])){ //The Form Has Been Submitted
  $my_input = $_GET['my_input']; //The Value of an input with the name of my_input
  echo $my_input;
  //or 
  echo $_GET['my_input'];

}

اذاً في المثال السابق قمنا بعرض محتوى ال input على الشاشة , ليس أكثر من ذلك ! لاحظ أننا وصلنا لقيمة الطلب عبر $_GET وتأكد من أنها جميعاً بحروف كابيتل ALL CAPS , يمكنك طبعاً تخزين محتوى الطلب في متغير و استخدامه في مكان ما في الصفحة .

أما في حالة POST فالطريقة تماماً كسابقتها لكن بدلاً من استخدام $_GET نستخدم $_POST , هذا هو الفرق الوحيد.

يمكنك استخدام GET خارج عناصر ال form أيضاً

نعم , هذا صحيح , بالنسبة ل GET يمكنك استخدامها على أي صفحة في موقعك قد تحتوي أي مدخلات Parameters , على سبيل المثال تريد عرض صفحة المستخدم الخاصة Profile فغالباً سيكون الرابط بشكل مشابه ل:

http://domain.com/profile.php?username=naqrah

ولاحظ أننا هنا نمرر اسم المستخدم الى صفحة profile.php و هذا أمر بديهي لكي نحصل على المعلومات الخاصة بهذا المستخدم بالذات من قاعدة البيانات , فبالتالي الكود في صفحة profile.php سيكون يشبه التالي :

<?php 

$username = $_GET['username'];
$user_info = ''; //Some Database Query to get the user info based on username

و لاحظ هنا أنه لا يوجد عنصر form نهائياً ورغم ذلك يمكننا استخدام GET للحصول على معلومات من الرابط واستخدامها في المشروع.

متى أستخدم GET ومتى أستخدم POST في موقعي ؟

ربما هذا هو أكثر سؤال يخطر ببالك الآن , لن أجيبك بصورة عامة كقول "الأمر يعتمد على مشروعك" , لكن سأحاول اجابتك ببعض الأمثلة علها تساعدك في تقرير الأنسب لك.

يمكنك استخدام GET في حالات مثل صفحة مستخدم Profile او صفحة بحث في الموقع أو صفحة منتج في الموقع بصورة مشابهة لفكرة صفحة الملف الشخصي , أما صفحة البحث في الموقع فسيتكون عبارة عن عنصر

ولكن قمنا باستخدام GET هنا لكي يستطيع المستخدم مشاركة الرابط مع أصدقائه مثلاً , فتخيل أن لديك موقع تجارة الكترونية فرضاً وبحث أحد المستخدمين عن عبارة Used Computers مثلاً , ووجد في نتائج البحث نتيجة يعتقد أنها مناسبة لأحد أصدقائه فعندها يمكنه نسخ الرابط الذي سيبدو كالتالي : http://domain.com/search.php?query=Used%20Computers وارساله لصديقه

أما عن استخدامات POST فتكون لصفحة يحظر فيها معرفة المعلومات التي تتم ارسالها بها كصفحة تسجيل حساب جديد أو تسجيل الدخول أو صفحة تواصل معنا مثلاً

مصادر تعليمية ل GET و POST 

من المؤكد أنك تعرفت عليهما خلال دورة من دورات لغة PHP , يمكنك الحصول على المزيد من المعلومات و التعمق في فهمها وفهم أسرار استخدمهم عبر المصادر التالية:

https://www.w3schools.in/php/get-post/

https://www.youtube.com/watch?v=7wQrD647KUI

https://www.youtube.com/watch?v=2D40N1DZcxM

في النهاية ...

استخدمات GET و POST في موقعك لا حصر لها , فهما الطريقة الأساسية لتبادل البيانات بين المستخدم و موقعك , الادراك الصحيح لكل واحدة منهم يؤتي ثماره على مستوى الحماية و تجربة الاستخدام عموماً فتأكد من فهمهما تماماً قبل استخدامهما في مشروعك , لفهم العواقب المترتبة على الخطأ كما فهم الفائدة منهما , هذا ما سيعطي مشروعك القيمة الحقيقية عند المستخدم !