post方式提交的数据用$_POST获取,那get方式提交的数据就用$_GET获取,还是上节的代码,改成get方式提交。
接收代码:
结果:
浏览器的页面和$_POST一样能正常显示数据,不同之处那就是我们提交的数据都在网址里显示出来了,如果用户提交的数据是私密的,用get方式提交就太不安全。
$_POST和$_GET的区别和用处:
区别:前面学习HTML表单标记时,楠神做过简单的介绍。
1、post方式数据提交不易看到,get方式数据提交可以在网址看到。所以我们也应该明白了,get方式是通过网址提交的数据,那post方式是怎么提交的数据呢。我们可以通过浏览器开发工具看到(大部分浏览器f12都能打开一个开发工具):
这个地方需要了解http协议的知识,和我们的PHP课程影响不大,楠神不做细讲了,有兴趣多去网上搜索。
post方式比get方式安全多,主要是不在浏览器遗留痕迹。但post方式可不是绝对的安全,听说过网络抓包吧,post毕竟提交的数据都是明文传输,如果用户的网络被第三方恶意监听,提交的数据可以被截获,比如用户的账号和密码等一些重要信息。所以现在网站大都采用HTTPS协议了,就是网址以https开头不是http开头的网站。例如2345网址网站:
它就采用HTTPS协议了。好处是HTTPS协议可以数据加密,就算用户的账号密码被第三方截获,也只是些被加密处理后的字符串,无法看到真实的数据信息。更多了解百度搜索“HTTPS”。
2、get方式对数据是有限制的,post可以提交大量数据。
结合以上两点,post方式是绝大部分表单提交首选方式。表单提交选get方式,多用于一些搜索功能。
上面的代码截自百度的源代码,它就是用get方式提交(表单默认提交方式是get)。
搜索功能大多用get方式的原因:1、提交信息并不是重要的机密信息,不怕被看到,或者更愿意让别人看到。2、get方式不一定非得通过表单提交,还可以直接在网址中输入。比如:
用法:在访问的文件名后面加“?”,参数名=参数值,多个参数用“&”隔开。
get方式可以当做网站的一个网址直接用,搜索功能用get方式提交,生成一个网站网址。有可能搜索出的内容很多,需要对内容进行分页。比如百度:
这些分页又是一个个网址的超链接,通常只需要用get方式在原文件上改变一个涉及页码的参数就能实现一个新网址。用post方式显然不方便。听不懂楠神说的什么没关系,以后会学数据库分页的时候会明白的。
了解了get方式大家可以清楚一件事,有些网站有很多很多页面,它可不是每一个页面都要单独写一个文件来。可能服务器上就那一个文件,只是用户传不同的参数会显示不同的结果。做个模拟:
额外说明:
用户访问一个网址都是在用get方式提交数据,如果后面没有“?”,提交的就是一个空数据。
“?”在网址中主要起到传参数的作用。在windows系统里,文件名是不能含有“?”字符的,Linux可以含有“?”字符。不管文件名里有没有“?”,如果在网址中出现了“?”,服务器会把第一个出现的“?”之前的内容当成用户正在请求的一个文件,“?”之后的只是附加的参数。在Linux系统中避免使用“?”做文件名,不然用户输入网址也请求不到这个文件。
最后总结:
现在网站都处于安全的考虑,都不用$_GET获取外部参数了,涉及的东西很多吧,比如不利于SEO优化,不让用户看到服务器代码文件……网址大都是重写的(URL重写),例如:
在这个网站的根目录下,并不一定有temai这个文件夹,它这个网址有可能是重写过的。当用户访问这个网址时,根据这个网站的重写规则,会去匹配并执行指定的程序文件。
等到后面学习预定义变量$_SERVER时,楠神会教你怎么重写网址,只依靠PHP是实现不了强大的URL重写,需要去配服务器软件的,程序员只有了解了简单重写,才能明白强大的URL重写是怎么回事。