php常量和变量之外部变量

外部变量

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="text" name="username" /> 的值
$passwd = $_GET['pwd'];
echo $passwd.'<br />';
?>

你可以输出值看一下结果。通过上面的实验我们知道了,通过$_GET这个外部变量,可以得到从表单输入的值。

大家在实验的时候会发现地址栏上面有一个特点:

QQ截图20161114101233.png

根据上图,观察特点:

reg.php后面跟了一个?(问号)

表单里面的username变在了地址栏里面

表单面username的值输入的是root,在username后面跟了个=(等号)输入的值

username(名字)=root(值) 后面的密码是password(名字)=123123(值),中间有&(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="text" name="username" /> 的值
$passwd = $_POST['pwd'];
echo $passwd.'<br />';
?>

QQ截图20161114101322.png

观察特点:
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)来查看。

火狐浏览器的图标:

2015-08-02_55bdb8afd1ac0.png

打开firebug:

2015-08-02_55bdb9e922bbd.png

查看header头传递数据(网络,点击POST reg.php 选择Post),就看到了传递的名字和传递的数据值:

QQ截图20161114101734.png

QQ截图20161114101744.png

1.若真是使用get传密码,密码在地址栏里面显示过后。浏览器的历史记录会自动记录访问过的地址。恶意用户会,可以通过查看你的浏览器的历史记录,得到你曾经输入的密码。因此,不能使用get方式来作密码的传输方式。

get
读音:[get]
解释:得到,计算机里是指一种传送数据的方式

post
读音:[poʊst]
解释:计算机里指一种数据传递方式

request
读音:[rɪˈkwɛst]
解释:请求

submit
读音:[səbˈmɪt]
解释:提交,呈送

action
读音:[ˈækʃən]
解释:行动、活动

继续学习
||
<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入门教程之一周学会PHP

高并发千万级数据库系统解决方案
  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载
Ly

Ly

单击提交后不运行reg.php,直接显示php的代码,这个什么原因?

4年前    添加回复 6

杀死无脑怪

请问你知道是什么原因了吗

杀死无脑怪 · 2018-07-18 15:35
morning

我也遇到了相同的情况,还没有解决

morning · 2019-02-21 09:40
回复
RocherY

RocherY

在WWW文件夹下面创建一个user.html和一个reg.php, 代码都粘贴保存 然后打开user.html在文本框输入提交就可以把数据提交到reg.php里面。

4年前    添加回复 4

回复
风吹蛋蛋凉

风吹蛋蛋凉

reg.php的第六行写错了,应该是得到表单<input type="text" name="pwd" /> 的值

4年前    添加回复 2

回复
Aの汉

Aの汉

楼下,是通过action连接在一起的,你看下name或者获取数据的外部变量有没有对

4年前    添加回复 2

回复
꧁ 诱 ꧂

꧁ 诱 ꧂

User.html 和 reg.php 怎么联系到一起 为什么 运行没有结果

4年前    添加回复 2

lsx

user.html也要在localhost地址运行,就能自动连到一起

lsx · 2018-07-04 21:48
回复
那个..

那个..

这篇看的不是很懂,是不是要先配置一下?

4年前    添加回复 1

回复
绅士

绅士

$Get变量未声明?$GET才是外部变量,要看清大小写。。。

4年前    添加回复 1

回复
RocherY

RocherY

你表哥回复@꧁ 诱 ꧂ :你尝试把reg.php中屌丝编辑的注释语句删除,他的注释太他妈长有没有用/**/注释。 换成这样: <?php $u = $_POST['username']; echo $u.'<br />'; $passwd = $_POST['pwd']; echo $passwd.'<br />'; ?>

4年前    添加回复 1

回复
phpcn_u13796

phpcn_u13796

签到~有没有一起学的呀~~

4年前    添加回复 1

回复
我只是一条咸鱼哈

我只是一条咸鱼哈

加油吧!各位

4年前    添加回复 1

回复
悟以往

悟以往

签到 加油

4年前    添加回复 1

回复
大雨

大雨

谢谢php.cn

4年前    添加回复 0

回复

提交之后显示PHP代码

[最新 小萝卜哒哒 的回答]这个问题针对 Hbuilder+phpstudy的解决方案【前提是你已经配置好本地hubilder 的PHP环境】如下:    边看边改模式,左上角小螺丝——设置WEB服务器,     服务器选择 HTML 那里也变成 PHP服务器即可

时间:2年前

php常量和变量之外部变量

[最新 innocence 的回答]首先,猜测你代码里面一定是定义了username变量的 ,你有可能是在某个函数中使用改变量导致的。在函数里面 还得声明一下  global username ;推荐使用phpstorm 你这样的错误会有提示的

时间:2年前

PHP GET报错

[最新 韦小宝 的回答]Undefined index: username  你在PHP中直接打印一下  $_GET看看有没有username这个字段啊

时间:3年前

用$_POST获取用户名和密码这不也不安全 用火狐的firebug也能查看

[最新 ringa_lee 的回答]你说的对,直接获取会有很大的安全隐患,不过这个课程是针对纯小白的入门级课程,讲复杂了新手容易蒙圈,关于安全性方面的课程你可以看看其他课程

时间:3年前

提交之后显示PHP代码

[最新 亚连 的回答]这个帖子是一个表单提交,传递数据的

时间:4年前

使用POST获取值 输出错误

[最新 无聊的人 的回答]是否用post方式传输?  input标签name属性的值是否是username , pwd,

时间:4年前

提交user.hml给php文件后不运行

[最新 冰雪环绕 的回答]传值代码写错了  action

时间:4年前

PHP文件运行问题

[最新 无聊的人 的回答]你提交的标签是不是a标签,要用  提交还有  form标签提交地址也要写对,写成你要提交的php文件,然后那个.php文件接收 数据

时间:4年前

可不可以帐号用get,密码用post

[最新 大家讲道理 的回答]可以是可以,但是为什么要这么做呢..接受还需要做处理。

时间:5年前

提交之后结果不对

[最新 morning 的回答]需要在地址栏中使用localhost  才能解析到PHP    比如: http://localhost/untitles1/user.html

时间:5年前

老白

老白

全局变量名 功能说明 $_COOKIE 得到会话控制中cookie传值 $_SESSION 得到会话控制中session的值 $_FILES 得到文件上传的结果 $_GET 得到get传值的结果 $_POST 得到post传值的结果 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果 请再记一句话:以上这些变量全是超全局的。(以后讲解超全局的含义)。

6个月前 0

?

?

全局变量名 功能说明 $_COOKIE 得到会话控制中cookie传值 $_SESSION 得到会话控制中session的值 $_FILES 得到文件上传的结果 $_GET 得到get传值的结果 $_POST 得到post传值的结果 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

7个月前 0

梨夜?

梨夜?

我们常用的方法有get和post。可以这样理解,get传值在url中可见,而post传值在url中不可见 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

7个月前 0

手机用户1609903637

手机用户1609903637

$_COOKIE 得到会话控制中cookie传值 $_SESSION 得到会话控制中session的值 $_FILES 得到文件上传的结果 $_GET 得到get传值的结果 $_POST 得到post传值的结果 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

8个月前 0

大大

大大

在提交数据的时候,我们常用的方法有get和post。可以这样理解,get传值在url中可见,而post传值在url中不可见。 而post传值在url中不可见,是通过浏览器的header头部份将数据发送给指定服务器的。需要通过专门的工具才能看到Post发送的值为什么。你可以下载火狐浏览器(firefox)的插件(firebug)来查看

10个月前 0

回忆

回忆

全局变量名 功能说明 $_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)来查看。

1年前 0

࿐

html文件使用get方法传值,php文件需要使用$_GET接收值; html文件使用post方法传值,php文件需要使用$_POST接收值; php文件使用$_REQUEST既可以接收get传值,也可以接收post传值。 使用get方法传值的时候,URL栏会显示用户名和密码;为了隐藏用户名和密码,提高安全性,需要使用post方法传值

1年前 0

孤独成瘾

孤独成瘾

$_COOKIE 得到会话文件中cookie中的传值 $_SESSION 得到会话文件中session中的值 $_FILES 得到文件上传的结果 $_GET 得到get的传值结果 $_POST 得到post的传值结果 $_REQUEST 既能得到get的传值结果,也能得到post的传值结果。

2年前 0

秋城

秋城

若真是使用get传密码,密码在地址栏里面显示过后。浏览器的历史记录会自动记录访问过的地址。恶意用户会,可以通过查看你的浏览器的历史记录,得到你曾经输入的密码。因此,不能使用get方式来作密码的传输方式。

2年前 0

秋城

秋城

在提交数据的时候,我们常用的方法有get和post。可以这样理解,get传值在url中可见,而post传值在url中不可见。

2年前 0

秋城

秋城

$_COOKIE 得到会话控制中cookie传值 $_SESSION 得到会话控制中session的值 $_FILES 得到文件上传的结果 $_GET 得到get传值的结果 $_POST 得到post传值的结果 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

2年前 0

A牧川_***

A牧川_***

全局变量名 功能说明 $_COOKIE 得到会话控制中cookie传值 $_SESSION 得到会话控制中session的值 $_FILES 得到文件上传的结果 $_GET 得到get传值的结果 $_POST 得到post传值的结果 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

2年前 0

Teddy Li

Teddy Li

php常量和变量之外部变量

2年前 0

八大孤子

八大孤子

重点重点!!!

2年前 0

fei

fei

$_COOKIE 得到会话控制中cookie传值 $_SESSION 得到会话控制中session的值 $_FILES 得到文件上传的结果 $_GET 得到get传值的结果 $_POST 得到post传值的结果 $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

2年前 0

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~