آموزش کامل متغیرهای $_GET، $_POST و $_REQUEST در PHP به زبان ساده
مقدمه: متغیرهای فوقسراسری (Superglobals) در PHP چیستند؟
در زبان برنامه نویسی PHP، متغیرهای فوقسراسری یا Superglobals متغیرهایی از پیش تعریفشده هستند که در تمام بخشهای کد (بدون توجه به Scope یا دامنه دسترسی) قابل استفاده هستند. سه مورد از مهمترین و پرکاربردترین این متغیرها، $_GET، $_POST و $_REQUEST نام دارند که برای دریافت اطلاعات ارسال شده از مرورگر کاربر به سرور استفاده میشوند.
متغیر فوقسراسری $_GET چیست؟
متغیر $_GET یک آرایه انجمنی (Associative Array) در PHP است که اطلاعات ارسال شده از طریق متد GET در پروتکل HTTP را جمعآوری میکند. اطلاعات ارسال شده در این متد به انتهای آدرس URL صفحه اضافه میشوند و برای همه کاربران قابل مشاهده هستند.
ویژگیهای متد GET
- اطلاعات ارسالی به صورت جفتهای کلید و مقدار (Key-Value) در آدرس بار مرورگر نمایش داده میشوند (مثلاً:
page.php?name=Ali&age=25). - برای ارسال اطلاعات غیرحساس مانند فیلترهای جستجو، دستهبندیها و شماره صفحات مناسب است.
- دارای محدودیت حجم در ارسال داده است (معمولاً حداکثر ۲۰۴۸ کاراکتر).
- امکان بوکمارک کردن (Bookmark) آدرس صفحه همراه با دادههای ارسالی وجود دارد.
مثال کاربردی استفاده از $_GET
ابتدا فرم HTML زیر را در نظر بگیرید که دادهها را با متد GET ارسال میکند:
< form action='process.php' method='get' >
نام: < input type='text' name='username' >
< button type='submit' >ارسال< / button >
< / form >
حالا در فایل process.php، میتوانیم اطلاعات ارسال شده را به شکل زیر دریافت و پردازش کنیم:
if (isset($_GET['username'])) {
$username = htmlspecialchars($_GET['username']);
echo "سلام " . $username . "، خوش آمدید!";
}
متغیر فوقسراسری $_POST چیست؟
متغیر $_POST نیز یک آرایه انجمنی است که اطلاعات ارسال شده از طریق متد POST در پروتکل HTTP را جمعآوری میکند. در این متد، برخلاف متد GET، اطلاعات در بدنه (Body) درخواست HTTP ارسال میشوند و در آدرس بار مرورگر نمایش داده نمیشوند.
ویژگیهای متد POST
- امنیت بالاتری نسبت به GET دارد زیرا اطلاعات در آدرس بار لو نمیروند (هرچند همچنان باید رمزنگاری شوند).
- هیچ محدودیتی در حجم دادههای ارسالی ندارد و برای آپلود فایلها کاملاً مناسب است.
- نمیتوان صفحات حاصل از متد POST را بوکمارک کرد.
- برای اطلاعات حساس مانند کلمات عبور، اطلاعات کارت بانکی و فرمهای ثبتنام الزامی است.
مثال کاربردی استفاده از $_POST
فرم HTML زیر اطلاعات را با متد POST ارسال میکند:
< form action='login.php' method='post' >
ایمیل: < input type='email' name='email' >
رمز عبور: < input type='password' name='password' >
< button type='submit' >ورود< / button >
< / form >
حالا در فایل login.php دادههای ارسالی را به شکل زیر مدیریت میکنیم:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$email = htmlspecialchars($_POST['email']);
$password = htmlspecialchars($_POST['password']);
// عملیات بررسی احراز هویت در دیتابیس
echo "درخواست ورود برای ایمیل " . $email . " دریافت شد.";
}
متغیر فوقسراسری $_REQUEST چیست؟
متغیر $_REQUEST یک متغیر ترکیبی در PHP است که به طور پیشفرض شامل محتویات آرایههای $_GET، $_POST و $_COOKIE میباشد. به این معنی که فرقی نمیکند اطلاعات با چه متدی به سرور ارسال شده باشند؛ شما میتوانید با استفاده از $_REQUEST به آنها دسترسی پیدا کنید.
چرا استفاده از $_REQUEST پیشنهاد نمیشود؟
با وجود اینکه استفاده از $_REQUEST کار را راحتتر میکند، اما طبق استانداردهای گوگل و اصول برنامهنویسی ایمن، استفاده از آن توصیه نمیشود. دلایل آن عبارتند از:
- ابهام در منبع داده: مشخص نیست که داده ورودی واقعاً از یک فرم POST امن آمده است یا از یک کوکی دستکاری شده.
- مسائل امنیتی: احتمال بروز حملات XSS و پارامتر پرایس (Parameter Pollution) افزایش مییابد.
- کارایی ضعیفتر: پردازش و ادغام چندین آرایه بزرگ سرعت اجرای اسکریپت را کاهش میدهد.
مقایسه کلی GET در مقابل POST
| ویژگی | متد GET | متد POST |
|---|---|---|
| محل نمایش دادهها | آدرس بار (URL) | بدنه درخواست (HTTP Body) |
| امنیت دادهها | بسیار پایین (مناسب برای جستجو) | بالا (مناسب برای کلمات عبور) |
| محدودیت حجم | محدود (حدود ۲ کیلوبایت) | نامحدود (بسته به تنظیمات سرور) |
| قابلیت بوکمارک | دارد | ندارد |
نکات امنیتی حیاتی در استفاده از دادههای ارسالی
هرگز به دادههای ارسال شده از سمت کاربر اعتماد نکنید! برای جلوگیری از حملات هک مانند SQL Injection و XSS، همیشه دادهها را فیلتر و پاکسازی (Sanitize) کنید. برای این کار از توابعی نظیر htmlspecialchars() و فیلترهای داخلی PHP مانند filter_input() استفاده کنید.
// نمونه پاکسازی ایمن داده ورودی با فیلتر داخلی
$clean_email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if (filter_var($clean_email, FILTER_VALIDATE_EMAIL)) {
echo "ایمیل معتبر است.";
} else {
echo "ایمیل نامعتبر است!";
}
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید