php 预定义超全局数组

来源:互联网 发布:淘宝能在国外 编辑:程序博客网 时间:2024/04/29 15:57

100讲 预定义超全局数组①-原理分析 $_GET

更新时间:201304211142来源:

现在我们做项目串知识点.

先给大家讲解预定义超全局变量
        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原理来分析数据的来龙去脉...

说明原理图:

分钟前上传

下载附件 (60.59 KB)



$_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超全局数组中.

举例: 接收表单信息:

代码:


分钟前上传

下载附件 (26.82 KB)

代码:

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>”

?>

案例说明:

 

0 0