بررسی فرم PHP

متغیرهای جهانی $_GET و $_POST در PHP برای جمع‌آوری داده‌های فرم (form-data) استفاده می‌شوند.

PHP - یک فرم ساده HTML

مثال زیر یک فرم ساده HTML را نشان می‌دهد که شامل دو فیلد ورودی و یک دکمه ارسال است:

نمونه

<html>
<body>
<form action="welcome.php" method="post">
نام: <input type="text" name="name"><br>
ایمیل: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>

اجرای نمونه

وقتی کاربر این فرم را پر می‌کند و دکمه ارسال را کلیک می‌کند، داده‌های فرم به فایل PHP به نام "welcome.php" ارسال می‌شوند تا پردازش شوند. داده‌های فرم از طریق روش HTTP POST ارسال می‌شوند.

برای نمایش داده‌های ارسالی، می‌توانید به سادگی همه متغیرها را چاپ کنید. فایل "welcome.php" به این صورت است:

<html>
<body>
خوش آمدید <?php echo $_POST["name"]; ?><br>
آدرس ایمیل شما: <?php echo $_POST["email"]; ?>
</body>
</html>

خروجی:

خوش آمدید Bill
آدرس ایمیل شما Bill.Gates@example.com است

با استفاده از روش HTTP GET نیز می‌توانید نتیجه مشابهی را به دست آورید:

نمونه

<html>
<body>
<form action="welcome_get.php" method="get">
نام: <input type="text" name="name"><br>
ایمیل: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>

اجرای نمونه

"welcome_get.php" به این صورت است:

<html>
<body>
خوش آمدید <?php echo $_GET["name"]; ?><br>
آدرس ایمیل شما: <?php echo $_GET["email"]; ?>
</body>
</html>

کد بالا ساده است. اما مهم‌ترین بخش از آن فراموش شده است. شما باید داده‌های فرم را بررسی کنید تا از وجود لایه‌های آسیب‌پذیر در اسکریپت جلوگیری کنید.

توجه داشته باشید:در هنگام کار با فرم‌های PHP به امنیت توجه کنید!

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

اما در فصل‌های بعدی به شما نشان خواهیم داد که چگونه می‌توانید امنیت فرم‌های PHP را افزایش دهید! انجام بررسی‌های امنیتی مناسب برای فرم‌ها برای مقابله با حملات هکرها و هرزنامه بسیار مهم است!

GET در مقابل POST

GET و POST هر دو آرایه‌ای (مثلاً array(کلید => ارزش، کلید2 => ارزش2، کلید3 => ارزش3، ...) ) ایجاد می‌کنند. این آرایه شامل کلید/ارزش‌هایی است که کلید‌ها نام فرم‌های کنترلی و ارزش‌ها داده‌های ورودی کاربر هستند.

GET和POST被视为$_GET和$_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。

$_GET是通过URL参数传递到当前脚本的变量数组。

$_POST是通过HTTP POST传递到当前脚本的变量数组。

何时使用GET?

通过GET方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在URL中)。GET对所发送信息的数量也有限制。限制在大约2000个字符。不过,由于变量显示在URL中,把页面添加到书签中也更为方便。

GET可用于发送非敏感的数据。

注释:绝不能使用GET来发送密码或其他敏感信息!

何时使用POST?

通过POST方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入HTTP请求的主体中),并且对所发送信息的数量也无限制

此外POST支持高阶功能,比如在向服务器上传文件时进行multi-part二进制输入。

不过,由于变量未显示在URL中,也就无法将页面添加到书签。

提示:开发者偏爱POST来发送表单数据。

接下来让我们看看如何安全地处理PHP表单!