100讲 预定义超全局数组①-原理分析 $_GET
更新时间:2013年04月21日11时42分来源:
现在我们做项目串知识点.
先给大家讲解预定义超全局变量
PHP中预定义超全局变量
① 什么是全局变量
<?php
$a=23;//全局变量,因为该变量在整个作用域(在这个php文件中),都是可见
function test(){
//如果希望使用到全局$a;
global $a;
$a=45;
}
test();
echo $a;
?>
② 什么是超全局变量
超全局变量除了有全局变量的特点外,可以无须申明,直接使用.
快速入门
//超全局变量
$_SERVER['hsp']="韩顺平";
echo "<pre>";
echo print_r($_SERVER);
echo "</pre>"
提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序.
③ PHP供提供了九种
1. $_GET
2. $_POST
3. $_REQUEST
4. $_SERVER
5. $_ENV
6. $_FILE
7. $_COOKIE
8. $_SESSION
9. $GLOBALS
现在一个一个讲解
1. $_GET
以$_GET原理来分析数据的来龙去脉...
说明原理图:
3 分钟前上传
$_GET 实际使用.
客户机(浏览器)通过超链接传送信息给服务器
案例1
test.php页面
<?php
//urlencode编码
echo "<a href='a.php?city=北京好&name=xiaoming'>传送数据</a>";
?>
面试题: 请问如何处理超链接提交数据的中文乱码问题?
1. 对于高版本的ie 浏览器,无需处理
2. 对应 5.5 和 6.0 ie需要进行urlencode()编码处理
3. 尽量使用字母和数字.
a.php页面
<?php
echo "<pre>";
echo print_r($_GET);
echo "</pre>";
//如果希望指定取出某个数据,则可以通过下标名
echo $_GET['name'];
?>
看看ie5.5 和 ie 6的中文奇数乱码.
解决方法1.
给奇数中文加一个全角空格,然后到服务器接收是,去掉两头的空行 trim()
解决方法2:
使用urlencode 和 urldecode函数
在test.php页面
<?php
//这句话是对中文url编码.
$str=urlencode("北京好");
echo "<ahref='a.php?city=".$str."&name=xiaoming'>传送数据</a>";
?>
//在a.php 页面中,正常接收。
<?php
echo "<pre>";
echo print_r($_GET);
echo "</pre>";
//如果希望指定取出某个数据,则可以通过下标名,如果php版本低,可能看到是中文,需要使用 urldecode() 来解密
echo "--".$_GET['city'];
?>
_GET也可以接收表单以get方式提交数据
<form action=”a.php” method=”get”>
//....
</from>
特别说明如何提交表单数据建议使用POST,不要使用GET
使用细节:
如果判断是否收到值
a. php
if(empty($_GET['city'])){
echo "没有收到";
}else{
echo "有city";
echo$_GET['city'];
}
//这个方法可以,参看,建议使用empty
if(!isset($_GET['city'])){
echo "没有收到hello";
}else{
echo "有city";
echo$_GET['city'];
}
绝对不要启用register_globals 需要 register_globals = Off
预定义超全局数组②-$_POST $_REQUEST
$_POST
描述 : 通过Http POST方式提交的数据,会被封装到$_POST超全局数组中.
举例: 接收表单信息:
代码:
1 分钟前上传
代码:
register1.php页面
<html>
<head>
<metahttp-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<h1>用户注册</h1>
<formaction="register2.php" method="post">
用户名:<input type="text"name="username"/><br/>
密码<inputtype="password" name="passwd"/><br/>
性别:<inputtype="radio" name="sex" value="female"/>女<input type="radio"name="sex" value="male" />男<br/>
你喜欢什么:
<inputtype="checkbox" name="hobby[]" value="唱歌">唱歌
<inputtype="checkbox" name="hobby[]" value="跳舞">跳舞
<inputtype="checkbox" name="hobby[]" value="游泳">游泳
<inputtype="checkbox" name="hobby[]" value="骑马">骑马
<br/>
你的所在地是:
<selectname="city">
<optionvalue="beijing">北京</option>
<optionvalue="tianjing">天津</option>
<optionvalue="nanjing">南京</option>
</select>
<br/>
个人介绍 :
<textarearows="10" name="intro" cols="30">
</textarea><br/>
你选择图片<input type="file"name="myphoto"/><br/>
<inputtype="submit" value="提交"/>
</form>
</html>
**regiseter2.php***
<?php
//看看如何接收
echo "<pre>";
echo print_r($_POST);
echo "</pre>";
//关心爱好
$name=$_POST['username'];
$pwd=$_POST['passwd'];
//如何接收checkbox提交的数据
$hobbies=$_POST['hobby'];
echo "个人信息如下<br/>";
echo "$name--$pwd";
//print_r($hobbies);
echo "该人的爱好";
foreach($hobbies as $key=>$val){
echo"<br/>$key=$val";
}
echo "<br/>你的所在地是";
$city=$_POST['city'];
echo $city;
echo "<br/>个人介绍如下";
$intro=$_POST['intro'];
echo "<br/>$intro";
echo "<a href='#'>查看调查情况</a>"
?>
这里还有一个下拉框的演示
10min:
你编写生活幸福度的调查表,然后把调查的信息,存入到数据库.,看看能否获取数据,显示给用户看.
get数据提交主要是
<a></a> 默认是get提交
<?php
//当这样的方式跳转的时候,也是以get方式提交给ok.php
header(“Location: ok.php?aaa=xiaoming”);
?>
post和get区别请参看ppt
① 安全性 post>get
② 数据传输大小 [浏览器]post>get
③ 保存到收藏夹 get比较方便.
$_REQUST
定义: $_REQUST 中可以包括$_GET/$POST/$_COOKIE 数组,的信息.
快速入门:
这里就很好理解,看一个案例 :
<?php
echo "<pre>";
echo print_r($_REQUEST);
echo "</pre>";
//如何取出某个值
//$_REQUEST既可以接收get 请求数据,也可以接收post请求、cookie..
//所以这个变量,比较不可以信,不建议使用. $_GET $_POST
echo $_REQUEST['aa'];
//如果不确定get/post
if($_SERVER['http_method']=="post"){
$echo $_POST['名字'];
}else if($_SERVER['http_method']=="get"){
//用 _GET接收.
}
?>
注意事项:
1. 不要经常使用$_REQUEST,
2. 如果不确定_GET/POST
你接收数据时候,可以这样
if($_SERVER['REQUEST_METHOD’]=="POST"){
$echo $_POST['名字'];
}else if($_SERVER[’ REQUEST_METHOD’]=="GET"){
//用 _GET接收.
}
预定义超全局数组③-$_SERVER $_ENV $GLOBALS
$_ENV
该全局数组可以获取环境变量,在php5.3中默认禁用,但是你可以启动,在php.ini文件中启用.
variables_order="EGPCS"
特别说明一把,在开发和生产环境,不要启用.
$_FILE/ $_COOKIE /$_SESSION
后面讲
$GLOBALS
包含了全部变量的全局组合数组。变量的名字就是数组的键[手册]
同时一个自定义的全局变量,也会自动的被$_GLOBALS 管理
案例:
<?php
echo "aaaa";
echo "<pre>";
echo print_r($GLOBALS);
echo "</pre>";
?>
当你定义一个全局变量,该变量也会被$GLOBALS管理
<?php
$a=900;
echo “<pre>”;
print_r($GLOBALS);
echo “</pre>”
?>
案例说明: