
آموزش برنامه نویسی PHP-جلسه نهم
متد $_GET خیلی شبیه $_post است. منتهی در هنگام ارسال اطلاعات در این متد اطلاعات رو در url موقع ارسال نمایش میده و رمز نگاری نمیشه و زمانی که بخواهیم پسورد از کاربر بگیریم باید از $_post استفاده کنیم تا ایمن باشد.
در PHP روشهای مختلفی برای دریافت و انتقال اطلاعات وجود دارد که یکی از مهمترین آنها استفاده از متغیرهای سوپرگلوبال $_GET و $_POST است. این دو متد کاربرد بسیار زیادی در طراحی فرمها، انتقال اطلاعات بین صفحات، ساخت لینکهای پویا و توسعه وبسایتهای داینامیک دارند.
اگر با $_POST در PHP آشنا باشید، یادگیری $_GET برای شما بسیار ساده خواهد بود؛ زیرا ساختار کلی استفاده از این دو بسیار شبیه یکدیگر است. تفاوت اصلی در نحوه ارسال اطلاعات و کاربرد آنهاست.
در این مقاله قصد داریم به زبان ساده و در عین حال حرفهای بررسی کنیم که $_GET در PHP چیست، اطلاعات چگونه از طریق URL ارسال میشوند، چطور میتوان اطلاعات را در صفحه مقصد دریافت کرد و چه تفاوتی بین $_GET و $_POST وجود دارد.
Table of contents [Show]
- 1 متد $_GET در PHP چیست؟
- 2 چرا از $_GET استفاده میکنیم؟
- 3 ارسال اطلاعات با لینک در PHP
- 4 ساختار URL در متد GET
- 5 دریافت اطلاعات $_GET در صفحه مقصد
- 6 تفاوت $_GET و $_POST در PHP
- 7 چه زمانی از $_GET استفاده کنیم؟
- 8 استفاده از $_GET برای شناسه محصولات
- 9 استفاده از چند پارامتر در $_GET
- 10 اگر پارامتر $_GET وجود نداشته باشد چه اتفاقی میافتد؟
- 11 اعتبارسنجی اطلاعات دریافتشده با $_GET
- 12 آیا اطلاعات $_GET رمزنگاری میشوند؟
- 13 مزایای استفاده از $_GET
- 14 معایب و محدودیتهای $_GET
- 15 یک مثال کامل از $_GET در PHP
- 16 جمعبندی
متد $_GET در PHP چیست؟
$_GET یکی از متغیرهای سوپرگلوبال (Superglobal) در زبان PHP است که برای دریافت اطلاعات ارسالشده از طریق URL استفاده میشود.
زمانی که از روش GET برای ارسال اطلاعات استفاده میکنیم، دادهها در قسمت آدرس مرورگر قرار میگیرند. به همین دلیل کاربر میتواند اطلاعات ارسالشده را مستقیماً در URL مشاهده کند.
برای مثال، فرض کنید آدرس زیر را داشته باشیم:
example.com/user.php?firstname=Ali&lastname=Ahmadi
در این URL دو مقدار ارسال شده است:
firstnameبرابر باAlilastnameبرابر با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¶meter2=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 نمایش داده میشود که این پارامتر واقعاً ارسال شده باشد.
این روش در پروژههای واقعی اهمیت زیادی دارد و باعث میشود کد شما در برابر ورودیهای ناقص مقاومتر باشد.
اطلاعاتی که از 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 به من این امکان را داده است که پروژهها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژهای به کدنویسی تمیز، معماری مناسب، طراحی واکنشگرا، عملکرد مطلوب و تجربه کاربری روان دارم.



