متغیرهای سوپرگلوبال ($_GET, $_POST) چیستند؟

2

متغیرهای سوپرگلوبال ($_GET,$_POST) چیستند؟

یکی از قدرتمندترین و پرکاربردترین ویژگی‌های زبان برنامه‌نویسی PHP، نحوه مدیریت داده‌های ارسال شده توسط کاربران و ارتباط با پروتکل HTTP است. در این فرآیند، متغیرهای خاصی به نام سوپرگلوبال‌ها (Superglobals) نقش اصلی را ایفا می‌کنند. در این مقاله از آموزش‌های پی اچ پی ساز در دسته‌بندی متغیرها و توابع، به صورت جامع بررسی می‌کنیم که متغیرهای سوپرگلوبال چیستند و دو مورد از مهم‌ترین آن‌ها یعنی $_GET و $_POST چه تفاوت‌ها و کاربردهایی دارند.

متغیر سوپرگلوبال (Superglobal) چیست؟

در PHP، متغیرها دارای “دامنه” (Scope) مشخصی هستند. به عنوان مثال، متغیری که خارج از یک تابع تعریف می‌شود، به صورت پیش‌فرض در داخل آن تابع قابل دسترسی نیست. اما متغیرهای سوپرگلوبال یا فوق‌سراسری، متغیرهای از پیش تعریف شده‌ای (Built-in) هستند که در تمام دامنه‌های اسکریپت شما، اعم از داخل توابع، کلاس‌ها و فایل‌های مختلف، بدون نیاز به کلمه کلیدی global در دسترس هستند.

این متغیرها همیشه به صورت یک آرایه انجمنی (Associative Array) عمل می‌کنند و اطلاعات مهمی درباره سرور، محیط اجرا و داده‌های ارسالی کاربر در اختیار ما قرار می‌دهند.

بررسی متغیر $_GET

سوپرگلوبال $_GET یک آرایه است که داده‌های ارسال شده از طریق متد GET در فرم‌های HTML و همچنین پارامترهای ارسال شده در URL (Query Strings) را در خود ذخیره می‌کند.

زمانی که داده‌ای با متد GET ارسال می‌شود، اطلاعات مستقیماً در نوار آدرس مرورگر قابل مشاهده است.

کاربرد و مثال $_GET

فرض کنید یک لینک به شکل زیر در سایت خود دارید:

[sitename.com/profile.php?id=25&role=admin](https://sitename.com/profile.php?id=25&role=admin)

در فایل profile.php می‌توانید به این داده‌ها به راحتی دسترسی پیدا کنید:

PHP

<?php
// بررسی می‌کنیم که آیا پارامتر id در URL وجود دارد یا خیر
if(isset($_GET['id'])) {
    $user_id = $_GET['id'];
    $user_role = $_GET['role'];
    
    echo "شناسه کاربر: " . $user_id . "<br>";
    echo "نقش کاربر: " . $user_role;
}
?>

ویژگی‌های متد GET:

  • قابلیت مشاهده: داده‌ها در URL نمایان هستند، بنابراین برای ارسال اطلاعات حساس (مانند رمز عبور) به هیچ وجه مناسب نیستند.

  • محدودیت حجم: مرورگرها محدودیت‌هایی برای طول URL دارند (معمولاً حدود ۲۰۰۰ کاراکتر)، بنابراین نمی‌توان داده‌های حجیم را با GET ارسال کرد.

  • قابلیت بوکمارک: چون داده‌ها در URL هستند، می‌توان صفحات ایجاد شده با متد GET را بوکمارک کرد (مانند نتایج جستجو در یک سایت).

بررسی متغیر $_POST

سوپرگلوبال $_POST آرایه‌ای است که برای جمع‌آوری داده‌های ارسال شده از یک فرم HTML با متد POST (مانند method="post") استفاده می‌شود. برخلاف متد GET، در این روش داده‌ها در بدنه درخواست HTTP (HTTP Request Body) قرار می‌گیرند و در نوار آدرس مرورگر نمایش داده نمی‌شوند.

کاربرد و مثال $_POST

ابتدا یک فرم HTML ساده در نظر بگیرید:

HTML

<form action="login.php" method="post">
    نام کاربری: <input type="text" name="username">
    رمز عبور: <input type="password" name="password">
    <input type="submit" value="ورود">
</form>

پس از ارسال فرم، در فایل login.php داده‌ها به این شکل دریافت می‌شوند:

PHP

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // دریافت اطلاعات فرم
    $user = $_POST['username'];
    $pass = $_POST['password'];
    
    echo "خوش آمدید، " . $user;
    // نکته: در پروژه‌های واقعی رمز عبور هرگز چاپ نمی‌شود و مستقیما اعتبارسنجی می‌گردد.
}
?>

ویژگی‌های متد POST:

  • امنیت بیشتر (ظاهری): از آنجایی که داده‌ها در URL نمایش داده نمی‌شوند، برای ارسال اطلاعات حساسی چون فرم‌های ورود، ثبت‌نام و پرداخت استفاده می‌شود.

  • بدون محدودیت حجم: محدودیتی در میزان داده ارسالی از سمت مرورگر وجود ندارد (البته سرور تنظیمات محدودکننده خود را دارد).

  • عدم قابلیت بوکمارک: نتایج درخواست POST را نمی‌توان بوکمارک کرد یا لینک آن را به اشتراک گذاشت.

مقایسه $_GET و $_POST در یک نگاه

ویژگی $_GET $_POST
محل ارسال داده در نوار آدرس مرورگر (URL) در بدنه درخواست HTTP (Request Body)
امنیت پایین (داده‌ها کاملاً مشخص هستند) بالاتر (داده‌ها پنهان هستند)
محدودیت داده بله (محدودیت کاراکتر در URL) خیر (برای ارسال فایل و متن‌های طولانی مناسب است)
ذخیره در تاریخچه مرورگر بله خیر
بهترین کاربرد جستجو، فیلتر محصولات، صفحه‌بندی فرم‌های ورود، ثبت سفارش، آپلود فایل

یک اصل حیاتی: امنیت در کار با سوپرگلوبال‌ها

مهم‌ترین قانونی که در توسعه بک‌اند با PHP و سایت پی اچ پی ساز باید همیشه به خاطر بسپارید این است: هیچ‌گاه به داده‌های ورودی کاربر اعتماد نکنید!

چه از $_GET استفاده کنید و چه از $_POST، هکرها می‌توانند کدهای مخرب را به جای داده‌های واقعی به سرور شما ارسال کنند. استفاده مستقیم از این متغیرها در کوئری‌های دیتابیس (SQL) یا چاپ مستقیم آن‌ها در HTML می‌تواند منجر به حملات SQL Injection و XSS شود.

همیشه قبل از استفاده از داده‌ها، آن‌ها را اعتبارسنجی (Validate) و پاک‌سازی (Sanitize) کنید:

PHP

<?php
// یک روش ساده برای پاکسازی داده‌های ورودی قبل از نمایش
$clean_username = htmlspecialchars($_POST['username']);
echo $clean_username;
?>

با درک صحیح از تفاوت‌ها و کاربردهای $_GET و $_POST، شما پایه‌های اصلی برای ساخت فرم‌ها، APIها و تعاملات پویا با کاربران را در PHP فرا گرفته‌اید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *