php基础笔记

作者: hxf981224 分类: 编程笔记 发布时间: 2019-10-15 18:46

环境搭建笔记

什么是PHP

超文本预处理器

运行原理

运行在服各器端的,内嵌在html中的脚本语言 集成坏境有哪些

wampserver xmapp phpstudy appserver 丶、、、、

php引擎(7.O) mysql ( 数据库database) apache (服务) lamp lnmp

为什么学习的吋候用集成坏境

筒単入门:

localhost本机服各器名字/ 是你的php文件 127.0.0.1你本机的ip地址/php文件

注意:

写php代碼的吋候写在www目录下

(幵发工具)

vim subline ( notepad++, ) phpstrom webstrom dw NetBeansK php信息)

phpinfo();显示所有的php的信息

php文件格式笔记

1、PHP文件已. php结尾

2、可以用短标签风格 注意:必须通过php. ini这个配置文件去修改一项

short_ open tag = On

切记你修改完配置文件以后必须重启你的服务 3、需要注意一-句php代码结束的时候必须用分号结束告诉计算机我说完了

4、关键字一输出 [ echo]

变量

变量就是可以改变的量 变量就是一个盒子,专门存储东西的,在程序的执行过程当中是可以发生改变的在php当中必须要用$开头重点

命名规范 1、以$开始,后面可以接英文字符

2、严格区分大小写 3、不要以数字和特殊字符开头 4、它可以用中文,我强烈建议不要使用

5、下划线不属于特殊字符 6、数字可以加在中间或者结尾处

7、变量名字要有意义 8、要照着你们公司的规范来命名规则: 起名字一定要有意义不要给我$a $b $c

遵循驼峰命名法或者变量声明时候等号两边加上空格变量的操作 1、给变量赋值=2、输出变量echo 3、判断一个变量是否存 这是php给咱们的函数 isset() ;

4、 销毁变量 unset () ;

单引号双引号

1、单引号不能解析变量,双引号可以解析变量

2、双引号执行转译字符,单引号不转译\n \r \t \

3、I它执行转译\和’

4、能使用单引号就不适用双引号,为什么?因为单引号效率要比双引号快:

5、如果是字符串和变量一起的时候用.来链接

6、双引号里面插入单引号,单引号里面插入变量,变量会解析“$a、”’张三’

7、如果双引号里面插入变量的时候请在后面加上空格或者,号,不然计算机会认为你是一体的或者用大括号包起来

数据类型

标量(四个) 整型(int integer 整数) 1 12 43 -78

浮点型(float) 4.25 -0.12

布尓型 bool boolean

真和假I true

字符串(string) 在程序里面用単引号或者双引号引起来的东西就是字符串

混合类型(复合类型) 以后会讲的 数组(array)对象(object)

特殊类型 空(null) 资源(resource)

资源就是自们电脑上的图片avi rvmb mp3网络请求都是资源

数据类型转换

强制类型转换

   intval () / /转为整型
 ​
  floatval() / /转为浮点型
  strval () / /转为字符串
  boolval () / /转为布尔值
   
 [强制类型转换总结]
 ​
  1、空转化为整型会是0
 ​
  2、 空转化为浮点型变成浮点型的0
 ​
  3、 空转化为字符串会成为空字符串”tip: 中间不能有任何字符,包括空格4、整型如果后面有字符串,会把字符串干掉留着前面的数字
 ​
  5、浮点型如果后面有字符串,会把字符串干掉留着前面的数字包括小数点以后的

系统常量

常量的定义

常量是程序运行的时候是不可以改变的量

定义格式: define( ‘常量名字’, ‘常量的值’) ;注意事项 1、不能重复定义 2、常量的名字咱们一般用大写字母

3、常量的值只能是标量

4、常量的作用域是全局的

5、输出的时候没有$符号

6、常量不能写到字符串中[判断常量是否被定义] defined( ‘常量名’) ;

系统常量

  • FILE //找打你的文件 //你代码所在的行数在第几个行的意思;
  • //找到你当前访问文件所在的目录
  • PHP_ oS / /获取系统信息 PHP_ VERSION / /获取版本信息 FUNCTION / /获取当前函数名|
  • M_PI圆周率 (了解) _MHTHOD__ / /获取当前成员方法名 _NAMES PACE _//获取当前命名空间名字
  • _TRAIT _/ /获取当前TRAIT名字(多继承)
  • _CLASS _//获取当前类名

运算符

为false的几种情况

1、 整型的0在进行判断的时候为假,整型的1在判断的时候为真 2 3 4 2、如果浮点的0.0000000都是假的只要后面有一一个是非零的数字即为真

3、空字符串为假↑如果中间有一一个字符都是真那怕是一一个空格

4、空字符串的0即为假其他皆为真

5、空数组为假 6、null作为判断条件的时候是假的

[流程控制] //单分支结构 if (条件) { 真区间

}

//双分支结构 if (条件) { 真区间

} else { 假区间

}

流程控制

 (多分支结构)
 if () {
 ​
 } else if () {
 } else if () {
 } else {
 ​
 }
 ​
 解释:else if 可以写多个相当于switch case 里面的case
 else相当于switch case 里面的default (备胎什么都不满足的情况才会走这里)

循环

 for  ($i = 0; i<5;$i++) {
 ​
 }
 ​
 初始化条件
 ​
 $i=0;
 ​
 while ($i < 5) {
 $i++ ;
 ​
 初始化条件
 ​
 $i=0;
 ​
 do{
 ​
 •       $i++;
 } while ($i<5) ;
 ​
 break;
 条件符合终止循环continue
 符合条件终止此次循环,并且继续循环,直到循环条件不成立为止结束

函数

[函数&功能] 定义:在真实的项目开发过程中。有些代码会重复利用,咱们手动把它提出来,做成公共的代码,共团队来使用,这个咱们封装的代码段,就是函数(功能)

优点: 1、太高代码的利用率

2、减少开发时间 3、减少代码冗余

4、可维护性提高

5、方便调试代码;函数定义格式

function函数名(参数1 =值1,参数2=值2,参数3=值3。。。。。。。。。。) 函数体代码段 return返回值; [类别] 类库函数 is_ nul1() is_ array() is_ string()

自定义函数 (就是咱们自己写的函数,根据项目开发过程当中,咱们根据需求自己编写出来的函数,可以供大伙一起使用) [ function] 定义函数的关键字

[函数命名规范]

  • 与咱们的变量名几乎一样,函数名不区分大小写
  • 函数名字使用英文,遵循规范,数字可以加在中间或者是后面,下划线不属于特殊符号,不用特殊符号
  • 命名的时候要有意义遵循驼峰或者下划线8、不能使用系统给咱们的函数名还有系统给的关键字 [基本格式]
  • 函数都要以关键字function开始 函数名后面要紧跟小括号
  • 小括号下面跟着大括号,大括号里面是函数体 函数调用需要函数名加上小括号;
  • [没有参数,没有返回值]

[有参数没有返回值]

function show ($name = ‘朴槿惠’ , $val = ‘ 总统’) / /$name = ‘ ‘ $val = ”;

echo ‘ 你的名字是,.$name. ‘我的属性是’ .$val. ‘ ‘ ;

参数就是

name val

如果你写多个的话,用逗号隔开可以写多个没有上线

就相当于朴槿惠赋值给变量name

[有参数有返回值]

function info ($name=’张三’,,$sex=’男 ,$class=12)

echo ‘我是’ .$name. ‘性别是: ‘ .$sex;

return 1 ;

/ /echo ‘我是后续代码’ ;

重点

return

只是返回并没有输出

return后面代码不执行

【return 】

1、return关键字只要碰到立马结束,后面代码统统不执行2、如果你想有多个返回值的时候,用数组去搞3、函数调用表达式的值就是函数的返回值

[默认参数]

1、默认参数就是不传参的时候用的那个变量2、如果你传了参数,就用传过来的值

3、如果形参带有默认参数,一般放到后面

4、如果没有默认参数,你必须给我传,不然会报错(js 不是)

[注意事项]

1、函数必须要function开始定义

2、function后面加空加函数名加空格加小括号

3、函数名与变量名字命名规则基本一样,唯一不一样的是不缺分大小写:4、 函数名后面跟括号,括号里面跟参数(就是变量)5、如果有默认参数用等号等号后面是你要跟的值

6、调用函数的时候里面传入的值(实参)就是把函数体外的变量的值拿到函数体内来使用7、函数体外的变量和函数体内的变量通常不是一-个变量

8、函数可以有返回值,也可以没有返回值,你如果想返回的话,你用return关键字返回9、函数的调用跟你定义的顺序没有半毛钱关系但是变量不是10、 函数可以调用多次,没有事

(作用域) 定义: 就是一个変量的作用的范围,或者叫做生命周期

(内部変量) 就是函数体内声明的変量,内部変量的作用域只在函数体内生效,程序执行完事以后自动销毁(垃圾回收机制)

(外局変量) 外部変量就是在函数体外声明的変量,不能在函数体内使用 函数体外的変量名字可以与函数体内的変量的名字一-祥,但是一般咱们不这么去做

(超全局変量) 外部変量和内部変量是同一个変量 $_ GET $_ POST $_ FILE $_ COOKIE $_ SESSION $GLOBALS

 重点
 [静态変量]
 function total ()
 ​
 static $num = 2;
 $num*=2 ;
 echo $num;
 total() ; //4
 ​
 total() ; //8
 ​
 total () ; / /16
 ​
 个变量只会初始化一次在送行的吋候它会记录上一次的值static变量不会销毁
 ​
 [形参和返回值的类型的约束]
 ​
  function sum (int $num1 , int$num2)//形参的
 ​
  return $num1 + $num2 ;
 ​
 }
 ​
  (sum('2.3',3)) ;
 ​
  //小括号后面加上:加上数值类型把函数体返回的值给转成你限定的类型
 ​
  function sum($num1 ,$num2) :string / /返回值的
 ​
 {
 ​
  return $num1 + $num2 ;
 ​
 }
 ​
  (sum(4,5) ) ;
 ​
 // php 7.0新特性
 ​
  function test(. . .$arr)
 ​
 }
 ​
  var_ dump($arr) ;
 ​
 }
 ​
  test (1,2, 3, 4,5, 6,7) ;
 ​
  function test ($a, $b, $c)
 ​
 {
 ​
  var_ dump($a, $b, $c) ;
 ​
 }
 ​
  $arr = [1,2,3] ;
 ​
  test(. . .$arr) ;

总结: ..$arr这样传参的意思是把数组里面的值一一赋值给形参赋值

[匿名函数] 所谓的匿名函数就是没有名字 //如果你想用,怎么办赋值给一个变量然后该这么调用就怎么调用变量加上()跟普通函数调用一样$func = function ()

{

}

$func() ;

常用函数

数学函数:

  • 随机: rand mt_ rand
  • 小数: floor:不大于该数的最大整数
  • ceil:不小于该数的最小整数
  • round:四舍五入法取整
  • 其它: abs:绝对值 pi: 圆周率
  • M_pi:常量,与pi函数的返回值相同
  • pow: 指数表达式
  • max: 最大值
  • min: 最小值

字符串函数:

  • 大小写转换
  • strtolower: 转换为小写 strtoupper转换为大写
  • lcfi rst: 首字母小写
  • ucfirst: 首字母大写 ucwords:每个单词首字母大写
  • 空白处理: trim:去掉首尾的空白字符
  • trim: 去掉开头的空白字符 rtrim/chop:去掉结尾的空白字符

查找定位:

  • strstr/strchr:返回首次出现到结尾的内容
  • strrchr:返回最后一次出现到结尾的内容
  • stristr: strstr忽略 大小写的版本
  • strpos: 返回首次出现的位置
  • stripos: strpos忽略大小写的版本
  • strrpos: 返回最后一次出现的位置
  • strripos: strrpos忽 略大小写的版本
  • substr: 子串提取,可以通过下标方式获取单个字符($str[n])strpbrk:返回(字符列表中任意字符)首次出现到结尾的内容比较:
  • strcmp:二进制比较字符串
  • strcasecmp: strcmp忽略大小写
  • st rnat cmp: 自然顺序比较
  • st rnatcasecmp: strnatcmp的 忽略大小写版本

顺序:

  • str_ shuffle: 打乱顺序
  • strrev:逆序字符串

数组常用函数:

  • 数组中元素指针的移动
  • next : 向后移动,指向下- -个元素
  • prev: 向前移动,指向前一-个元素
  • end: 指向最后一个元素
  • reset : 复位I重新指向第一-个元素

2、键和值相关的操作

  • key: 获取数组当前元素的键
  • current/pos:获取数组当前元素的值
  • array keys: 获取所有的键
  • array_ values: 获取所有的值,并为其建立数字索引
  • array key_ exists/ key_ exists: 判断给定的键是否在数组中inarray:判断给定的值是否在数组中
  • array search: 根据值返回对应的键名
  • array count_ values: 统计数组中所有的值出现的次数

3、添加删除元素

  • arrayshift:将数组开头的元素移出数组
  • array unshift: 向数组开头添加一一个或更多个元素
  • array push:向数组末尾压入一一个或多个元素
  • array pop:弹出数组末尾的一个元素

4、排序相关

  • shuffle: , 将数组打乱(转换为索引数组)
  • sort:对数组进行排序(排序之后重新索引)
  • rsort: 对数组进行逆向排序
  • asort: 对数组进行排序并保持索引关系
  • arsort:对数组进行逆向排序并保持索引关系
  • natsort: 用自然顺序算法对数组进行排序
  • natcasesort: natsort忽略大小写的版本
  • ksort:对数组按照键名进行排序
  • krsort:对数组按照键名逆向排序
  • usort:使用用户自定义的比较函数对数组的值进行排序
  • uasort:使用用户自定义的比较函数对数组的值进行排序并保持索引关系
  • uksort:使用自定义的比较函数对数组的键名进行排序

5、元素运算

  • array_sum:计算数组中所有值的和
  • array product:计算数组中所有值的乘积c
  • ount/sizeof:计算数组中元素的个数

6、 创建数组

  • range:建立-一个包含指定范围单元的数组(可以指定步幅,可以指定递减)
  • compact:创建一-个包含变量与其值的数组
  • extract:从数组中将变量导入到当前的符号表(与compact功能相反)
  • array:新建一一个数组
  • array merge:合并一个或多个数组(关联会覆盖,索引会重新索引,若想保留索引可以使用’+’)
  • array_ merge_ recursive: 递归合并一一个或多个数组
  • arraycombine:用一个数组的值作为键名,另一个数组的值作为值创建数组

7、其它

  • array_chunk:将数组分割成指定长度的小数组
  • arraymap:将回调函数作用到每个元素上,返回处理的结果数组(新数组)array_ walk:将回调函数作用到每个元素上(会改变原数组),返回真假
  • array_filter:使用回调函数过滤数组(回调函数返回真的才会出现在结果中)arrayflip:返回交换键和值后的新数组
  • array rand:随机从数组中抽取一个或多个元素的键
  • array replace: 使用后面的数组中元素替换第-一个数组中的元素
  • array_ reverse:返回一个单元顺序相反的数组(关联数组会保持键值对应,索引数组需要传递第二个参数
  • array_ unique: 移出数组中重复的值

数组

在PHP中,array() 函数用与创建数组,

例:

 array();

在 PHP 中,有三种数组类型:

  • 索引数组 – 带有数字索引的数组
  • 关联数组 – 带有指定键的数组
  • 多维数组 – 包含一个或多个数组的数组

PHP的索引组:

 $cars=array("porsche","BMW","Volvo");

或者也可以手动分配:

 $cars[0]="porsche";
 $cars[1]="BMW";
 $cars[2]="Volvo";

实例:

 <?php
 $cars=array("porsche","BMW","Volvo");
 echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
 ?>
 运行结果:
 I like porsche, BMW and Volvo.

获得数组长度-count()函数

count() 函数用于返回数组的长度(元素数)

实例:

<?php
$cars=array("porsche","BMW","Volvo");
echo count($cars);
?>
运行结果:
3

变量索引数组:

如需遍历并输出索引数组的所有值,您可以使用 for 循环,就像这样:

<?php
$cars=array("porsche","BMW","Volvo");
$arrlength=count($cars);

for($x=0;$x<$arrlength;$x++) {
  echo $cars[$x];
  echo "<br>";
}
?>
运行结果:
porsche
BMW
Volvo

PHP关联数组(关联数组是使用您分配给数组的指定键的数组)

有两种创建关联数组的方法:

$age=array("Bill"=>"35","Steve"=>"37","Elon"=>"43");
$age['Bill']="63";
$age['Steve']="56";
$age['Elon']="47";

实例:

<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
echo "Elon is " . $age['Elon'] . " years old.";
?>
运行结果:
Elon is 47 years old. 

遍历关联数组

如需遍历并输出关联数组的所有值,您可以使用 foreach 循环,就像这样:

<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");

foreach($age as $x=>$x_value) {
  echo "Key=" . $x . ", Value=" . $x_value;
  echo "<br>";
}
?>
运行结果:
Key=Bill, Value=63
Key=Steve, Value=56
Key=Elon, Value=47

PHP数组排序

数组中的元素能够以字母或数字顺序进行升序或降序排序

PHP-数组的排序函数

  • sort() – 以升序对数组排序
  • rsort() – 以降序对数组排序
  • asort() – 根据值,以升序对关联数组进行排序
  • ksort() – 根据键,以升序对关联数组进行排序
  • arsort() – 根据值,以降序对关联数组进行排序
  • krsort() – 根据键,以降序对关联数组进行排序

实例:对数组进行升序排序 -sort()

<?php
$cars=array("porsche","BMW","Volvo");
sort($cars);
?>
运行结果
BMW
Volvo
porsche

对数组进行降序排序 – rsort()

<?php
$cars=array("porsche","BMW","Volvo");
rsort($cars);
?>
运行结果
porsche
Volvo
BMW

根据值对数组进行升序排序 – asort()

<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
asort($age);
?>
运行结果:
Key=Elon, Value=47
Key=Steve, Value=56
Key=Bill, Value=63

根据键对数组进行降序排序 – krsort()

<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
krsort($age);
?>
运行结果:
Key=Steve, Value=56
Key=Elon, Value=47
Key=Bill, Value=63

超全局数组

这些超全局变量是:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

$GLOBALS — 引用全局作用域中可用的全部变量

$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。

PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

下面的例子展示了如何使用超级全局变量 $GLOBALS:

<?php 
$x = 75; 
$y = 25;
 
function addition() { 
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
 
addition(); 
echo $z; 
?>
运行结果:
95
    
    
**在上面的例子中,由于 z 是 $GLOBALS 数组中的变量,因此在函数之外也可以访问它**

PHP $_SERVER

$SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。下面的例子展示了如何使用 $SERVER 中的某些元素:

<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
运行结果:
/example/php/demo_php_global_server.php
www.w3school.com.cn
www.w3school.com.cn
https://www.w3school.com.cn/tiy/s.asp?f=demo_php_global_server
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
/example/php/demo_php_global_server.php 

$_SERVER 中访问的最重要的元素:

元素/代码描述
$_SERVER[‘PHP_SELF’]返回当前执行脚本的文件名。
$_SERVER[‘GATEWAY_INTERFACE’]返回服务器使用的 CGI 规范的版本。
$_SERVER[‘SERVER_ADDR’]返回当前运行脚本所在的服务器的 IP 地址。
$_SERVER[‘SERVER_NAME’]返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
$_SERVER[‘SERVER_SOFTWARE’]返回服务器标识字符串(比如 Apache/2.2.24)
$_SERVER[‘SERVER_PROTOCOL’]返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
$_SERVER[‘REQUEST_METHOD’]返回访问页面使用的请求方法(例如 POST)。
$_SERVER[‘REQUEST_TIME’]返回请求开始时的时间戳(例如 1577687494)。
$_SERVER[‘QUERY_STRING’]返回查询字符串,如果是通过查询字符串访问此页面。
$_SERVER[‘HTTP_ACCEPT’]返回来自当前请求的请求头。
$_SERVER[‘HTTP_ACCEPT_CHARSET’]返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
$_SERVER[‘HTTP_HOST’]返回来自当前请求的 Host 头。
$_SERVER[‘HTTP_REFERER’]返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
$_SERVER[‘HTTPS’]是否通过安全 HTTP 协议查询脚本。
$_SERVER[‘REMOTE_ADDR’]返回浏览当前页面的用户的 IP 地址。
$_SERVER[‘REMOTE_HOST’]返回浏览当前页面的用户的主机名。
$_SERVER[‘REMOTE_PORT’]返回用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER[‘SCRIPT_FILENAME’]返回当前执行脚本的绝对路径。
$_SERVER[‘SERVER_ADMIN’]该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
$_SERVER[‘SERVER_PORT’]Web 服务器使用的端口。默认值为 “80”。
$_SERVER[‘SERVER_SIGNATURE’]返回服务器版本和虚拟主机名。
$_SERVER[‘PATH_TRANSLATED’]当前脚本所在文件系统(非文档根目录)的基本路径。
$_SERVER[‘SCRIPT_NAME’]返回当前脚本的路径。
$_SERVER[‘SCRIPT_URI’]返回当前页面的 URI。

PHP $_REQUEST

PHP $_REQUEST 用于收集 HTML 表单提交的数据。

下面的例子展示了一个包含输入字段及提交按钮的表单。当用户通过点击提交按钮来提交表单数据时, 表单数据将发送到 <form> 标签的 action 属性中指定的脚本文件。在这个例子中,我们指定文件本身来处理表单数据。如果您需要使用其他的 PHP 文件来处理表单数据,请修改为您选择的文件名即可。然后,我们可以使用超级全局变量 $_REQUEST 来收集 input 字段的值:

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>

PHP $_POST

PHP $POST 广泛用于收集提交 method=”post” 的 HTML 表单后的表单数据。$POST 也常用于传递变量。

下面的例子展示了一个包含输入字段和提交按钮的表单。当用户点击提交按钮来提交数据后,表单数据会发送到 <form> 标签的 action 属性中指定的文件。在本例中,我们指定文件本身来处理表单数据。如果您希望使用另一个 PHP 页面来处理表单数据,请用更改为您选择的文件名。然后,我们可以使用超全局变量 $_POST 来收集输入字段的值:

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_POST['fname'];
echo $name; 
?>

</body>
</html>

PHP $_GET

PHP $_GET 也可用于收集提交 HTML 表单 (method=”get”) 之后的表单数据。

$_GET 也可以收集 URL 中的发送的数据。

假设我们有一张页面含有带参数的超链接:

<html>
<body>

<a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a>

</body>
</html>


当用户点击链接 "测试 $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后您就能够通过 $_GET 在 "test_get.php" 中访问这些值了。

下面的例子是 "test_get.php" 中的代码:
<html>
<body>

<?php 
echo "在 " . $_GET['web'] . " 学习 " . $_GET['subject'];
?>

</body>
</html>

PHP表单处理

PHP 超全局变量 $GET 和 $POST 用于收集表单数据(form-data)

下面的例子显示了一个简单的 HTML 表单,它包含两个输入字段和一个提交按钮:

<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>
运行结果:下图所示



<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>

使用 HTTP GET 方法也能得到相同的结果:

<html>
<body>

<form action="welcome_get.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>



<html>
<body>

Welcome <?php echo $_GET["name"]; ?><br>
Your email address is: <?php echo $_GET["email"]; ?>

</body>
</html>

GET vs. POST

  • GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, …))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。
  • GET 和 POST 被视作 $GET 和 $POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 – 无需任何特殊代码,您能够从任何函数、类或文件访问它们。
  • $_GET 是通过 URL 参数传递到当前脚本的变量数组。
  • $_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

何时使用 GET?

通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。

GET 可用于发送非敏感的数据。

注释:绝不能使用 GET 来发送密码或其他敏感信息!

何时使用 POST?

通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制

此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。

不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。

提示:开发者偏爱 POST 来发送表单数据。

PHP表单验证

上面的表单使用如下验证规则:

字段验证过则
Name必须包含字母和空格
E-mail必需。必须包含有效的电子邮件地址(包含 @ 和 .)。
website可选。如果选填,则必须包含有效的 URL。
Comment可选。多行输入字段(文本框)。
Gender必需。必须选择一项。

文本字段

name、email 和 website 属于文本输入元素,comment 字段是文本框。HTML 代码是这样的:
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

单选按钮

gender 字段是单选按钮,HTML 代码是这样的:
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

表单元素

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
当提交此表单时,通过 method="post" 发送表单数据。

什么是 $_SERVER[“PHP_SELF”] 变量?

  • $_SERVER[“PHP_SELF”] 是一种超全局变量,它返回当前执行脚本的文件名。
  • 因此,$_SERVER[“PHP_SELF”] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

什么是 htmlspecialchars() 函数?

  • htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。

关于 PHP 表单安全性的重要提示

  • $_SERVER[“PHP_SELF”] 变量能够被黑客利用!
  • 如果您的页面使用了 PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS)。
  • 提示:跨站点脚本(Cross-site scripting,XSS)是一种计算机安全漏洞类型,常见于 Web 应用程序。XSS 能够使攻击者向其他用户浏览的网页中输入客户端脚本。
  • 假设我们的一张名为 “test_form.php” 的页面中有如下表单:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
现在,如果用户进入的是地址栏中正常的 URL:"http://www.example.com/test_form.php",上面的代码会转换为:
<form method="post" action="test_form.php">
到目前,一切正常,不过,如果用户在地址栏中键入了如下 URL:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
在这种情况下,上面的代码会转换为:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
这段代码加入了一段脚本和一个提示命令。并且当此页面加载后,就会执行 JavaScript 代码(用户会看到一个提示框)。这仅仅是一个关于 PHP_SELF 变量如何被利用的简单无害案例。

如果避免 $_SERVER[“PHP_SELF”] 被利用?

通过使用 htmlspecialchars() 函数能够避免 $_SERVER[“PHP_SELF”] 被利用

表单代码是这样的:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出:
<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

通过 PHP 验证表单数据

  • 我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。
  • 在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容:
<script>location.href('http://www.hacked.com')</script>
代码不会执行,因为会被保存为转义代码,就像这样:
&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;

在用户提交该表单时,我们还要做两件事:

  • (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
  • (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)

接下来我们创建一个检查函数(相比一遍遍地写代码,这样效率更好)。

我们把函数命名为 test_input()。

现在,我们能够通过 test_input() 函数检查每个 $_POST 变量,脚本是这样的:

<!DOCTYPE HTML> 
<html>
<head>
</head>
<body> 

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $name = test_input($_POST["name"]);
   $email = test_input($_POST["email"]);
   $website = test_input($_POST["website"]);
   $comment = test_input($_POST["comment"]);
   $gender = test_input($_POST["gender"]);
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>

<h2>PHP 验证实例</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   姓名:<input type="text" name="name">
   <br><br>
   电邮:<input type="text" name="email">
   <br><br>
   网址:<input type="text" name="website">
   <br><br>
   评论:<textarea name="comment" rows="5" cols="40">

请注意在脚本开头,我们检查了表单是否使用 $_SERVER[“REQUEST_METHOD”] 进行提交。如果 REQUEST_METHOD 是 POST,那么表单已被提交 – 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单。

PHP 表单验证 – 必填字段

在下面的代码中我们增加了一些新变量:$nameErr、$emailErr、$genderErr 以及 $websiteErr。这些错误变量会保存被请求字段的错误消息。我们还为每个 $POST 变量添加了一个 if else 语句。这条语句检查 $POST 变量是否为空(通过 PHP empty() 函数)。如果为空,则错误消息会存储于不同的错误变量中。如果不为空,则通过 test_input() 函数发送用户输入数据:

<?php
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
  }

  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>

PHP – 显示错误消息

<?php
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
     $nameErr = "姓名是必填的";
   } else {
     $name = test_input($_POST["name"]);
   }
   
   if (empty($_POST["email"])) {
     $emailErr = "电邮是必填的";
   } else {
     $email = test_input($_POST["email"]);
   }
     
   if (empty($_POST["website"])) {
     $website = "";
   } else {
     $website = test_input($_POST["website"]);
   }

   if (empty($_POST["comment"])) {
     $comment = "";
   } else {
     $comment = test_input($_POST["comment"]);
   }

   if (empty($_POST["gender"])) {
     $genderErr = "性别是必选的";
   } else {
     $gender = test_input($_POST["gender"]);
   }
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>

<h2>PHP 验证实例</h2>
<p><span class="error">* 必需的字段</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   姓名:<input type="text" name="name">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   电邮:<input type="text" name="email">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址:<input type="text" name="website">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   评论:<textarea name="comment" rows="5" cols="40">

PHP 表单验证 – 验证 E-mail 和 URL

PHP – 验证名字

以下代码展示的简单方法检查 name 字段是否包含字母和空格。如果 name 字段无效,则存储一条错误消息:
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
  $nameErr = "只允许字母和空格!"; 
}
注释:preg_match() 函数检索字符串的模式,如果模式存在则返回 true,否则返回 false。

PHP – 验证 E-mail

以下代码展示的简单方法检查 e-mail 地址语法是否有效。如果无效则存储一条错误消息:
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
  $emailErr = "无效的 email 格式!"; 
}

PHP – 验证 URL

以下代码展示的方法检查 URL 地址语法是否有效(这条正则表达式同时允许 URL 中的斜杠)。如果 URL 地址语法无效,则存储一条错误消息:
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
=~_|]/i",$website)) {
  $websiteErr = "无效的 URL"; 
}

PHP – 验证 Name、E-mail、以及 URL

<!DOCTYPE HTML> 
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 

<?php
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
     $nameErr = "姓名是必填的";
   } else {
     $name = test_input($_POST["name"]);
     // 检查姓名是否包含字母和空白字符
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "只允许字母和空格"; 
     }
   }
   
   if (empty($_POST["email"])) {
     $emailErr = "电邮是必填的";
   } else {
     $email = test_input($_POST["email"]);
     // 检查电子邮件地址语法是否有效
     if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
       $emailErr = "无效的 email 格式"; 
     }
   }
     
   if (empty($_POST["website"])) {
     $website = "";
   } else {
     $website = test_input($_POST["website"]);
     // 检查 URL 地址语法是否有效(正则表达式也允许 URL 中的斜杠)
     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
       $websiteErr = "无效的 URL"; 
     }
   }

   if (empty($_POST["comment"])) {
     $comment = "";
   } else {
     $comment = test_input($_POST["comment"]);
   }

   if (empty($_POST["gender"])) {
     $genderErr = "性别是必选的";
   } else {
     $gender = test_input($_POST["gender"]);
   }
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>

<h2>PHP 验证实例</h2>
<p><span class="error">* 必需的字段</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   姓名:<input type="text" name="name">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   电邮:<input type="text" name="email">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址:<input type="text" name="website">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   评论:<textarea name="comment" rows="5" cols="40">

PHP – 完整的表单实例

<!DOCTYPE HTML> 
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 

<?php
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
     $nameErr = "姓名是必填的";
   } else {
     $name = test_input($_POST["name"]);
     // 检查姓名是否包含字母和空白字符
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "只允许字母和空格"; 
     }
   }
   
   if (empty($_POST["email"])) {
     $emailErr = "电邮是必填的";
   } else {
     $email = test_input($_POST["email"]);
     // 检查电子邮件地址语法是否有效
     if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
       $emailErr = "无效的 email 格式"; 
     }
   }
     
   if (empty($_POST["website"])) {
     $website = "";
   } else {
     $website = test_input($_POST["website"]);
     // 检查 URL 地址语法是否有效(正则表达式也允许 URL 中的斜杠)
     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
       $websiteErr = "无效的 URL"; 
     }
   }

   if (empty($_POST["comment"])) {
     $comment = "";
   } else {
     $comment = test_input($_POST["comment"]);
   }

   if (empty($_POST["gender"])) {
     $genderErr = "性别是必选的";
   } else {
     $gender = test_input($_POST["gender"]);
   }
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>

<h2>PHP 验证实例</h2>
<p><span class="error">* 必需的字段</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   姓名:<input type="text" name="name">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   电邮:<input type="text" name="email">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址:<input type="text" name="website">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   评论:<textarea name="comment" rows="5" cols="40">

日期函数

用途: 注册时间

登录时间

退出的时间

发帖时间

回帖时间 帖子修改的时间

帖子删除的时间

购买时间下单的时间 。。。。。。

时间戳 1970年1月1日零时零分零秒-现在

所走的秒数 第一-种方式-设置时区 date default t imezome set () ; / / PRC 第二种方式-设置时区( 修改配置文件) php.ini -》date .date. timezone =”UTC” ‘PRC’

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云