آموزش post و get در php

1396/7/19 علیرضا حاتمی نیا 1143

php send data by post and get

درود مجدد خدمت شما دوستان و علاقه مندان به آموزش برنامه نویسی و آموزش php
در جلسه قبل با آموزش توابع مرتب سازی آرایه ها در php در خدمت شما بودیم. از این جلسه به بعد آموزش php همان آموزشی خواهد بود که منتظرش بودید. زیرا از این پس با صفحات HTML هم نیز مرتبط خواهیم بود و به بیانی دیگر به پویا سازی صفحات HTML می پردازیم. در این جلسه از آموزش php با آموزش GET و POST در php برای دریافت اطلاعات فرم در HTML آشنا خواهید شد. 

فرم ها در HTML 

در آموزش فرم ها در HTML آموختید که یک فرم دارای اجزای مختلفی مانند جعبه متن ها ، دکمه های رادیویی، چک باکس ها و ... می باشد که هر کدام از این اجزا دارای مقدارهایی هستند که این مقدارها توسط سرور و زبان سمت سرور مانند php کنترل و پردازش می شوند. 
فرض کنید فرمی دارای فیلدهای متنی برای دریافت نام و ایمیل کاربران در صفحه موجود است. کاربر ابتدا نام و ایمیل خود را وارد می کند و سپس روی دکمه "ارسال" یا submit کلیک می کند. تا قبل از "کلیک دکمه" فرم توسط html کنترل شده و کاربر از فرم طراحی  شده برای ارسال مشخصات خود استفاده می کند. اما پس "کلیک دکمه submit" اوضاع کمی فرق می کند. در اینجا php وارد عمل می شود. نام و ایمیلی که کاربر وارد کرده را می گیرد ، پردازش های لازم را انجام می هد و سپس جواب پردازش خود را در قالب یک فایل html به سمت کاربر می فرستد. 
هنگام ارسال فرم 2 نکته حائز اهمیت است. 
1-    آدرس فایل php برای دریافت داده های فرم
2-    روش ارسال فرم 
در ادامه به توضیح هر یک از موارد بالا می پردازیم. 
ارسال داده های فرم : 
فرم ساده زیر را در نظر بگیرید که دارای یک فیلد متنی برای دریافت نام و یک فیلد متنی برای دریافت ایمیل می باشد 

<form action="send.php" method="">
<input type="text" name="name"> <br>
<input type="text" name="email"> <br>
</form>

مقدار خصوصیت action برای تگ  <form> برابر است با آدرس فایلی php که قرار است مقدارها برای آن فرستاده شود. در مثال بالا مقدار  نام و ایمیل وارد شده  پس از فشردن دکمه submit به فایل send.php فرستاده می شود. در صفحه send.php مقدارهای هر دو باکس متنی توسط یکی از متغیرهای سراسری $_POST و $_GET و با توجه به نام هر فیلد متنی گرفته می شود. توجه داشته باشید که تعیین نام برای هریک از اجزای فرم الزامیست. 
در مثال بالا توسط خصوصیت name نام باکس متنی اولی name و دومی email انتخاب شده است.
اما تگ فرم خصوصیت دیگری به نام method به معنی "روش" دارد که مقدار آن یا post است یا get . به این معنی که با تعیین یکی از این دو مقدار به برنامه می فهمانید که با چه روشی داده های فرم را به فایل send.php بفرستد. 
اما این دو مقدار چه تفاوت هایی با یکدیگر دارند؟ 

تقاوت post و get در PHP

روش get

یکی از روش های ارسال داده در پروتکل HTTP متد get می باشد. در متد get کلیه داده های دریافت شده توسط url در ادامه آدرس به سمت سرور فرستاده می شود. به مثال زیر دقت کنید: 
http://ilikephp.ir/send.php?name1=value1&name1=value2&name3=value3....
همان طوری که ملاحظه می فرمایید در مثال بالا ابتدا نام فایل مقصد که send.php می باشد بعد از آدرس سایت و بعد از آن یک علامت "?" و سپس نام متغیر اول که همان مقدار خصوصیت name است و سپس علامت "=" و بعد مقدار آن نوشته شده است. اگر مقدارهای ارسالی بیش از یک مقدار باشد بعد از مقدار اول یک علامت "&" و سپس نام و مقدار دوم اضافه می شود.
روش get به دلیل اینکه نام متغیرها و مقدار آن ها در url توسط کاربران دیده می شود روش امنی برای انتقال داده نمی باشد و برای ارسال داده های  حساس توصیه نمی شود. روش get از سرعت بیشتری نسبت به post برخوردار است. همچنین در روش get شما با محدودیت حجم داده برای انتقال مواجه هستید. 
در مثال بالا در فرم welcome.html مقدار method را برابر get قرار می دهیم: 

<form action="send.php" method="get">
<input type="text" name="name"> <br>
<input type="text" name="email"> <br>
</form>

در صفحه send.php اینگونه مقدار های فیلدهای name و email را می گیریم و چاپ می کنیم

<?php
Echo "your name is " . $_GET['name'] . "<br>";
Echo "your name is " . $_GET['email'] . "<br>";
?>

توجه داشته باشید که به راحتی و توسط متغیر سراسری $_GET مقدارهای name و email را دریافت و چاپ کردیم.

روش post 

یکی دیگر از روش های انتقال داده روی پروتکل  HTTP روش post می باشد. در این روش داده ها توسط HTTP Headers یا هدرهای HTTP به سمت سرور ارسال می شوند. این روش دارای امنیت بیشتری نسبت به روش  get می باشد ولی سرعت آن اندکی کمتر میباشد.

در مثال بالا در فرم welcome.html مقدار method را برابر post قرار می دهیم: 

<form action="send.php" method="post">
<input type="text" name="name"> <br>
<input type="text" name="email"> <br>
</form>

در صفحه send.php اینگونه مقدار های فیلدهای name و email را توسط متغیر سراسری $_POST می گیریم و چاپ می کنیم

<?php
Echo "your name is " . $_POST['name'] . "<br>";
Echo "your name is " . $_POST['email'] . "<br>";
?>

توجه داشته باشید که به راحتی و توسط متغیر سراسری $_POST مقدارهای name و email را دریافت و چاپ کردیم.
در آموزش بعدی به نحوه دریافت داده های دیگر اجزای فرم در php  می پردازیم.

کلمات کلیدی

آموزش php
علیرضا حاتمی نیا
طراح و برنامه نویس وب
طراحی وبسایت های واکنش گرا
طراحی و پیاده سازی سیستم مدیریت محتوا
سئو و بهینه سازی سایت