PHP $_GET和$_POST变量

一.PHP中,预定义的$_GET变量用于收集来自method="get"表单中的值。

从带有GET方法的表单发送的信息,对任何人都是可见的,也就是会显示在浏览器的地址栏中,且对发送信息的量也限制,其最大长度依赖于浏览器和web服务器(服务器处理能力)的设定。

实例:

form_get.html

<html>
<head>
<meta charset="utf-8">
<title>GET 测试</title>
</head>
<body>

<form action="response.php" method="get">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>

</body>
</html>

response.php:

<html>
 <head>
  <meta charset="utf-8">
  <title>PHP 测试</title>
 </head>
 <body>
 欢迎 <?php echo $_GET["fname"]; ?>!<br>
 您的年龄是 <?php echo $_GET["age"]; ?> 岁。
 </body>
</html>

如下:


提交后,可看到发送到服务器的URL如下所示,而此时response.php文件即可通过$_GET变量来收集表单数据了,这里需要注意的是,表单域的名称会自动成为$_GET数组中的键:


这里若使用记事本或EditPlus编辑代码,若出现乱码,则需:


将默认编码ANSI修改为UTF-8保存即可。

何时使用method="get"呢?

1.在HTML表单中使用method="get"时,所有变量名和值都会显示在URL中,因此在发送密码或其他敏感信息时,不应该使用该方法。

2.正因为变量显示在URL中,因此可在收藏夹中收藏该页面,在某些情况下,这很有用。但HTTP GET方法不适合大型的变量值,它的值不能超过2000个字符。

二.PHP中,预定义的$_POST变量用于收集来自method="post"表单中的值。

从带有POST方法的表单发送的消息,对任何人都是不可见的,也就是不会显示在浏览器的地址栏中,且对发送消息的量也没有限制。然而,默认情况下,POST方法的发送消息量最大为8MB,可通过设置php.ini文件中的post_max_size进行更改。

form_post.html

<html>
<head>
<meta charset="utf-8">
<title>POST 测试</title>
</head>
<body>

<form action="response.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>

</body>
</html>

response.php:

<html>
 <head>
  <meta charset="utf-8">
  <title>PHP 测试</title>
 </head>
 <body>
 欢迎 <?php echo $_POST["fname"]; ?>!<br>
 您的年龄是 <?php echo $_POST["age"]; ?> 岁。
 </body>
</html>


点提交后,response.php通过$_POST变量来收集表单数据,表单域的名称会自动成为$_POST数组中的键:


何时使用method="post"呢?

从带有POST方法的表达发送的信息,对任何人都是不可见的,且对发送信息的量也没有限制。然而,由于变量不显示在URL中,因此无法把页面加入书签。


GET和POST的区别:

1.多数浏览器对POST采用两阶段发送数据,先发请求头,再发请求体,即使参数少也会被分成两个步骤来发送,也就是第一步发header数据,第二步发body数据。HTTP为应用层协议,而再传输层有些情况TCP会出现两次连接的过程,HTTP协议本身不保存状态信息,一次请求一次相应,对TCP而言,通信次数越多反而越不可靠,最可靠的就是在一次连接中就传输完需要的消息,尽量使用GET请求来减少网络耗时,若通信时间增加,这段时间客户端与服务端一直保持连接状态,可能增加服务端负载,可靠性就会下降。

2.GET请求会被cache,也就是GET请求能够被保持在浏览器中,尤其是当GET提交密码等重要数据,别人查看历史记录,便可直接看到这些私密数据,而POST不会进行cache。

3.GET参数带在URL后面,传统IE中URL的最大可用长度为2048个字符,其他浏览器对URL长度限制实现上各不相同,而POST请求理论上无长度限制。

4.GET提交的数据大小,不同浏览器的限制不同,一般在2K-8K之间,POST提交数据比较大,大小由服务器来设定,而且某些数据只能用POST方法携带,比如file。

5.全部用POST不合理,最好先把请求按功能和场景先分一下类,对数据请求频繁,数据不敏感且数据量在普通浏览器最小限定的2K范围内的,这种情况下使用GET,其他情况使用POST。

6.GET的本质是"得",而POST本质是"给",且GET是"幂等"的,在这一点上,GET被认为是"安全的",实际上服务端也可用作资源更新,但这种用法违反约定,容易造成CSRF也就是跨站请求伪造

参考PHP中文网

参考C开源中国



  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值