3.3.3 外部变量
PHP 的外部变量是 PHP 在使用过程中规定好的一些变量。这个变量的规定是这样规定的,就这样使用。
我们先讲解几个最常用的例子,我们将下面的表单命名为 user.html:
<html>
<head>
</head>
<body>
<form action="reg.php" method="get">
<input type="text" name="username" />
<input type="password" name="pwd" />
<input type="submit" value="提交" />
</form>
</body>
</html>
上现是很基础的一段 HTML 代码,在这段代码的主要意思是把用户和密码,采用 get 方法,将数据发送给 reg.php(在上面代码的第 6 行规定的)。reg.php 想办法接收用户传过来的 username 和 pwd 这两个值。
我们得出我们的第一个外部变量:$_GET。
$_GET 的主要作用是将得到 get 传值的数据。
我们写一个 reg.php,用$_GET 来接收值试试:
<?php
//$_GET 后面加上中括号,将 username 作为字符串放在中括号里面,就得到了表单里面的<input type="text" name="username" /> 的值
$u = $_GET['username'];
echo $u.'<br />';
//$_GET['pwd'] 得到表单<input type="password" name="pwd" /> 的值
$passwd = $_GET['pwd'];
echo $passwd.'<br />';
?>
你可以输出值看一下结果。通过上面的实验我们知道了,通过$_GET 这个外部变量,可以得到从表单输入的值。
大家在实验的时候会发现地址栏上面有一个特点:
根据上图,观察特点:
- reg.php 后面跟了一个?(问号)
- 表单里面的 username 变在了地址栏里面
- 表单面 username 的值输入的是 liwenkai,在 username 后面跟了个=(等号)输入的值
- username(名字)=liwenkai(值) 后面的密码是 password(名字)=NoAlike(值),中间有&(and 符) 分开
密码是可见的,那怎么样保证安全呢。让我在注册的过程当中,密码不在地址栏里面被人看到呢?
这个时候我们需要使用到 post 传值,post 传值是在地址栏中不可见的。
同样上面例子的代码我们进行修改,html 代码如下:
<html>
<head>
</head>
<body>
<!-- 这一行 method 对应的值改为了 post -->
<form action="reg.php" method="post">
<input type="text" name="username" />
<input type="password" name="pwd" />
<input type="submit" value="提交" />
</form>
</body>
</html>
PHP 的代码里面的$_GET 全改为了$_POST:
<?php
//$_POST 后面加上中括号,将 username 作为字符串放在中括号里面,就得到了表单里面的<input type="text" name="username" /> 的值
$u = $_POST['username'];
echo $u.'<br />';
//$_POST['pwd'] 得到表单<input type="password" name="pwd" /> 的值
$passwd = $_POST['pwd'];
echo $passwd.'<br />';
?>
观察特点
reg.php 后的?(问号)不见了。后面的 username 和 password 也不见了。那他怎么传递数据的呢?
他是通过我们看不见的浏览器的请求头文件传递的数据。所以在 URL(网址)栏不可见。
注:附录中有如何通过火狐浏览器的 firebug 查看传递结果的演示过程。这一块都是 HTTP 协议规定的传送方式。
除此之外,我们还有$_REQUEST 来接收数据。现在我们这样处理:
将 php 代码段中的$_POST 全改为$_REQUEST,代码如下:
<?php
$u = $_REQUEST['username'];
echo $u.'<br />';
$passwd = $_REQUEST['pwd'];
echo $passwd.'<br />';
?>
把网页 user.html 里面的这一行中的 method,改为 get 执行一次,再改为 Post 再运行一次,看看结果:
<form action="reg.php" method="post">
通过上面的实验你会发现$_REQUEST 即可以接收 get 传值也可以接收 post 传值。
另外,我们总结一些外部变量,要求知识点的学习级别:了解含义,默写这个单词的写法和作用。
全局变量名 | 功能说明 |
---|---|
$_COOKIE | 得到会话控制中 cookie 传值 |
$_SESSION | 得到会话控制中 session 的值 |
$_FILES | 得到文件上传的结果 |
$_GET | 得到 get 传值的结果 |
$_POST | 得到 post 传值的结果 |
$_REQUEST | 即能得到 get 的传值结果,也能得到 post 传值的结果 |
请再记一句话:以上这些变量全是超全局的。(以后会讲解超全局的含义)。
注:
1.我们认为从用户输入过来的所有数据都不是可信的。本书的下半部分会专门讲解限制和过滤
2.在提交数据的时候,我们常用的方法有 get 和 post。可以这样理解,get 传值在 url 中可见,而 post 传值在 url 中不可见。
而 post 传值在 url 中不可见,是通过浏览器的 header 头部分将数据发送给指定服务器的。需要通过专门的工具才能看到 post 发送的值为什么。你可以下载火狐浏览器(firefox)的插件(firebug)来查看。
火狐浏览器的图标:
打开 firebug:
查看 header 头传递数据(网络,点击 POST reg.php 选择 Post),就看到了传递的名字和传递的数据值:
- 若真是使用 get 传密码,密码在地址栏里面显示过后。浏览器的历史记录会自动记录访问过的地址。恶意用户会通过查看你的浏览器的历史记录,得到你曾经输入的密码。因此,不能使用 get 方式来作密码的传输方式。
get
读音:[get]
解释:得到,计算机里是指一种传送数据的方式
post
读音:[poʊst]
解释:计算机里指一种数据传递方式
request
读音:[rɪˈkwɛst]
解释:请求
submit
读音:[səbˈmɪt]
解释:提交,呈送
action
读音:[ˈækʃən]
解释:行动、活动
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论