综述
1.预定义变量又叫超全局变量,包括:$_GET,$_POST,$_SERVER,$_REQUEST,$GLOBALS,$_COOKIE,$_SESSION等大约10个
2.作用域问题
php中,自定义的变量的作用域分两种:全局变量(函数外)、局部作用域(函数内)
但预定义变量的作用域称为“超全局作用域”:全局作用域+局部作用域的总和(函数内外全都可用)
3.数据类型问题:超全局变量都是数组
$_GET变量(数组)
Get这个词,常常出现在<formaction=”abc.php” method=”get”>…</form>
这叫做“表单以get方式提交数据”
则$_GET这个预定义数组变量,就是指以这种方式提交的所有数据的集合(数组)
对应来说,也可以以post方式提交数据
实际上,在网页中,以get方式提交数据有多种形式:
形式一:
<form action=”abc.php” method=”get”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<inputtype=”submit” value=”提交”>
</form>
形式二:<a href=”abc.php?uName=test1&uPswd=123”>文字。。。</a>
形式三:
<script>
Location.href=” abc.php?uName=test1&uPswd=123”;// 利用location对象的href属性
</script>
形式四:
<script>
Location.assign(“abc.php?uName=test1&uPswd=123”); // 利用location对象的方法assign()
</script>
不管是哪种形式的get提交过来的数据,获取数据是一样的。作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,也可以理解为“打开”该网页。
在abc.php网页中
<?php
$v1=$_GET[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
$v2=$_GET[‘uPswd’]; //该键名必须跟提交的时候名字完全一致(区分大小写)
echo ”v1=$v1,v2=$v2”;
echo “<hr />”;
echo “<pre>”;
var_dump($_GET); //var_dump()用于输出一个变量最完整的信息,输出$_GET这个数组
echo”</pre>”
?>
注意:复选框的name命名为数组的形式(多选项)
示例:
爱好:<inputtype=”checkbox” name=”hobby[]” value=”足球”/>足球
<input type=”checkbox” name=”hobby[]” value=”篮球”/>篮球
$_POST变量(数组)
类似于$_GET变量(数组),$_POST代表页面通过post方式提交过来的数据所形成的数组。
post提交数据,通常只有一种形式:
<form action=”abc.php” method=”post”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<input type=”submit”value=”提交”>
</form>
作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,也可以理解为“打开”该网页。
接受post数据的形式为(abc.php网页中):
<?php
$v1=$_POST[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
$v2=$_POST[‘uPswd’]; //该键名必须跟提交的时候名字完全一致(区分大小写)
echo ”v1=$v1,v2=$v2”;
echo “<hr />”;
echo “<pre>”;
var_dump($_POST); //var_dump()用于输出一个变量最完整的信息,输出$_GET这个数组
echo”</pre>”
?>
注:网页中的form表单,一般都用post方式,get方式主要体现在其他3中形式
$_REQUEST变量(数组)
$_REQUEST数组,并不是一个独立的数据来源,而是$_GET数据和$_POST数据的“总和”,即$_REQUEST数组中包括了所有$_GET数据和$_POST数据——由系统自动存储的。
- 通常$_GET数据和$_POST数据不会“同时出现”,$_REQUEST数组就代表了其中之一。
<form action=”abc.php” method=”post”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<input type=”submit” value=”提交”>
</form>
<form action=”abc.php” method=”get”>
项目一:<input type=”text”name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<input type=”submit” value=”提交”>
</form>
两者接受数据都一样
<?php
$v1=$_REQUEST[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
$v2=$_REQUEST[‘uPswd’]; //该键名必须跟提交的时候名字完全一致(区分大小写)
echo ”v1=$v1,v2=$v2”;
?>
- 当,get与post同时提交的情形(一般只有一种html语法形式会出现该情形):如下
<form action=”abc.php?a=5&b=10”method=”post”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<input type=”submit” value=”提交”>
</form>
此时,uName和uPswd两个数据以post方式提交给abc.php,并a=5与b=10以get方式提交给abc.php
则在页面中:
这样取得get数据:
$v1=$_GET[‘a‘];
$v2=$_GET[‘b’];
这样取得post数据:
$v1=$_POST[‘uName’];
$v2=$_POST[‘uPswd’];
但也可以这样取
$v1=$_REQUEST[‘a‘];
$v2=$_REQUEST[‘b’];
$v3=$_REQUEST[‘uName’];
$v4=$_REQUEST[‘uPswd’];
当get数据和post数据同时提交并其中有重名的时:
说明:
1.尽量避免重名
2.如果重名了,此时$_REQUEST只会记录(存储)其中一个数据(要么post数据,要么get数据)
3.至于记录的是哪个,是由php.ini中的一个设置项决定
3.1 request_order=”GP”;//这是默认值,G代表GET,P代表POST
3.2 含义是:先存储GET数据,再存储POST数据
3.3可见如果重名,此时POST就会覆盖GET数据
3.4改为:request_order=“PG”,顺序反过来
例如:
<form action=”abc.php?a=5&b=10”method=”post”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
项目三:<input type=”text”name=”a”>
<input type=”submit” value=”提交”>
</form>
a的数据为以post方式提交的数据。
$_GET 、$_POST 、$_REQUEST三种数据是相互独立的
$_SERVER变量(数据)
该变量存储了服务器端或客户端的一些请求信息或设置信息,比较多,而且不同的服务器和不同的请求页面,其数据项都可能不同。
常用的有:
REMOTE_ADDR,用户的IP地址
SERVER_ADDR,服务器端的IP地址
SERVER_NAME,服务器名(主机名)
输出所有项(可能每台服务器有所差异)
echo ”<table border=’1’>”;
foreach($_SERVER as $key=>$value){
echo “<tr>”;
echo “<td>$key</td>”;
echo “<td>$value</td>”;
echo “</tr>”;
}
echo “</table>”;
$GLOBALS变量(数据)
似乎是一个多余的变量:它只是把我们定义的所有全局变量存储到该数组中:
变量名就是该数组的下标(键名),变量值就是对应的值。
<?php
$v1=1;
$v2=2;
function f1(){
$v3=3;
$v4=4;
echo ”<br/>函数f1被调用!”;
}
f1();
echo ”<pre>GLOBALS数组内容为:<br />”;
var_dump($GLOBALS);
echo “</pre>”;
?>
(全局变量v1,v2存入GLOBALS数组,而局部变量v3、v4没有存入GLOBALS数组)
显示:
函数f1被调用!
GLOBALS数组内容为:
array(7) {
["GLOBALS"]=>
*RECURSION*
["_POST"]=>
array(0) {
}
["_GET"]=>
array(0) {
}
["_COOKIE"]=>
array(0) {
}
["_FILES"]=>
array(0) {
}
["v1"]=>
int(1)
["v2"]=>
int(2)
}