超全局变量 $_GET 和 $_POST 用于收集表单数据(form-data)
1. 一个简单的 HTML 表单
下面的例子显示了一个简单的 HTML 表单,它包含两个输入字段和一个提交按钮:
实例
<html> <body> <form action="process.php" method="post"> Name: <input type="text" name="username"><br> E-mail: <input type="text" name="email"><br> <input type="submit"> </form> </body> </html>
当用户填写此表单并点击提交按钮后,表单数据会发送到名为 “process.php” 的 PHP 文件供处理。表单数据是通过 HTTP POST 方法发送的。
如需显示出被提交的数据,您可以简单地输出(echo)所有变量。“process.php” 文件是这样的:
<html> <body> Welcome <?php echo $_POST["username"]; ?><br> Your email address is: <?php echo $_POST["email"]; ?> </body> </html>
输出:
Welcome Bill Your email address is Bill.Gates@example.com
使用 HTTP GET 方法也能得到相同的结果:
实例
<html> <body> <form action="process_get.php" method="get"> Name: <input type="text" name="username"><br> E-mail: <input type="text" name="email"><br> <input type="submit"> </form> </body> </html>
“process_get.php” 是这样的:
<html> <body> Welcome <?php echo $_GET["username"]; ?><br> Your email address is: <?php echo $_GET["email"]; ?> </body> </html>
上面的代码很简单。不过,最重要的内容被漏掉了。您需要对表单数据进行验证,以防止脚本出现漏洞。
注意:在处理 PHP 表单时请关注安全!
本页未包含任何表单验证程序,它只向我们展示如何发送并接收表单数据。
2. GET 和 POST该如何选择
GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, …))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。
GET 和 POST 被视作 $_GET 和 $_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。
$_GET 是通过 URL 参数传递到当前脚本的变量数组。
$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。
3. 何时使用 GET?
通过 GET 方法从表单发送的信息 对任何人都是可见的 (所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。
GET 可用于发送非敏感的数据。 绝不能使用 GET 来发送密码或其他敏感信息!
4. 何时使用 POST?
通过 POST 方法从表单发送的信息 对其他人是不可见的 (所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也 无限制 。
此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。
不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。
提示:开发者偏爱 POST 来发送表单数据。
5. 示例代码及其输出
POST处理表单数据
<html> <body> <form action="process.php" method="post"> Name: <input type="text" name="username"><br> E-mail: <input type="text" name="email"><br> <input type="submit"> </form> </body> </html>
在 process.php
文件中处理表单数据:
<html> <body> Welcome <?php echo $_POST["username"]; ?><br> Your email address is: <?php echo $_POST["email"]; ?> </body> </html>
输出:
Welcome Alice Your email address is alice@example.com
GET处理表单数据
<html> <body> <form action="process_get.php" method="get"> Name: <input type="text" name="username"><br> E-mail: <input type="text" name="email"><br> <input type="submit"> </form> </body> </html>
在 process_get.php
文件中处理表单数据:
<html> <body> Welcome <?php echo $_GET["username"]; ?><br> Your email address is: <?php echo $_GET["email"]; ?> </body> </html>
输出:
Welcome Bob Your email address is bob@example.com
总结
在表单数据收集方面,GET 和 POST 各有优劣。GET 方法适用于传递非敏感数据并且需要通过 URL 直接访问,而 POST 方法适用于传递大量数据和敏感信息。开发者应根据具体需求选择合适的方法。