一.PHP基础语法概述
1.运行PHP文件
PHP文件的运行,必须放在服务器中,并在浏览器中使用url访问PHP文件,PHP会在服务器执行代码,并将执行结果压平为一个HTML文件返回浏览器,让浏览器展示
所有的PHP文件只能在服务器中运行,我们通过本地服务器localhost或者127.0.0.1进行访问
2.PHP的壳子
PHP文件中写HTML语法,PHP语法嵌套在HTML语法当中,使用壳子:<?php ?>里边写PHP语法
js在HTML中使用:<script></script>
css在HTML中使用:<style></style>
注意:只要存在PHP语法的文件,后缀一定是.PHP,并且一定在服务器中运行访问
3.echo 输出
echo英文是回声的意思:
这是一个关键词,不是函数,所以不能加括号
echo(123);错误的用法
echo 123; 正确的用法
注意 :PHP中语法规定每一条语句后边都必须加分号,不写分号要报错,PHP的字符串与js一样使用单/双引号引起来
PHP中字符串拼接使用".",js中使用+
4.php中的变量
变量不需要定义
命名规范:必须以$开头,其他的与js一样,$之后跟数字、字母、下划线,但是不能以数字开头:
$abc12_2,$_aaa合法
$122asd不合法
大小写敏感:$a与$A是不一样变量
字符串中拼接变量的方法:
1)使用"."拼接
2)直接将变量写进字符串,字符串必须使用双引号
3)在字符串中将变量使用{}包裹起来,但是字符串必须使用双引号
5.PHP的运算符
算数运算符:+-*/%
赋值运算符:= += -= *= /= %=
比较运算符:> < >= <= == === != !==
逻辑运算符:&& || !
短路语法:
c = a && b 如果a为真,那么c=b,不管b是真还是假;如果a为假,那么c=a,b不会执行,返回第一个为假的表达式
c = a || b 如果a为真那么c=a,不执行b,如果a为假,那么c=b,不管b是真是假,返回第一个为真的表达式
三元运算符: ? :
用法基本与js一样一样的
6.控制语句:
for循环,if判断,switch语句,while语句,do while语句,都和js一样
小作业:使用PHp的循环语法找出1-100的质数,输出到页面中
质数:也叫素数,约数只有1和自身,质数只能被1和自身整除,eg:2,3,5,7,11,13,17,19
整理笔记,重敲案例
7.单双引号的区别:
双引号可以包裹变量,
单引号不可以包裹变量,单引号包裹变量直接将变量输出
二.PHP的基本数据类型
js中有五种基本数据类型:
Number,String,Boolean,Null,Undefined
对象类型:
Object,Array,Function
PHP中有八种原始数据类型:四种标量类型,两种复合类型,两种特殊类型
PHP是一种弱引用的脚本语言,不需要声明变量的数据类型,变量的数据类型根据赋值的类型进行确定
1.四种标量
整型:integer
浮点型:float 浮点数:double
布尔型:boolean
字符串:string
使用gettype()方法可以检测数据类型
注意:浮点型会输出double,而不是float
2.PHP中打印输出总结
echo $a; 只能打印四种标量
var_dump(); 在PHP调试过程中比较常用,用于输出变量内容的长度,类型,以及内容
print_r(); 可以打印任何数据类型,但是只能打印内容,不能展示数据类型长度,如果是标量就与echo一样,如果是数组或者对象则会按照一定的规则进行打印
die(); 死亡打印,一旦打印就会终止后边的程序执行,广泛运用于代码调试过程
3.标量检测
整型:is_int();is_integer() 检测是不是整型,是返回真,不是返回假
浮点:is_float();is_double();is_real() 检测是不是浮点型,是返回真,不是返回假
布尔:is_bool(); 检测是不是布尔类型,是返回真,不是返回假
字符串:is_string(); 检测是不是字符串,是返回真,不是返回假
4.两种复合类型:
数组(Array)和对象(Object)
数组有四种声明方式
对象:
对象使用类进行声明
语法:
class Object{
public $name='lisi';
public function fun(){
echo 'hello';
}
}
$o=new Object;
var_dump($o);
var_dump($o->name);
var_dump($o->fun());
5.两种特殊类型:
1) 资源类型(resource)
打开文件,读取内容,写入内容
//打开的是一个数据流
$g=fopen('text.txt','r');
//读取文件内容
$con=fread($g,filesize('text.txt'));
2)NULL
$k=null;
变量没有赋值为空,变量赋值为null时为空,变量被释放时为空 unset()
6.变量操作
1) 判断变量是否被设置,返回Boolean
isset();
2) 释放变量,将变量所在内存清空
unset();
3) 判断变量是否为空,如果为空返回为真,不为空返回假
emoty();
7.变量赋值
传值赋值:
$str='hello';
$s=$str;
传址赋值:&用于获取变量地址
$a=1;
$b=2;
$a=&$b;
echo $a;
$a=3;
echo $b;
8.变量类型的转换 隐式转换: 1.'3'='13'; 1+'3'=4; 整型 1+1.1=2.1 浮点型 强制转换: (int) 强制转为整型 (bool) 强制转为布尔 (string) 强制转为字符串 (float) 强制转为浮点 (array) 强制转为数组 (object) 强制转为对象
三.PHP基础语法:
1.函数
PHP中的函数与js基本一样
但是PHP中没有所谓的构造函数,不能用new,PHP中实例化对象要使用类(class)
注意:函数内部不能使用函数外部的全局变量,如需使用传参数
2.数组
PHP中的数组与js中的数组差距有点大
PHP中定义数组的方式:
1) $arr=array(1,2,3);
2) $arr=[1,2,3];
3) $arr=array('name'=>'lisi','age'=>'23');
4) $arr[1]='hello';
PHP中有两种数组:
索引数组,关联数组
以数字为索引的数组叫做索引数组
以字符串为索引的数组叫做关联数组
PHP数组遍历:
for as
语法:
foreach($arr as $k=>$v){
$k 是键
$v 是对应的值.
}
array_sum():计算数组的总值
array_pop():删除数组最后一个值
array_push():在数组尾部添加一个值
array_shift():删除数组第一个值
array_unshift():在数组头部添加一个值
in_array($v,$arr):判断$v是否存在于$arr数组中
is_array($arr):判断$arr是不是数组
count($arr):获取数组的长度
array_merge($arr1.$arr2,...):合并一个或多个数组
注意:使用一个标准的关联数组能够变为一个标准的json字符串 json_encode()
$arr=array('name'=>'lisi','age'=>23);
json_encode($arr);
'{"name":"lisi","age":"23"}'
3.PHP乱码解决
如果PHP中出现了乱码,那么在PHP中开头的位置加上:header('content-type:text/html;charset=utf-8');统一编码方式(解析代码编码与文件保存编码一致)
4.纯PHP文件书写规范
如果是PHP和HTML文件混合开发,那么PHP的壳子必须完整:<?php ... ?>
如果PHP文件中只有PHP语法,只需要写:<?php 后边的一般不需要写(推荐)
5.输出PHP版本信息
echo phpinfo();
6.PHP注释
// 单行注释
/* */ 多行注释
# 脚本注释
/** */ 文档注释
7.PHP与HTML,js,css混编
混编一定要注意文件是.php文件
四.数据存储
1.文件存储:
写入:
$fp=fopen('message/msg.txt','a+');
fwrite($fp,"name:".$name.",message:".$msg.'|');
fclose($fp);
读取:
$content=fread($fp,filesize('message/msg.txt'));
fclose($fp);
$contents=file_get_contents('message/msg.txt');
$contents=str_replace("|","\",$contents);
r 打开文件为只读。
w 打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。
a 打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。
x 创建新文件为只写。返回 FALSE 和错误,如果文件已存在。
r+ 打开文件为读/写、文件指针在文件开头开始。
w+ 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。
a+ 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。
x+ 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。
五.get与post请求
1.js做一个假的登录检测
2.HTML页面从服务器到浏览器解析的过程
1) 浏览器进行http请求
2) 服务器执行PHP语句
3) 服务器发出http响应(就是将页面返回给浏览器)
4) 浏览器进行html,css,js解析渲染
问题:如果使用PHP进行账号密码验证,那么在浏览中输入的内容如何进入到服务器中去的?
两种方法可以将浏览器参数传到服务器:
1) 使用请求链接后半部分发送get请求 http://www.baidu.com?name=lisi&age=23&sex=man
2) 使用请求头传递参数 post请求
3.get请求
get请求会将参数拼接到请求地址的后边,
eg:http://www.baidu.com?username=lisi&psw=123
注意:这种方式不安全,大小有限制,容易被盗
后台的PHP如何接受参数?
PHP通过超全局变量:$_GET后取前端通过get请求发送的数据参数
$_GET:是一个超全局变量,可以用于接受get请求发送的参数,收到的是一个PHP数组,里边存放的用户发送的所有参数
4.post请求
post请求并不多见,但是比较安全,post请求必须使用表单才能发出,所以ajax发送的post请求都是模拟表单发出的
PHP如何接收post请求数据参数?
$_POST 超全局变量 用于接收前端post请求发送的数据参数,是一个数组
5.form表单
action:表单内容发送的位置,通常提交到PHP文件中。我们叫这些文件为接口文件
method:表单的提交方式,通常是get/post
enctype:上传内容编码方式
默认值:x-www-form-urlencoded
上传文件编码:multipart/form-data
PHP可以通过超全局变量 $-FILES接收前端发送的文件
六.数据库存储
数据库(Data Base) = 数据存储(table) + 数据操作的API
API:应用程序接口(application interface)
数据库操作API就是对数据库数据进行操作的接口(方法)
常见有名的数据库:
MySQL:是一个免费的开元的数据库,后来被Oracle(甲骨文)收购
Oracle:甲骨文,收费的数据库
Sql Server:微软的数据库
我们学习MySQL数据库,安装了xampp就可以集成Apache和MySQL的服务
数据库的可视化工具:sqlyog或者使用xampp中集成的phpmyadmain
1.数据里链接
使用PHP可以连接当前服务器下的数据库,用于读取数据库中的内容以及对数据库进行操作
2.连接数据库的语法
PHP的支持:
MySQL支持的语法:
1)连接数据库
参数1:数据库地址
参数2:用户名
参数3:密码
$conn = mysqli_connect('localhost','root','');
2)选择连接的库
mysql_select_db('1709B');
3)中文编码
mysql_query("SET NAMES UTF8");
4)书写sql语句
$sql = "SELECT * FROM diaocha";
5)执行sql语句
$result = mysql_query($sql);
6)关闭数据库
mysql_close($conn);
MySQLi支持的语法:
1)连接数据库
$conn = mysqli_connect('localhost','root','');
2)选择连接的库
mysqli_select_db($conn,'1709B');
3)中文编码
mysqli_query($conn,"SET NAMES UTF8");
4)书写sql语句
$sql = "SELECT * FROM diaocha";
5)执行sql语句
$result = mysqli_query($conn,$sql);
6)关闭数据库
mysqli_close($conn);
MySQLi读取
1)连接数据库
$conn = mysqli_connect('localhost','root','');
2)选择连接的库
mysqli_select_db($conn,'1709B');
3)中文编码
mysqli_query($conn,"SET NAMES UTF8");
4)书写sql语句
$sql = "SELECT * FROM diaocha";
5)执行sql语句
$result = mysqli_query($conn,$sql);
6)解析数据
while($row=mysqli_fetch_array($result)){
mysql_fetch_array这个方法可以将数据集中的内容读取,while循环一次就会读取一个,每读取一个,$result中就会少一个,直到$result变成空的
}
7)关闭数据库
mysqli_close($conn);
3.phpMyAdmain中新建数据库
数据库名称+编码方式utf8_unicode_ci
新建数据库表 + 字段数量
设置字段 + 字段类型(整型,浮点,字符串......) + 字段长度
一个空的数据库就建好了
七.数据库的操作
数据库增删改查
1.数据库插入数据
1) 插入所有信息
INSERT INTO student VALUES(1,'程思琪',19,'女','1657924514','北京市房山区窦店镇中国信息大学','15001290514','我是谁,哈哈哈')
插入一整条数据,包含了所有的值
2) 部分值插入
INSERT INTO student (id,name,description) VALUES (5,'小二','我是小二');
插入提到的部分值,其他值为空
2.删除数据
DELETE FROM student WHERE id = 1
删除id=1的这条数据
3.更新数据(改)
1) 修改一个字段
UPDATE student set age = 20 WHERE id=5;
将student表中的id为5的这条数据中的age改为20
修改部分值
UPDATE student set sex='女',qq='1235698741',address='山西' WHERE id=3;
2) 条件更新数据
UPDATE student set description='哈哈哈' WHERE age>0 and age<15;
4.查询数据
1. select * from table
通过*查询所有字段但是不能规定字段的顺序,数据量特别大时查询效率太低,所以建议书写详细的条件查询
2.where
添加条件,删除、查询、更新
eg:
select * from student where age>30;查询年龄大于30岁的所有人
3.and
逻辑与关系,在where条件后边添加与逻辑
eg:
select * from student where age>30 ang age<35;查询年龄在30-35之间的人
4.or
逻辑或
eg:
select * from student where age>30 or age<20;查询年龄大于30或小于20的人
5.distinct
过滤重复记录,返回唯一结果
eg:
select distinct name from student;过滤重复的名字返回唯一的名字
注意:获取的只有name,其他属性不存在,会将重复的名字变成一个
6.is null
判断字段是否不为空
eg:
select * from student where phone is null;
注意:该字段设置属性默认值为空时,如果该字段不设置内容,就是null,否则即使不设置内容,系统也不会认为是null
7.is not null
判断字段是否为空
eg:
select * from student where phone is not null;
8.if(表达式,v1,v2)
当表达式为真返回v1,为假返回v2;
eg:
select name,age,if(age>20,'大','小') from student;
会有一个新的字段:if(age>20,'大','小'):"大/小"
9.order by
对查询内容进行排序
10.desc
对查询内容进行降序排列
eg:
select * from student order by age desc;查找表中所有内容根据年龄进行降序排列
11.asc
对查询内容进行升序排列
eg:
select * from student order by age asc;查找表中所有内容根据年龄进行升序排列
12.rand()
随机取值
eg:
select * from student order by rand() limit 4;查询所有数据随机取出4条
13.limit n
限制取值n条
eg:
select * from student order by age desc limit 4;按照降序取出前4条数据
14.limit m,n
取出从m开始的n条数据,m是从0开始
eg:
select * from student order by age desc limit 0,3;按照降序从0开始取取出3条数据,用于做分页是非常方便的
15.between v1 and v2
在v1与v2之间进行检索内容
eg:
select * from student where age between 22 and 60;在年龄介于22--60之间查找数据
16.not between v1 and v2
检索不在v1--v2之间的内容
eg:
select * from student where age not between 22 and 60;在年龄22--60之外查找数据
17.in(v1,v2,v3......)
检索索引值是否与小括号中的值相等
eg:
select * from student where age in(10,20,33);查询所有数据找出年龄为10,20,33的人
age=10 or age=20 or age=33
18.not in(v1,v2,v3......)
检索索引值不等于小括号内的值
eg:
select * from student where age not in(10,20,33);查询所有数据找出年龄为10,20,33的人
age!=10 and age!=20 and age!=33
19.like
匹配字符串
eg:
select * from student where name like "李%";以李开头的名字被选中
eg:
select * from student where name like "%李%";包含李的名字被选中
eg:
select * from student where name like "%李";以李结尾的名字被选中
20.not like
like相反的意义
21.count(*)
eg:
select count(*) from student; 统计一共获取多少条数据
22.max()
eg:
select max(age) form student;获取表中年龄最大的人的年龄值
23.min()
eg:
select min(age) form student;获取表中年龄最小的人的年龄值
24.sum()
eg:
select sum(age) form student;获取表中所有人的年龄和
25.avg()
eg:
select avg(age) from student;获取表中所有人的平均年龄
八.文件上传
1. 文件的接收,超全局变量$_FILES
$_FILES 是一个数组
1) $_FILES['fileName']['name']
客户端上传文件原名
2) $_FILES['fileName'][type]
文件的MIME类型,需要浏览器提供该信息的支持,
eg:image/gif,text/html
3) $_FILES['fileName']['size]
文件大小,单位是字节(B)
4) $_FILES['fileName][tmp_name]
文件被上传后,在服务器中临时存储的位置,一般是系统默认的位置,当然可以在php.ini这个PHP配置文件中,upload_tmp_dir这个属性进行设置临时存储的位置
5) $_FILES['fileName]['error']
0: 没有错误,上传成功UPLOAD_ERR_OK
1: 上传文件超过PHP.ini中upload_max_filesize设置的大小限制UPLOAD_ERR_INI_SIZE
2: 上传的文件超过form表单中的MAX_FILE_SIZE指定的大小限制UPLOAD_ERR_FORM_SIZE
3: 文件上传的一部分 UPLOAD_ERR_PARTIAL
4: 没有文件被上传 UPLOAD_ERR_NO_FILE
5: 上传文件大小为0
2. form发送文件
form表单使用input type='file' 文件域进行文件上传,但是form表单必须设置enctype='multipart/form-data' 用来设置表单的MIME编码,可用于上传文件,form表单默认编码是:enctype='application/x-www-form-urlencoded'
九.PHP获取时间
设置时区: data_default_timezone_set('PRC');
获取时区: data_default_timezone_get();
PRC: Prople’s Republic of China 中华人民共和国
Asia/chongqing,Asia/shanghai,
1) 获取当前的时间戳
时间戳:1970年1月1日0:0:0到当前时间的总秒数
time() 获取服务器时间戳 ,秒
2) 时间函数
date() 获取当前日期
语法:
date('y-m-d h:i:s') 获取固定格式的当前时间
date('y-m-d h:i:s','1726876789') 按照固定格式获取某个时间戳代表的时间
时间参数:
a : am || pm
A : AM || PM
d : 几日,2位数字,不足两位补0,eg:01-31
D : 星期几,三个字母,eg:Fri
F : 月份,英文全名,eg:January
h : 12小时制的小时,01-12
H : 24时小时,00-23
g : 12小时制的小时,不足两位不补0,1-12
G : 24时小时,不足两位不补0,0-23
i : 分钟,00-59
j : 几日,2位数字。不足两位不补0,0-31
l : 星期几,英文全称,eg:Friday
m : 月份,2位,不足2位补0,01-12
M : 月份,三个英文字母,Jan,May
n : 月份,2位,不足两位不补0,1-12
s : 秒,00-59
S : 字尾加英文序数,2位英文字母,th,nd
t : 月份的天数,28,30,31
U : 总秒数
w : 数值型的星期几,eg:0-6(星期日-星期六)
Y : 年,四位,2018
y : 年,两位,18
z : 今天是一年中的第几天,0-365
3) strtotime()
strtotimr('2018-6-1 12:12:12') 将这个时间转为时间戳
4) microtime()
microtime() 获取微秒数和时间戳
microtime(true) 获取微秒数的浮点类型
1s=1000ms 1ms=1000μm 1s=1000000μm
5) getdate() 获取时间数组
十.session
1.cookie
后台设置cookie:
setCookie(name,value,expire,path)
参数1:cookie名称
参数2:cookie内容
参数3:过期时间
参数4:cookie在服务器的有效地址
后台读取cookie:
$_COOKIE超全局变量
前端获取cookie:
document.cookie
cookie是前端浏览器的一个存储机制
2.session
session是后台服务器的存储机制
session会话原理:
每一个服务器访问者都有一个唯一的id(UID),并且基于这个UID来存储变量,UID存储在cookie中,或者可以通过url进行传输
3.session用法:
1) 开启会话:
session_start();
2) 设置和读取session
设置:$_SESSION['name'='lisi'];
读取:$name=$_SESSION['name'];
3) 获取sessionID
session_id();
4) 释放单个session
unset($_SESSION['age'])
5) 释放多个session
$_SESSION=array();
6) 彻底释放当前session
session_unset();
释放session的标准方法,释放完还可以继续添加内容
7) 彻底销毁session
先销毁内容:session_unset();
再去销毁session以及sessionID:session_destory();
如果向再次在session中存取内容,需要重新开启session,session_start();
4.session与cookie的区别与应用
1) session是存放在服务器的但是cookie是存放在浏览器,
2) cookie不安全,别人可以分析存在本地发cookie而读取你的隐私,考虑安全方面,我们选择session
3) session会在一定时间内保存在服务器,当访问两增多时,会占用大量的服务器内容,影响服务器性能,考虑减轻服务器负担,我们选择cookie
4) cookie存储量不超过4K,很多浏览器限制保存20个COOKIE,考虑个数,我们选择session