متغیرPOST_$ و GET_$ درphp

بخشی از متغیرهای سراسری هستند و در همه جای اسکریپت می توانید از آنها استفاده کنید ، هر دو متغیر POST_$ و GET_$ داده های ارسال شده توسط متدهای post و get از html را دریافت می کنند.

در مثال زیر میبینید که چطوری از این ها برای جمعاوری داده های ارسال شده از فرم html استفاده می کنیم

 

جمعاوری داده از فرم html

صفحه html زیر شامل یک فرم با عناصر ورودی مثل متن ، چند انتخابی ، یک انتخابی ، دکمه است . زمانی که کاربر این فیلد ها را تکمیل می کند و دکمه ارسال یا همان submit را میزند ، داده ها به صفحه grab_values.php ارسال می شود ، همان آدرسی که در قسمت action فرم تعریف شده است.

 

متد get در html

در فرم html زیر ما در قسمت method ، روش ارسال دیتا به سرور را مشخص می کنیم.

<form action="grab_values.php" method="GET">
User Name: <input type="text" name="user_name" />
Location: <input type="text" name="user_location" />
<input type="submit" value="Submit">
</form>

 

توسط php ، ما فقط با استفاده از آرایه گلوبال یا همان سراسری $_GET مقادیر ورودی را دریافت و چاپ می کنیم.

<?php
echo 'Hi '.$_GET["user_name"];
echo $_GET["user_location"].' is a cool place';
?>

نقص متد get در html این است که مقادیر ارسال شده به سرور در آدرس بار مرورگر نمایش داده می شود ، پس ارسال اطلاعات حساسی مثل رمزهای عبور ، کلید های سکرت با استفاده از متد GET توصیه نمی شود.

همچنین طول کاراکترهای قابل ارسال توسط این متد به خاطر مرورگر های مختلف محدود شده است.

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

پس پیشنهاد می شود از متد POST برای ارسال دیتا به سرور استفاده کرد.

 

متد POST در html

حجم بالایی از دیتا از طریق متد POST قابل ارسال است. از HTML 4.0 به بعد همچنین قابلیت ارسال multipart/form-data اضافه شد. متد post امن تر از Get است بدلیل اینکه مقادیر ورودی از طریق url قابل مشاهده نیستند و همچنین در تاریخچه (history) مرورگر ذخیره نمی شود.

برای استفاده از متد post کافیست که مقدار method را به POST تغییر بدید:

<form action="grab_values.php" method="POST">
User Name: <input type="text" name="user_name" />
Location: <input type="text" name="user_location" />
<input type="submit" value="Send My Info">
</form>

توسط php ، ما فقط با استفاده از آرایه گلوبال یا همان سراسری $_POST مقادیر ورودی را دریافت و چاپ می کنیم.

<?php
echo 'Hi '.$_POST["user_name"];
echo $_POST["user_location"].' is a cool place';
?>
    

مزیت های استفاده از متد POST:

 

مدیریت خطا (Error Handling) :

همیشه زمانی که در حال دریافت اطلاعات از متد POST/GET هستیم باید مراقب باشیم ، چونکه اگر کاربریه مقدار خالی را ارسال کند ،

اسکریپتPHP بالا یک خطایی را نشان می دهد. برای جلوگیری از نمایش اینگونه خطاهای غیرضروری می توانیم از توابع کنترلی مثل ()isset استفاده کنیم . این تابع در صورتی که متغییر وحود داشته باشد مقدار TRUE را برمیگرداند.

خب اجازه بدید یک خطای دوستانه برای به جای خطای خود PHP نشان بدهیم .خب برای مدیریت خطا فایل grab_values.php را ویرایش می کنیم :

<?php

//!(exclamation mark) returns the opposite value of the boolean variable,
//it means isset() will return true if value is empty.

if(!isset($_POST["user_name"])) //isset returns true when value is empty
{
     die("Please go back and enter name"); //exit page after outputting the message.
}

if(!isset($_POST["user_location"]))
{
     die("Please go back and enter Location"); //exit page after outputting the message.
}

//output result
echo 'Hi '.$_POST["user_name"];
echo $_POST["user_location"].' is a cool place';
?>

مثال بالا ساده ترین راه برای مدیریت خطا است اما راه های بهتری مثل تابع exit وحود دارد . امیدوارم این مقاله به شما در درک و یادگیری متغیر$_POST و $_GET و مدیریت خطا کمک کرده باشد .

امنیت ورودی های کاربر

به هیچ وجه ورودی های خام که از کاربر دریافت می کنید را در برنامه خود استفاده نکنید و یا اگر این ورودی ها را مستقیم در کویری SQL استفاده می کنید , احتمال لو رفتن تمام اطلاعات دیتابیس و یا هک شدن کل سایت شما بسیار بالاست . برای همین ورودی های کاربر را قبل از استفاده در کویری ها و ذخیره در دیتابیس , با توابعی که مربوط به امنیت فرم ها است و در مقاله اعتبار سنجی فرم ها در php آوردیم , بهره ببرید.



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

در این قسمت قصد آموزش انتقال متغیر با متد GET در php را به شما عزیزان داریم و در قسمت های آینده به سایر بخش ها نیز خواهیم پرداخت.

پیش از این که مرورگر اطلاعات را ارسال کند، ابتدا آن ها را با کمک الگویی بنام کد گذاری URL، رمزگذاری می کند. در این روش، اسم متغیر و مقدار آن با علامت تساوی به هم مرتبط شده اند، و برای جدا کرد هر جفت از متغیر ها و مقدارشان از یکدیگر از علامت & که به آن ampersand می گویند استفاده شده است.مانند مثال زیر:

name1=value1&name2=value2&name3=value3

جاهای خالی حذف شده و یا توسط کاراکتر + جایگزین می شود و هر کاراکتر غیر حرفی دیگری که وجود دارد نیز توسط مقدار هگزا دسیمایل آن جایگزین می گردد. اطلاعات پس از این که رمز گذاری می شوند به server ارسال می شوند.

متد GET در php

متد GET اطلاعات کد شده ی کاربر را که به آدرس صفحه ی مقصد ضمیمه شده است را بهserver تحویل می دهد.آدرس صفحه و اطلاعات کد گذاری شده ی کاربر توسط کاراکتر ؟ از هم تفکیک می شوند.به مثال زیر توجه فرمایید:

http://www.test.com/index.htm?name1=value1&name2=value2

نکاتی در مورد GET در php

در مثال زیر کد را در فایلی با نام getTest.php قرار دادیم و متغیرهای دریافتی از فرم ها را به همان صفحه ارسال می کنیم.

<?php
if (isset($_POST["name"]) && isset($_POST["age"])) {
    if ($_POST["name"] || $_POST["age"]) {
        if (preg_match("/[^A-Za-z'-]/", $_POST['name'])) {
            die ("invalid name and name should be alpha");
        }
        echo "Welcome " . $_POST['name'] . "<br />";
        echo "You are " . $_POST['age'] . " years old.";

        exit();
    }
} else {
    echo "there is no data yet <br />";
}
?>
<html>
<body>

<form action="#" method="POST">
    Name: <input type="text" name="name"/>
    Age: <input type="text" name="age"/>
    <input type="submit"/>
</form>

</body>
</html>

در قطعه کد بالا از تابع isset جهت بررسی وجود متغییر GET_$ استفاده شده است. اگر از این تابع استفاده نکنیم در صورت نبود مقداری در متغییر GET_$ برنامه به شما پیامی خطایی حاوی عدم وجود متغییر ها را بازمی گرداند.

متغیرREQUEST _$

در php متغیر REQUEST _$ محتوای هر دو متغیر GET، $_POST_$و COOKIE_$ را دربردارد. درباره ی خود cookie ها نیز به طور مفصل در پست مربوط به آن صحبت نموده ایم.

اگر بخواهیم نتیجه ی بدست آمده از اطلاعات فرستاده شده توسط هر دو متدPOST و GET را بازیابی و دریافت کنیم باید متغیر REQUEST_$ مورد استفاده قرار دهیم.

مثال زیر را در فایل requestTest.php می باشد که نحو دریافت متغیر ارسالی به روش GET را به شما نمایش می دهد.البته شما می توانید همین روش را برای متغیر هایی از نوع POST آزمایش کنید.

<?php
   if( $_REQUEST["name"] || $_REQUEST["age"] ) {
      echo "Welcome ". $_REQUEST['name']. "<br />";
      echo "You are ". $_REQUEST['age']. " years old.";
      exit();
   }
?>
<html>
   <body>
      
      <form action = "" method = "GET ">
         Name: <input type = "text" name = "name" />
         Age: <input type = "text" name = "age" />
         <input type = "submit" />
      </form>
      
   </body>
</html>