PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据(form-data)。php
有一点很重要的事情值得注意,当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用。html
预约义的 $_GET 变量用于收集来自 method="get" 的表单中的值。web
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),而且对发送信息的量也有限制。数组
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="welcome.php" method="get"> 名字: <input type="text" name="fname"> 年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
当用户点击 "Submit" 按钮时,发送到服务器的 URL 以下所示: http://www.runoob.com/welcome.php?fname=Runoob&age=3 浏览器
"welcome.php" 文件如今能够经过 $_GET 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_GET 数组中的键):安全
欢迎 <?php echo $_GET["fname"]; ?>!<br> 你的年龄是 <?php echo $_GET["age"]; ?> 岁。
在 HTML 表单中使用 method="get" 时,全部的变量名和值都会显示在 URL 中。服务器
注释:因此在发送密码或其余敏感信息时,不该该使用这个方法!不安全函数
然而,正由于变量显示在 URL 中,所以能够在收藏夹中收藏该页面。在某些状况下,这是颇有用的。post
注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。spa
预约义的 $_POST 变量用于收集来自 method="post" 的表单中的值。
从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),而且对发送信息的量也没有限制。
注释:然而,默认状况下,POST 方法的发送信息的量最大值为 8 MB(可经过设置 php.ini 文件中的 post_max_size 进行更改)。
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="welcome.php" method="post"> 名字: <input type="text" name="fname"> 年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
当用户点击 "提交" 按钮时,URL 相似以下所示: http://www.runoob.com/welcome.php
"welcome.php" 文件如今能够经过 $_POST 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的键):
欢迎 <?php echo $_POST["fname"]; ?>!<br> 你的年龄是 <?php echo $_POST["age"]; ?> 岁。
经过 POST 方法从表单发送的信息对其余人是不可见的(安全)(全部名称/值会被嵌入 HTTP 请求的主体中),而且对所发送信息的数量也无限制。
此外 POST 支持高阶功能,好比在向服务器上传文件时进行 multi-part 二进制输入。
不过,因为变量未显示在 URL 中,也就没法将页面添加到书签。
大多数开发者偏心 POST 来发送表单数据。
咱们要作的第一件事是经过 PHP 的 htmlspecialchars() 函数传递全部变量。
在咱们使用 htmlspecialchars() 函数后,若是用户试图在文本字段中提交如下内容:
<script>location.href('http://www.hacked.com')</script>
- 代码不会执行,由于会被保存为转义代码,就像这样:
<script>location.href('http://www.hacked.com')</script>
如今这条代码显示在页面上或 e-mail 中是安全的。
在用户提交该表单时,咱们还要作两件事:
接下来咱们建立一个检查函数(相比一遍遍地写代码,这样效率更好)。
咱们把函数命名为 test_input()。
如今,咱们可以经过 test_input() 函数检查每一个 $_POST 变量,脚本是这样的:
<?php // 定义变量并设置为空值
$name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>