浏览器客户端可以通过两种方式将信息发送到Web服务器。
- GET方法
- POST方法
在浏览器发送信息之前,它使用称为URL编码的方案对其进行编码。在这个方案中,名称/值对用等号连接,不同的对用&
号分开。如下 -
name=maxsu&key=value&key2=value2
空格将被删除并使用+
字符替换,其他非字母数字字符被替换为十六进制值。信息编码后,发送到服务器。
1. GET方法
GET
方法发送附加到页面请求的编码用户信息。页面和编码的信息由?
字符。
http://www.yiibai.com/index.htm?name1=value1&name2=value2
GET
方法会在浏览器的“位置”框中生成一个长字符串,该字符串将显示在服务器日志中。GET
方法仅限于发送多达1024
个字符。- 如果将密码或其他敏感信息发送到服务器,切勿使用
GET
方法。 GET
不能用于将二进制数据(如图像或文档)发送到服务器。- 通过
GET
方法发送的数据可以使用QUERY_STRING
环境变量来访问。 - PHP提供
$_GET
关联数组,以使用GET
方法访问所有发送的信息。
将源代码放在get.php
脚本文件中,试试下面的例子。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>Get方法示例</title>
</header>
<body>
<?php
ini_set("display_errors", "Off");
if( $_GET["name"] || $_GET["age"] ) {
echo "欢迎, ". $_GET['name']. "<br />";
echo "你的年龄:". $_GET['age']. " 岁";
exit();
}
?>
<form action = "<?php $_PHP_SELF ?>" method = "GET">
名字: <input type = "text" name = "name" />
年龄: <input type = "text" name = "age" />
<input type = "submit" />
</form>
</body>
</html>
执行上面示例代码,得到以下代码 -
2. POST方法
POST方法通过HTTP标头传输信息。信息按照GET
方法中的描述进行编码,并放入名为QUERY_STRING
的标头中。
POST
方法对要发送的数据大小没有任何限制。POST
方法可以用来发送ASCII以及二进制数据。- 通过
POST
方法发送的数据通过HTTP头,因此安全性取决于HTTP协议。通过使用安全HTTP,可以确保信息是安全的。 - PHP提供了
$_POST
关联数组来使用POST
方法访问所有发送的信息。
将源代码放在post.php
脚本中,试试下面的例子。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>Post方法示例</title>
</header>
<body>
<?php
ini_set("display_errors", "Off");
if( $_POST["name"] || $_POST["age"] ) {
echo "欢迎, ". $_POST['name']. "<br />";
echo "你的年龄:". $_POST['age']. " 岁";
exit();
}
?>
<form action = "<?php $_PHP_SELF ?>" method = "POST">
名字: <input type = "text" name = "name" />
年龄: <input type = "text" name = "age" />
<input type = "submit" value="提交"/>
</form>
</body>
</html>
执行上面示例代码,得到以下结果 -
提交后,得到以下结果 -
$_REQUEST 变量
PHP $_REQUEST
变量包含$_GET
,$_POST
和$_COOKIE
的内容。我们将在Cookie章节中讨论$_COOKIE
变量。
PHP $_REQUEST
变量可用于从GET
和POST
方法发送的表单数据中获取结果。
将源代码放在request.php
脚本中,试试下面的例子。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<title>$_REQUEST变量示例</title>
</header>
<body>
<?php
ini_set("display_errors", "Off");
if( $_REQUEST["name"] || $_REQUEST["age"] ) {
echo "欢迎, ". $_REQUEST['name']. "<br />";
echo "你的年龄:". $_REQUEST['age']. " 岁";
exit();
}
?>
<form action = "<?php $_PHP_SELF ?>" method = "POST">
名字: <input type = "text" name = "name" />
年龄: <input type = "text" name = "age" />
<input type = "submit" value="提交"/>
</form>
</body>
</html>
这里$_PHP_SELF
变量包含了被调用的自脚本的名称(即:request.php)。它会产生以下结果 -
提交后,得到以下结果 -