آموزش برنامه نویسی PHP-جلسه نهم

آموزش برنامه نویسی PHP-جلسه نهم

متد $_GET خیلی شبیه $_post است. منتهی در هنگام ارسال اطلاعات در این متد اطلاعات رو در url موقع ارسال نمایش میده و رمز نگاری نمیشه و زمانی که بخواهیم پسورد از کاربر بگیریم باید از $_post استفاده کنیم تا ایمن باشد.

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

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

در این مقاله قصد داریم به زبان ساده و در عین حال حرفه‌ای بررسی کنیم که $_GET در PHP چیست، اطلاعات چگونه از طریق URL ارسال می‌شوند، چطور می‌توان اطلاعات را در صفحه مقصد دریافت کرد و چه تفاوتی بین $_GET و $_POST وجود دارد.

متد $_GET در PHP چیست؟

$_GET یکی از متغیرهای سوپرگلوبال (Superglobal) در زبان PHP است که برای دریافت اطلاعات ارسال‌شده از طریق URL استفاده می‌شود.

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

برای مثال، فرض کنید آدرس زیر را داشته باشیم:

example.com/user.php?firstname=Ali&lastname=Ahmadi

در این URL دو مقدار ارسال شده است:

  • firstname برابر با Ali
  • lastname برابر با Ahmadi

PHP می‌تواند این اطلاعات را با استفاده از $_GET دریافت کند.

مثلاً:

<?php

echo $_GET['firstname'];

?>

خروجی:

Ali

برای دریافت نام خانوادگی نیز می‌توانیم بنویسیم:

<?php

echo $_GET['lastname'];

?>

خروجی:

Ahmadi

بنابراین می‌توان گفت ساختار کلی ارسال اطلاعات با GET به شکل زیر است:

page.php?name=value

اگر بخواهیم چند مقدار را همزمان ارسال کنیم، مقادیر با علامت & از یکدیگر جدا می‌شوند:

page.php?name=Ali&age=25&city=Tehran

در این مثال سه پارامتر به صفحه ارسال شده است:

name = Ali
age = 25
city = Tehran

و در PHP می‌توانیم آن‌ها را با $_GET دریافت کنیم.


چرا از $_GET استفاده می‌کنیم؟

یکی از مهم‌ترین کاربردهای $_GET زمانی است که بخواهیم اطلاعاتی را از طریق یک لینک به صفحه دیگری منتقل کنیم.

برای مثال فرض کنید یک وب‌سایت داریم که شامل صفحه کاربران است. در صفحه اول می‌خواهیم لینکی قرار دهیم که کاربر با کلیک روی آن وارد صفحه دوم شود و نام او نیز همراه لینک به صفحه دوم منتقل شود.

در چنین شرایطی می‌توانیم اطلاعات موردنظر را به صورت Query String در URL قرار دهیم.

مثلاً:

5.php?firstname=Ali&lastname=Ahmadi

وقتی کاربر روی این لینک کلیک کند، مرورگر به صفحه 5.php منتقل می‌شود و مقادیر firstname و lastname نیز همراه درخواست ارسال خواهند شد.


ارسال اطلاعات با لینک در PHP

فرض کنیم در صفحه اول، متغیری به نام $name داریم که نام کاربر را در خود نگهداری می‌کند و متغیر دیگری به نام $lname نیز نام خانوادگی را ذخیره کرده است.

می‌توانیم یک لینک به شکل زیر ایجاد کنیم:

<?php

echo "<a href='5.php?firstname=$name&lastName=$lname'>سلام کاربر</a>";

?>

در اینجا با کلیک روی لینک، کاربر به صفحه 5.php منتقل می‌شود و دو مقدار نیز همراه URL ارسال می‌شوند.

برای مثال اگر:

$name = "Ali";
$lname = "Ahmadi";

باشد، لینک نهایی تقریباً به شکل زیر خواهد بود:

5.php?firstname=Ali&lastName=Ahmadi

در واقع قسمت زیر:

?firstname=Ali&lastName=Ahmadi

اطلاعاتی است که به عنوان Query String به صفحه مقصد ارسال شده است.


ساختار URL در متد GET

برای درک بهتر $_GET باید ساختار URL را بشناسیم.

به URL زیر توجه کنید:

profile.php?firstname=Ali&lastname=Ahmadi

در این URL:

  • profile.php نام صفحه مقصد است.
  • ? نشان‌دهنده شروع پارامترهای GET است.
  • firstname نام پارامتر است.
  • Ali مقدار پارامتر است.
  • & برای جدا کردن پارامترهای مختلف استفاده می‌شود.
  • lastname پارامتر دوم است.
  • Ahmadi مقدار پارامتر دوم است.

بنابراین ساختار کلی به صورت زیر است:

page.php?parameter=value

و برای چند پارامتر:

page.php?parameter1=value1&parameter2=value2

این ساختار در بسیاری از وب‌سایت‌ها برای انتقال اطلاعات بین صفحات استفاده می‌شود.


دریافت اطلاعات $_GET در صفحه مقصد

حالا فرض کنیم اطلاعات از صفحه اول ارسال شده و کاربر وارد صفحه دوم شده است.

در صفحه دوم می‌توانیم مقادیر را با استفاده از کلیدهایی که هنگام ارسال تعیین کرده‌ایم، دریافت کنیم.

برای مثال:

<?php

echo "سلام " . $_GET['firstname'] . " " . $_GET['lastName'];

?>

اگر URL به شکل زیر باشد:

5.php?firstname=Ali&lastName=Ahmadi

خروجی می‌تواند به صورت زیر نمایش داده شود:

سلام Ali Ahmadi

نکته مهم این است که نامی که داخل $_GET قرار می‌دهیم باید دقیقاً با نام پارامتری که در URL ارسال شده یکسان باشد.

مثلاً اگر در URL نوشته باشیم:

?firstname=Ali

باید در PHP نیز بنویسیم:

$_GET['firstname']

نه:

$_GET['name']

زیرا firstname و name دو کلید متفاوت هستند.


تفاوت $_GET و $_POST در PHP

$_GET و $_POST هر دو برای انتقال اطلاعات به PHP استفاده می‌شوند، اما کاربرد آن‌ها با یکدیگر متفاوت است.

در روش GET، اطلاعات در URL قرار می‌گیرند. برای مثال:

example.com/search.php?keyword=php

اما در روش POST، اطلاعات در بدنه درخواست HTTP ارسال می‌شوند و در حالت عادی در URL نمایش داده نمی‌شوند.

به همین دلیل معمولاً برای فرم‌هایی که اطلاعات حساس‌تری مانند رمز عبور دریافت می‌کنند، از POST استفاده می‌شود.

البته یک نکته امنیتی بسیار مهم وجود دارد:

استفاده از POST به تنهایی به معنای امن بودن اطلاعات نیست.

برای انتقال امن اطلاعات باید از HTTPS استفاده شود. همچنین اطلاعات حساس باید به شکل صحیح در سمت سرور مدیریت و ذخیره شوند.

بنابراین بهتر است این دو مفهوم را با یکدیگر اشتباه نگیریم:

  • GET اطلاعات را در URL قرار می‌دهد.
  • POST اطلاعات را در بدنه درخواست ارسال می‌کند.
  • HTTPS ارتباط بین مرورگر و سرور را رمزنگاری می‌کند.
  • برای اطلاعات حساس مانند رمز عبور، معمولاً POST همراه با HTTPS استفاده می‌شود.

چه زمانی از $_GET استفاده کنیم؟

$_GET زمانی کاربرد زیادی دارد که اطلاعات ارسال‌شده بخشی از آدرس صفحه باشد و بتوان آن را مشاهده، ذخیره یا حتی به دیگران ارسال کرد.

یکی از نمونه‌های بسیار رایج، صفحات جستجو هستند.

فرض کنید کاربر عبارت PHP را جستجو می‌کند. ممکن است آدرس صفحه به شکل زیر ساخته شود:

search.php?keyword=PHP

در صفحه PHP می‌توانیم مقدار جستجو را دریافت کنیم:

<?php

$keyword = $_GET['keyword'];

echo "نتایج جستجو برای: " . $keyword;

?>

در این حالت $_GET انتخاب مناسبی است، زیرا عبارت جستجو می‌تواند بخشی از URL باشد و کاربر حتی می‌تواند URL نتایج را برای شخص دیگری ارسال کند.


استفاده از $_GET برای شناسه محصولات

یکی دیگر از کاربردهای بسیار رایج GET، انتقال شناسه یک محصول است.

برای مثال ممکن است در یک فروشگاه اینترنتی لینک محصول به شکل زیر باشد:

product.php?id=125

در اینجا 125 شناسه محصول است.

در PHP می‌توانیم آن را دریافت کنیم:

<?php

$id = $_GET['id'];

echo "شناسه محصول: " . $id;

?>

در یک پروژه واقعی، معمولاً از این شناسه برای دریافت اطلاعات محصول از پایگاه داده استفاده می‌شود.

برای مثال:

product.php?id=125

می‌تواند به این معنی باشد که کاربر قصد مشاهده محصولی با شناسه 125 را دارد.

این الگو در سیستم‌های مدیریت محتوا، فروشگاه‌های اینترنتی و بسیاری از وب‌سایت‌های داینامیک کاربرد دارد.


استفاده از چند پارامتر در $_GET

گاهی لازم است چند مقدار را همزمان ارسال کنیم.

برای مثال:

users.php?name=Ali&age=25&city=Tehran

در PHP می‌توانیم هر سه مقدار را دریافت کنیم:

<?php

echo $_GET['name'];
echo "<br>";

echo $_GET['age'];
echo "<br>";

echo $_GET['city'];

?>

خروجی:

Ali
25
Tehran

علامت & بین پارامترها قرار می‌گیرد و به PHP می‌گوید که پارامتر جدیدی در URL وجود دارد.


اگر پارامتر $_GET وجود نداشته باشد چه اتفاقی می‌افتد؟

یکی از نکات مهم هنگام کار با $_GET این است که نباید فرض کنیم همیشه پارامتر موردنظر در URL وجود دارد.

مثلاً اگر کاربر مستقیماً وارد این آدرس شود:

profile.php

و ما در کد بنویسیم:

echo $_GET['firstname'];

ممکن است با خطای مربوط به وجود نداشتن این کلید مواجه شویم.

به همین دلیل بهتر است قبل از استفاده، وجود پارامتر را بررسی کنیم.

یکی از روش‌های رایج استفاده از isset() است:

<?php

if (isset($_GET['firstname'])) {
    echo $_GET['firstname'];
}

?>

در این حالت فقط زمانی مقدار firstname نمایش داده می‌شود که این پارامتر واقعاً ارسال شده باشد.

این روش در پروژه‌های واقعی اهمیت زیادی دارد و باعث می‌شود کد شما در برابر ورودی‌های ناقص مقاوم‌تر باشد.


اعتبارسنجی اطلاعات دریافت‌شده با $_GET

اطلاعاتی که از URL دریافت می‌شوند را نباید بدون بررسی وارد منطق برنامه کنیم.

برای مثال اگر انتظار داریم id یک عدد باشد، بهتر است نوع داده و مقدار آن را بررسی کنیم.

یک نمونه ساده:

<?php

if (isset($_GET['id']) && is_numeric($_GET['id'])) {
    $id = $_GET['id'];

    echo "شناسه محصول: " . $id;
}

?>

در پروژه‌های واقعی، بسته به کاربرد پارامتر، ممکن است نیاز به اعتبارسنجی و پاک‌سازی بیشتری داشته باشیم.

همچنین اگر مقدار دریافت‌شده قرار است در HTML نمایش داده شود، باید از خروجی دادن امن اطلاعات اطمینان حاصل کنیم. برای نمایش متن دریافت‌شده از کاربر در HTML، استفاده از htmlspecialchars() یکی از روش‌های متداول است.

مثلاً:

<?php

if (isset($_GET['name'])) {
    echo htmlspecialchars($_GET['name']);
}

?>

این موضوع در پروژه‌های واقعی اهمیت زیادی دارد، زیرا ورودی کاربر همیشه قابل اعتماد نیست.


آیا اطلاعات $_GET رمزنگاری می‌شوند؟

خیر. اطلاعات GET به صورت خودکار رمزنگاری نمی‌شوند و در URL قابل مشاهده هستند.

برای مثال:

example.com/login.php?username=ali&password=123456

این URL نشان می‌دهد که قرار دادن اطلاعات حساسی مانند رمز عبور در GET کار درستی نیست.

به همین دلیل برای اطلاعات حساسی مانند:

  • رمز عبور
  • اطلاعات خصوصی
  • اطلاعات محرمانه
  • داده‌هایی که نباید در تاریخچه مرورگر باقی بمانند

نباید از GET استفاده کنیم.

برای فرم‌های حساس معمولاً از POST استفاده می‌شود و برای محافظت از مسیر انتقال اطلاعات نیز باید HTTPS فعال باشد.


مزایای استفاده از $_GET

استفاده از GET در شرایط مناسب مزایای مختلفی دارد:

۱. امکان اشتراک‌گذاری URL

چون اطلاعات در URL قرار دارند، کاربر می‌تواند آدرس صفحه را کپی و برای دیگران ارسال کند.

۲. امکان Bookmark کردن

صفحه‌ای که پارامترهای GET دارد معمولاً می‌تواند همراه با همان پارامترها ذخیره شود.

۳. مناسب برای جستجو

پارامترهای جستجو معمولاً گزینه مناسبی برای GET هستند.

۴. مناسب برای فیلتر و مرتب‌سازی

در فروشگاه‌ها و سایت‌های محتوایی می‌توان فیلترها را در URL قرار داد.

مثلاً:

products.php?category=shoes&sort=price

۵. مناسب برای انتقال اطلاعات ساده بین صفحات

زمانی که لازم است یک مقدار غیرحساس از یک صفحه به صفحه دیگر منتقل شود، GET می‌تواند راهکار ساده‌ای باشد.


معایب و محدودیت‌های $_GET

در کنار مزایا، GET محدودیت‌هایی نیز دارد.

اطلاعات در URL قابل مشاهده هستند

بنابراین نباید اطلاعات محرمانه را با GET ارسال کنیم.

URL می‌تواند طول محدودی داشته باشد

برای انتقال حجم زیادی از اطلاعات، GET انتخاب مناسبی نیست.

اطلاعات ممکن است در تاریخچه مرورگر باقی بمانند

از آنجا که داده‌ها در URL هستند، ممکن است در تاریخچه مرورگر ذخیره شوند.

ممکن است URL در مکان‌های مختلف ثبت شود

URL می‌تواند در تاریخچه، لاگ‌های سرور یا ابزارهای مختلف ثبت شود؛ بنابراین قرار دادن اطلاعات حساس در Query String می‌تواند مشکل امنیتی ایجاد کند.


یک مثال کامل از $_GET در PHP

برای جمع‌بندی، فرض کنیم یک صفحه به نام index.php داریم و می‌خواهیم نام کاربر را از طریق یک لینک به صفحه profile.php ارسال کنیم.

در صفحه اول:

<?php

$name = "Ali";
$lname = "Ahmadi";

echo "<a href='profile.php?firstname=$name&lastname=$lname'>مشاهده پروفایل</a>";

?>

پس از کلیک روی لینک، کاربر به آدرسی مشابه این منتقل می‌شود:

profile.php?firstname=Ali&lastname=Ahmadi

حالا در صفحه profile.php می‌توانیم اطلاعات را دریافت کنیم:

<?php

if (isset($_GET['firstname']) && isset($_GET['lastname'])) {

    $firstname = htmlspecialchars($_GET['firstname']);
    $lastname = htmlspecialchars($_GET['lastname']);

    echo "سلام " . $firstname . " " . $lastname;
}

?>

در این مثال ابتدا بررسی می‌کنیم که پارامترهای موردنظر وجود داشته باشند و سپس مقادیر آن‌ها را دریافت کرده و برای نمایش در HTML به شکل امن‌تری خروجی می‌دهیم.


جمع‌بندی

متد $_GET یکی از ابزارهای مهم PHP برای دریافت اطلاعات ارسال‌شده از طریق URL است. برخلاف POST، اطلاعات GET در URL نمایش داده می‌شوند و به همین دلیل برای داده‌های عمومی و غیرحساس، جستجو، فیلتر، مرتب‌سازی، شناسه صفحات و انتقال اطلاعات ساده بین صفحات کاربرد زیادی دارد.

برای مثال:

profile.php?firstname=Ali&lastname=Ahmadi

اطلاعاتی را به صفحه profile.php ارسال می‌کند و در PHP می‌توانیم آن‌ها را با استفاده از:

$_GET['firstname']

و:

$_GET['lastname']

دریافت کنیم.

نکته مهم این است که $_GET و $_POST هرکدام کاربرد خاص خودشان را دارند. برای اطلاعاتی که باید در URL قابل مشاهده باشند، GET گزینه مناسبی است؛ اما برای اطلاعات حساس مانند رمز عبور نباید از GET استفاده کرد. همچنین استفاده از POST به تنهایی به معنی رمزنگاری اطلاعات نیست و برای انتقال امن اطلاعات باید HTTPS نیز مورد استفاده قرار گیرد.

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

اشتراک گذاری :
مریم گوهرزاد
نویسنده

مریم گوهرزاد

مدرس و بنیانگذار هلدینگ آرتا رسانه. برنامه نویس و محقق حوزه بلاکچین و توسعه‌دهنده بلاکچین | متخصص Solidity | توسعه‌دهنده وب Full-Stackمن یک توسعه‌دهنده علاقه‌مند به فناوری‌های بلاکچین و وب ۳ هستم و در زمینه Solidity، توسعه قراردادهای هوشمند و ساخت برنامه‌های غیرمتمرکز (DApps) فعالیت می‌کنم. تمرکز من بر طراحی و پیاده‌سازی راهکارهایی است که در کنار بهره‌گیری از فناوری‌های نوین، عملکرد مناسب، امنیت و تجربه کاربری مطلوبی ارائه دهند.در کنار تخصص در حوزه بلاکچین، به عنوان یک توسعه‌دهنده وب Full-Stack نیز در طراحی و توسعه وب‌سایت‌ها و برنامه‌های تحت وب فعالیت می‌کنم. تجربه کار در بخش‌های Front-End و Back-End به من این امکان را داده است که پروژه‌ها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژه‌ای به کدنویسی تمیز، معماری مناسب، طراحی واکنش‌گرا، عملکرد مطلوب و تجربه کاربری روان دارم.

TEST_VALUE_123
https://t.me/artarasaneh
tel:09193426251
https://wa.me/+989193426251
https://instagram.com/artarasaneh_com