Php 简明教程
PHP - GET & POST
由于 PHP 主要用于 Web 应用程序开发,因此浏览器客户端发送的数据主要与 GET 和 POST 类型的 HTTP 请求方法有关。HTTP 协议还定义了向服务器发送请求的其他方法。除了 GET 和 POST 方法之外,还有 PUT、DELETE、HEAD 和 OPTIONS 方法。在本章中,我们主要研究 PHP 如何处理 GET 和 POST 方法。
The GET Method
GET 方法发送编码的用户信息,并将其附加到页面请求。页面和编码信息由 ? 字符分隔。
http://www.test.com/index.htm?name1=value1&name2=value2
-
GET 方法生成一个较长的字符串,它显示在服务器日志中和浏览器的 Location: 方框中。
-
GET 方法只能发送最多 1024 个字符。
-
如果你要向服务器发送密码或其他敏感信息,请切勿使用 GET 方法。
-
GET 不能用于向服务器发送二进制数据,例如图像或 word 文档。
-
通过 QUERY_STRING 环境变量可以访问 GET 方法发送的数据。
-
PHP 提供了 $_GET 关联数组来使用 GET 方法访问所有发送的信息。
通过将源代码放入 test.php 脚本中,尝试以下示例。
<?php
if( $_GET["name"] || $_GET["age"] ) {
echo "Welcome ". $_GET['name']. "<br />";
echo "You are ". $_GET['age']. " years old.";
exit();
}
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "GET">
Name: <input type = "text" name = "name" />
Age: <input type = "text" name = "age" />
<input type = "submit" />
</form>
它将产生以下结果 −
The POST Method
POST 方法通过 HTTP 标头传输信息。该信息已被编码,就像 GET 方法中所描述的那样,并放入名为 QUERY_STRING 的标头中。
-
POST 方法对要发送的数据量没有任何限制。
-
POST 方法可用于发送 ASCII 和二进制数据。
-
POST 方法发送的数据会通过 HTTP 标头,因此安全性取决于 HTTP 协议。通过使用安全 HTTP,你可以确保你的信息安全。
-
PHP 提供了 $_POST 关联数组来使用 POST 方法访问所有发送的信息。
通过将源代码放入 test.php 脚本中,尝试以下示例。
<?php
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();
}
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "POST">
Name: <input type = "text" name = "name" />
Age: <input type = "text" name = "age" />
<input type = "submit" />
</form>
它将产生以下结果 −
Difference between GET and POST
GET 方法和 POST 方法之间的主要区别在于,虽然附加到 URL 的请求参数在浏览器的 URL 中公开出来,但 POST 数据包含在消息正文中,并且不会在 URL 中显示出来。因此,GET 方法不应用于将敏感数据发送到服务器。
其次,GET 方法中的请求数据不能超过 2048 个字符,只能由 ASCII 字符组成,而使用 POST 方法时,对请求数据没有限制,也可以是二进制的(POST 数据的默认最大大小由 php.ini 文件中的 post_max_size 设置决定)
PHP 提供了以下三个 superglobals 来检索和处理请求参数 −
-
$_GET − 用于使用 GET 方法访问所有发送信息的一个关联数组。
-
$_POST − 用于使用 POST 方法访问所有发送信息的一个关联数组。
-
$_REQUEST − 用于获取通过 GET 和 POST 方法发送的表单数据的结果的一个关联数组。
$_GET Array
你可以在查询字符串中以直接附加到 URL 的形式传递请求参数。
将以下 PHP 脚本保存在文档根文件夹 ( htdocs ) 中,并将其命名为“hello.php” −
<?php
echo "First name: " . $_REQUEST['first_name'] . " " .
"Last Name: " . $_REQUEST['last_name'] . "";
?>
在浏览器窗口中输入 http://localhost/hello.php?first_name=Amar&last_name=Sharma 作为 URL(确保 PHP 服务器正在运行)。
$_GET 数组通过请求填充,输出显示如下 −
First name: Amar Last Name: Sharma
如果 HTML 表单数据的方法属性为 GET,您也可以使用该数据填充 $_GET 数组。
使用以下 HTML 表单收集数据并将其发送到“hello.php”。在文档根目录下,将以下脚本另存为“hello.html” −
<form action="hello.php" method="get">
First Name: <input type="text" name="first_name"/> <br/>
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>
在浏览器中,输入 URL“http://localhost/hello.html” −
您应该会在浏览器窗口中获取类似 output 的内容。
$_POST Array
使用 POST 请求向服务器发送数据的最简单方法是将 HTML 表单的方法属性指定为 POST。假设浏览器中的 URL 为“http://localhost/hello.php”,那么在 HTML 表单“hello.html”中将 method=POST 设置为前面的示例 −
<form action="hello.php" method="post">
First Name: <input type="text" name="first_name"/> <br/>
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>
“hello.php”脚本(位于文档根目录文件夹中)在 $_POST 数组中检索表单数据并将其作为 HTTP 响应呈现给浏览器 −
<?php
echo "First name: " . $_POST['first_name'] . " " .
"Last Name: " . $_POST['last_name'] . "";
?>
在浏览器中打开 "http://localhost/hello.html" 。输入的数据将由服务器检索,然后像前面的示例一样呈现在客户端。