PHP 中GET、POST、REQUEST用法

一、$_GET数组

GET是HTTP中最原始的请求方式,在网页中点击一个超级链接或在地址栏输入一个URL都会发送一个GET请求。在GET请求中,数据是后缀在URL后面来发送的,就好像这样: http://www.phpboke.com/request.php?id=root&password=asdfl。PHP将GET请求封装在了 G E T 数 组 中 , 请 求 的 变 量 名 是 数 组 的 下 标 , 要 接 收 上 面 那 个 请 求 传 递 的 两 个 变 量 i d 和 p a s s w o r d , 使 用 _GET数组中,请求的变量名是数组的下标,要接收上面那个请求传递的两个变量id和password,使用 G​ET数组中,请求的变量名是数组的下标,要接收上面那个请求传递的两个变量id和password,使用_GET[‘id’]和$_GET[‘password’]即可。请看下面的例子:

<?php
if($_GET['get']) {
echo $_GET['id'], "<BR>";
echo $_GET['password'], "<BR>";
}
?>
<form action="get.php">
<label for="id">账号:</label><input type="text" name="id">
<label for="password">密码:</label><input type="text" name="password">
<input type="submit" name="get" value="提交">
</form>

get.php文件中有一个表单,它将使用默认的GET方法发送请求,其效果与上面看到的URL是相同的。请注意文件一开始的PHP代码段:它首先判断请求变量get是否存在(是否点击了name属性为get的提交按钮),如果存在则输出请求的变量。由于在第一次打开文件时,变量get不存在,因此开头的PHP代码根本不会被执行,而直接输出表单。当提交表单后,PHP代码得到执行,用户输入的两个变量也会被输出。

有时候,在程序中并不能确定客户端提交了哪些数据过来,那么怎么样在不知道请求变量名字的前提下遍历请求数据呢?这种屏蔽细节,遍历集合的方法在《设计模式》中被称为迭代(Iterate), PHP中是通过foreach语句来实现的。请看下面的例子:

<?php
foreach($_GET as $index => $value) echo "$_GET[$index] = $value", "<BR>";
?>

使用iterator.php?id=juxugongzi &password=adsl&address=peking这个链接访问它,将会看到foreach语句将所有用GET方法请求的变量都枚举出来了,而在事先,我们并不知道每个请求变量的名字。

二、$_POST 数组

GET方法的本意就是下载(与其对应的是上传方法PUT),因此并不是专门用于传递数据的,它将请求数据全部经过URL编码后缀在请求资源的后面,这样一来,当数据很多时URL就会变得很长——但这并不是问题的所在,问题所在是一些WEB浏览器或服务器程序会限制这行字符串的长度。这时,就需要用到POST方法了。
顾名思义,POST方法的主要用途就是“传递”数据,它将数据放在所有请求标题的后面上传,这样一来,无论有多少数据上传都不成问题了(这样请求数据的大小之取决于WEB服务允许的尺寸了)。通常来说,对于表单数据如无特别需要都使用POST方法来上传,这样就无须去关心具体上传数据的尺寸了。
POST方法的请求数据被封装到了 P O S T 数 组 中 , 其 使 用 方 法 与 _POST数组中,其使用方法与 P​OST数组中,其使用方法与_GET数组一样。将上面的表单添加一个method属性,就变成了这样:

<?php
if($_POST['post']) {
foreach($_POST as $index = > $value) echo "$_POST[$index] = $value", "<BR>";
}
?>
<form action="post.php" method="post">
<label for="id">账号:</label><input type="text" name="id">
<label for="password">密码:</label><input type="text" name="password">
<input type="submit" name="post" value="提交">
</form>

另一个有趣的设定是,GET方法和POST方法并不矛盾,在POST方法中同样可以传递GET变量,将上面的post.php文件稍微改动一下,就成了这样:

<?php
if($_POST['post']) {
foreach($_POST as $index = > $value) echo "$_POST[$index] = $value", "<BR>";
foreach($_GET as $index = > $value) echo "$_GET[$index] = $value", "<BR>";
}
?>
<form action="post.php?act=login" method="post">
<label for="id">帐号:</label><input type="text" name="id">
<label for="password">密码:</label><input type="text" name="password">
<input type="submit" name="post" value="提交">
</form>

该程序同时处理了GET方法(act 参数)和POST方法(id 和 password 参数)的请求数据,GET方法的请求变量后缀在了表单action属性值的后面,这样只有一点问题,就是GET方法的请求变量不能由用户来输入。通常,固定的数据使用GET方法,由用户输入的数据使用POST方法来发送,两种方法区分开了不同逻辑的数据。不过读者在构建这种表单的时候,一定要注意两种方法不要有相同的变量名,否则将出现不可预料的后果。最后,需要注意的是,当使用GET方法发送数据时,则 标签 action 属性值中不能包含查询字符串(即使包含也不会生效),所以,下面的表单中,act 参数将不能发送:

<form action="post.php?act=login" method="get">
<label for="id">账号:</label><input type="text" name="id">
<label for="password">密码:</label><input type="text" name="password">
<input type="submit" name="post" value="提交">
</form>

应该改成下面的形式:

<form action="post.php" method="get">
<label for="id">账号:</label><input type="text" name="id">
<label for="password">密码:</label><input type="text" name="password">
<input type="submit" name="post" value="提交">
<input type="hidden" name="act" value="login">
</form>

三、$_REQUEST数组

使用 G E T 和 _GET和 G​ET和_POST接收传递来的数据有一个问题,就是程序必须知道上传来的数据具体使用哪种方法。但实际上,无论是哪种方法,都是传递数据给WEB应用程序,它们的目的是一样的。 R E Q U E S T 数 组 屏 蔽 了 这 些 细 节 , 它 封 装 了 _REQUEST数组屏蔽了这些细节,它封装了 R​EQUEST数组屏蔽了这些细节,它封装了_GET、 P O S T 、 _POST、 P​OST、_FILE和 C O O K I E 四 个 数 组 的 内 容 , 使 我 们 对 这 些 数 据 可 以 一 视 同 仁 。 事 实 上 , 在 J S P 中 , G E T 和 P O S T 的 变 量 就 是 统 一 使 用 r e q u e s t . g e t P a r a m e t e r ( ) 方 法 来 接 收 , 只 不 过 P H P 中 的 _COOKIE四个数组的内容,使我们对这些数据可以一视同仁。事实上,在JSP中,GET和POST的变量就是统一使用request.getParameter()方法来接收,只不过PHP中的 C​OOKIE四个数组的内容,使我们对这些数据可以一视同仁。事实上,在JSP中,GET和POST的变量就是统一使用request.getParameter()方法来接收,只不过PHP中的_REQUEST数组又封装了Cookie的内容。当使用$_REQUEST数组后,上面的例子可以简化成这样:

<?php
if($_REQUEST['post']) {
foreach($_REQUEST as $index = > $value) echo "$_REQUEST[$index] = $value", "<BR>";
}
?>
<form action="request.php?id=juxugongzi&password=adsl" method="post">
<label for="id">账号:</label><input type="text" name="id">
<label for="password">密码:</label><input type="text" name="password">
<input type="submit" name="post" value="提交">
</form>

不过,使用 R E Q U E S T 数 组 是 一 定 要 注 意 , 几 种 数 据 中 的 变 量 名 不 要 冲 突 , 尤 其 要 注 意 的 是 _REQUEST数组是一定要注意,几种数据中的变量名不要冲突,尤其要注意的是 R​EQUEST数组是一定要注意,几种数据中的变量名不要冲突,尤其要注意的是_COOKIE,它的数据不使用过客户端来设置的。

PHP 中GET、POST、REQUEST用法相关推荐

  1. Laravel中Request用法

    //以数组形式获取所有输入数据 $request()->all();//input从整个请求中获取输入数据(包括查询字符串) $request()->input('name'); //设置 ...

  2. 【node】express中mysql的基本用法、连接池的使用、事务的回滚

    [node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...

  3. Spring MVC中Session的正确用法之我见02

    Spring MVC中Session的正确用法之我见 Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置 ...

  4. python中mako中loop_python中Mako库实例用法

    Mako是一个模板库.一种嵌入式的语言,能够实现简化组件布局以及继承,主要的用途也是和作用域有关,但是效果是最直接切灵活的,这些都是mako的基本功能,掌握了基础内容,接下来就是详细的了解讲述,从几个 ...

  5. el表达式ne什么意思_JSP中EL表达式的用法详解(必看篇)

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  6. java中的setattribute_JSP request.setAttribute()详解及实例

    javascript request.setAttribute()详解 request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; ...

  7. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

  8. 简单介绍SQLserver中的declare变量用法

    这篇文章主要介绍了SQLserver中的declare变量用法,sql中declare是声明的意思,就是声明变量的,这个一般是用在函数和存储过程中的.感兴趣的可以来了解一下 平时写SQL查询.存储过程 ...

  9. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

最新文章

  1. 涉及位操作的算法辑录
  2. Jetson Xavier(Ubuntu18.04)安装固态硬盘并挂载到/home区下
  3. 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法
  4. sys_connect_by_path
  5. 开关电源磁性元件理论及设计pdf_邵革良首席科学家丨高性价比PFC电源设计及其电感技术...
  6. ACPI知识学习笔记
  7. Spring 常见问题( 持续更新... ... )
  8. 一张图看懂python编程
  9. 不学无数——SpringBoot入门VI
  10. git学习(三)分支管理
  11. 【2019杭电多校第六场1008=HDU6641】TDL(思维)
  12. CF卡 本地磁盘模式转换
  13. 「解决方案」高速公路综合解决方案
  14. 分享20个增长黑客经典案例。
  15. 使用Xbrowser远程连接REHL6.5
  16. matlab求点,MATLAB求两点中点
  17. Quartus II下载器件库(新)
  18. 我们该如何度过自己的大学四年?
  19. 将HTML的文件打包成为App,编程工具Hbuilder
  20. php试题判断ip是否合法,php检测IP地址是否合法的方法

热门文章

  1. 计算机大赛应用文档制作,PPT制作应用大赛策划书
  2. python简易电话簿系统_Python实现电话簿工具(代码分享)
  3. 【C++11】包装器
  4. 【产业互联网周报】2019年我国软件业务收入71768亿元,同比增15.4%;亚马逊、谷歌先后发布财报,披露云计算业务增长...
  5. postgreSQL数据类型字符串和数值相互转换
  6. 数据库原理-几种数据模型
  7. 日本第二场酒类专场拍卖“L拍卖”将在东京举行
  8. 点线特征融合求取相机位姿
  9. 【读书】迟子建《额尔古纳河右岸》 摘录
  10. 英式音标26字母(U-Z)