1、$_GET 变量

预定义的 $_GET 变量用于收集来自 method="GET" 的表单中的值。

<form action="hello-mimvp.php" method="GET">  
	Name: 	<input type="text" name="name">  
	Age: 	<input type="text" name="age">  
	<input type="submit">  
</form> 

 

当用户点击 "submit" 按钮时,发送到服务器的 URL 如下所示:

https://www.mimvp.com/hello-mimvp.php?name=Sandy&age=18

页面文件 "hello-mimvp.php" 通过 $_GET 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_GET 数组中的键)

Welcome <?php echo $_GET["name"]; ?>
<br>  
You are <?php echo $_GET["age"]; ?> years old!

用来获取由浏览器通过GET方法提交的数据。

GET方法是通过把参数数据加在提交表单的action属性所指的URL中,值和表单内每个字段一一对应,然后在URL中可以看到,但是有如下缺点: 

1)从带有 GET 方法的表单发送的信息,对任何人都是可见的(参数显示在浏览器的地址栏)

2)$_GET 对发送信息的量也有限制,最长不超过2KB - 200KB,因浏览器和服务器而定

3)$_GET 变量的安全性不如$_POST 

 

何时使用 method="GET"?

在 HTML 表单中使用 method="GET" 时,所有的变量名和值都会显示在 URL 中。

注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!

然而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。

注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。

 

2、$_POST 变量

预定义的 $_POST 变量用于收集来自 method="POST" 的表单中的值。

从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。

注释:默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。

示例:

<form action="hello-mimvp.php" method="post">  
	Name:  <input type="text" name="name">  
	Age:   <input type="text" name="age">  
	<input type="submit">  
</form> 

当用户点击 "Submit" 按钮时,URL 如下所示:

https://www.mimvp.com/hello-mimvp.php

页面文件 "hello-mimvp.php" 现在可以通过 $_POST 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的键):

Welcome <?php echo $_POST["name"]; ?>
<br>  
You are <?php echo $_POST["age"]; ?> years old!

 

何时使用 method="post"?

从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。

然而,由于变量不显示在 URL 中,所以无法把页面加入书签。

主要区别如下:

① 安全性 post > get

② 数据传输大小 [浏览器] post > get

③ 保存到收藏夹 get比较方便,直接带有参数

 

3、$_REQUEST 变量

预定义的 $_REQUEST 变量包含了 $_GET、$_POST 、 $_COOKIE 的内容。

$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。

$_REQUEST 变量既可以收集GET方法发送的数据,也可以接受POST方法接受的数据。

但是$_REQUEST["参数"]比较慢,通过post和get方法提交的所有数据,都可以通过$_REQUEST数组["参数"]获得

示例:

Welcome <?php echo $_REQUEST["name"]; ?>
<br>  
You are <?php echo $_REQUEST["age"]; ?> years old.

 

注意事项:

1.  不要经常使用$_REQUEST,速度比较慢 

2.  如果不确定 $_GET / $_POST,可以使用 $_REQUEST

你接收数据时候,可以这样

if($_SERVER['REQUEST_METHOD'] == "POST") {  
    $echo $_POST['name'];  
}
else if($_SERVER['REQUEST_METHOD'] == "GET"){  
    $echo $_GET['name'];   
}  

 

 

参考推荐

HTTP GET/POST 请求参数长度最大值限制

HTTP协议中POST、GET、HEAD、PUT等请求方法总结

Firefox/Chrome 查看POST数据

Python通过get, post请求方式

幂等性的原理和应用GET与POST