آموزش post و get در PHP

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

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

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

  • ارسال POST
  • ارسال GET

فرم مورد نظر ما دو فیلد به نام‌های name و mobile دارد. کد زیر یک فرم ساده را ایجاد می‌کند.

<html>
<body style="direction:rtl">
<form action="" method="">
نام: <input type="text" name="name">
موبایل: <input type="text" name="mobile">
</form>
</body>
</html>

دو فایل برای این کار ایجاد می‌کنیم.

  • فایل index.php که حاوی کدهای فرم ثبت‌نام است.
  • فایل register.php که حاوی کدهای پردازش داده‌های ارسال‌شده و نمایش پیام تشکر خواهد بود.

کد بالا را در فایل index.php قرار داده و آن را در مرورگر خود باز می‌کنم. تصویر زیر، نمایش فرم ثبت‌نام ماست.

فرم نمونه برای ثبت‌نام کاربر
فرم نمونه برای ثبت‌نام کاربر

همان‌طور که می‌بینید در تگ form دو ویژگی action و method تعریف شده است.

  • ویژگی action مقصد ارسال داده‌ها را مشخص می‌کند. این آدرس می‌تواند به صورت نسبی با یک آدرس کامل اینترنتی باشد. در این مثال، ما اطلاعات را به فایل register.php در کنار فایل اصلی خواهیم فرستادم.
  • همان‌طور که از نام ویژگی method (روش) پیداست، روش ارسال داده‌ها (post و get در php) را مشخص می‌کنیم.
آموزش ساخت فرم ورود با PHP

آموزش ساخت فرم ورود با PHP

متد POST

اولین روش برای ارسال داده‌ها در PHP استفاده از روش POST است. در این حالت تمام داده‌ها از طریق هدرهای HTTP (یا همان HTTP Requests) برای مقصد ارسال می‌شود.

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

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

اکشن و متد را مشابه کد زیر تعریف می‌کنم:

<html>
<body style="direction:rtl">
<form action="register.php" method="post">
نام: <input type="text" name="name">
موبایل: <input type="text" name="mobile">
</form>
</body>
</html>

برای دسترسی به داده‌های ارسال شده از طریق این فرم در صفحه register.php از $_POST['name'] و $_POST['mobile'] استفاده می‌کنیم.

احتمالاً تا به اینجا حدس زده‌اید که برای نمایش نام و پیغام تشکر باید به چه صورت عمل کنیم! کد زیر پیغام تبریک را به کاربر نمایش می‌دهد.

<html>
<body style="direction:rtl">
<?php
echo $_POST['name'] . " عزیز،" . " از ثبت‌نام شما متشکریم!";
?>
</body>
</html>

در این قطعه کد و با استفاده از متغیر $_POST['name'] توانستیم نام کاربر را در متن پیام نمایش دهیم.

برای ثبت شماره موبایل یا نام کاربر در پایگاه داده، می‌توانید از روش‌های اتصال به دیتابیس نظیر MySQLi در PHP یا PDO در PHP استفاده کنید.

با استفاده از روش POST در PHP می‌توانید هر نوع داده‌ای ارسال کنید. فقط کافی است مقدار ویژگی method فرم خود را برابر post قرار دهید.

نتیجه ارسال درخواست متد POST
نتیجه ارسال درخواست متد POST

امنیت اطلاعات فرستاده شده با متد POST وابسته به امینت ارتباط HTTP است. یعنی اگر برای سایت خود از HTTPS استفاده کنیم، اطلاعات ارسال شده به صورت رمزنگاری‌شده و ایمن ارسال خواهد شد.

متد GET

روش دیگر ارسال داده در PHP متد GET است. در این روش تمام داده‌های ارسالی، به صورت پارامتری در URL به مقصد فرستاده می‌شود.

برای استفاده از این روش کافی است مقدار method در فرم ثبت‌نام را به get تغییر دهیم.

<html>
<body style="direction:rtl">
<form action="register.php" method="get">
نام: <input type="text" name="name">
موبایل: <input type="text" name="mobile">
<input type="submit" value="ثبت‌نام">
</form>
</body>
</html>

برای دسترسی به داده‌های ارسالی در مقصد از متغیر سراسری $_GET استفاده می‌کنیم. (بیشتر بدانید: متغیرهای سراسری PHP)

بنابراین برای دسترسی به مقادیر نام و شماره موبایل کاربر در این مثال، از متغیرهای $_GET['name'] و $_GET['mobile'] استفاده می‌کنم.

<html>
<body style="direction:rtl">
<?php
echo $_GET['name'] . " عزیز،" . " از ثبت‌نام شما متشکریم!";
?>
</body>
</html>

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

نتیجه ارسال درخواست متد GET
نتیجه ارسال درخواست متد GET

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

نحوه عملکرد روش get

در حقیقت اگر سه مقدار مختلف را به روش get به آدرسی ارسال کنیم، چیزی شبیه زیر در نتیجه خواهیم داشت.

https://sabzdanesh.com/sample.php?name1=value1&name2=value2&name3=value3

در انتهای آدرس مقصد (در این آدرس فایل sample.php) علامت سوال (?) آورده شده و پس از آن تک تک متغیرها به همراه مقادیرشان قرار گرفته‌اند.

هر متغیر با علامت «و» انگلیسی (&) از متغیر دیگر جدا و با علامت مساوی (=) با مقدار خود مرتبط می‌شود.

همان‌طور که می‌بینید در روش GET تمام داده‌ها (نام متغیر و مقدار آن) به صورت واضح به کاربر نمایش داده می‌شود. بنابراین اگر این اطلاعات برای شما مهم هستند، استفاده از روش GET در PHP چندان منطقی به نظر نرسد!

آموزش استفاده از AJAX در PHP با ۲ روش

آموزش استفاده از AJAX در PHP با ۲ روش

تفاوت POST و GET در PHP

احتمالاً برای شما هم سوال شده که تا وقتی که متد POST هست چرا باید از متد GET استفاده کنیم ؟!

جواب این سوال از نظر فنی کمی پیچیده اما بیان آن بسیار ساده است! متناسب با نیازتان می‌توانید از هر دو روش استفاده کنید!

ویژگی‌های روش GET

  • اطلاعات به راحتی در URL قابل مشاهده هستند. واضح است که اگر کسی شبکه‌ی ارتباط کاربر با سایت را شنود کنید، می‌توانید به راحتی به این اطلاعات دست پیدا کند. در نتیجه امنیت کمتری دارد.
  • ارسال داده با متد GET سرعت بیشتری نسبت به روش POST دارد. بنابراین اگر در جایی صرفاً می‌خواهید یک داده‌ی کم‌ارزش و کوچک را ارسال کنید، احتمالاً GET روش مناسب‌تری خواهد بود.
  • در روش GET به دلیل اینکه باید داده‌ها را در URL ارسال کنید، با محدودیت ارسال اطلاعات مواجه خواهید شد. (محدودیت ارسال 2048 کاراکتر)
  • امکان ارسال فایل با این روش وجود ندارد.

ویژگی‌های POST

  • همان‌طور که گفته شد، اطلاعات از طریق سربرگ‌های درخواست HTTP ارسال می‌شود. پس به راحتی توسط کاربر قابل مشاهده نیست. (البته اگر فرد مانند شما یک حرفه‌ای باشد می‌تواند با بررسی HTTP Headerها، آن‌ها را مشاهده کند.)
  • ارسال داده با متد POST یک مقدار سرعت کمتری نسبت به روش GET دارد. دلیل آن هم تبدیل داده‌ها به هِدِر درخواست‌ها و بازگشایی آن‌هاست.
  • از آن‌جا که سربرگ‌های HTTP جزء داده‌های مهم هستند، اگر ارتباط سایت شما HTTPS باشد، این داده‌ها کدگذاری شده و توسط مهاجم (با شنود) قابل تشخیص نخواهد بود.
  • در ارسال اطلاعات با روش POST هیچ محدودیتی در حجم یا تعداد داده‌های ارسالی نخواهید داشت.
  • با متد POST می‌توان داده‌های باینری (نظیر عکس یا انواع فایل) را ارسال کرد. (مشابه آموزش آپلود فایل با PHP)

همان‌طور که می‌دانید می‌توانیم کدهای فرم ثبت‌نام و کدهای PHP که آن‌ها را اعتبارسنجی کرده و پیام تشکر را نمایش می‌دهد را در یک فایل قرار داده و مقدار action فرم را تعریف نکرده یا / بگذاریم. (برای دیدن مثالی از این روش، به کدهای این سایت خارجی توجه کنید.)

جمع‌بندی: متد POST و GET در PHP

در این آموزش روش‌های POST و GET برای ارسال داده در PHP را بررسی کردیم. با تعریف ویژگی method برای فرم HTML می‌توانیم نوع آن را یکی از این دو حالت تنظیم کنیم.

داده‌های ارسالی در صفحه مقصد درون یک آرایه انجمنی قرار می‌گیرند. متغیر این آرایه برای متد GET با $_GET و برای متد POST با $_POST شناخته می‌شود.

در متد get متغیر و مقدار آن درون URL قرار گرفته و قابل مشاهده است. اما در متد post، متغیرها و داده‌ها به صورت HTTP Header ارسال شده و از امنیت بیشتر (و شاید ظاهر بهتری) برخوردار خواهد بود.

بررسی ارسال فرم یا وجود POST و GET در PHP

متغیرهایی که برای دسترسی به داده‌های ارسالی استفاده می‌شوند یک آرایه هستند. با بررسی وجود اندیس مورد نظر در آن، می‌توانیم از وجود آن داده در دیتاهای ارسالی مطمئن شویم.

فرض کنید در مثال خودمان، کاربر فیلد «نام را تکمیل نکند» در این صورت با خطایی مشابه زیر برخورد خواهیم کرد.

خطای ارسال فیلد خالی در PHP
خطای ارسال فیلد خالی در PHP

برای جلوگیری از این مشکل، ابتدا وجود مقدار در متغیر name را با تابع empty() بررسی می‌کنیم؛ اگر خالی بود، به کاربر خطا نشان داده و در غیر این صورت پیام تشکر را نمایش می‌دهیم.

<html>
<body style="direction:rtl">
<?php
if( !empty($_POST['name']) ){
	echo $_POST['name'] . " عزیز،" . " از ثبت‌نام شما متشکریم!";
}else{
	echo "باید نام خود را وارد کنید.";
}
?>
</body>
</html>

امیدوارم در این آموزش با نحوه استفاده و کاربردهای POST و GET در PHP به خوبی آشنا شده باشید. اگر سؤال یا تجربه‌ای دارید، از قسمت دیدگاه‌ها مطرح کنید.

در جلسه بعدی، یک مثال ساده اما کاربردی، از روش POST می‌بینیم. بعد از اینکه کار با دیتابیس را یاد گرفتیم، چند فرم PHP ایجاد می‌کنیم تا همه این روش‌ها را در عمل استفاده کنیم.

این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP