重点回顾
##1.php标记
<?php
1.写在这个结构内的代码才会以php语法解析
2.写在这个结构外的代码会原样返回
?>
下面提到的内容,如果要书写在html结构中,需要用php代码包裹闭合
字符串的拼接:在JavaScript中字符串的拼接是 + ,但是在PHP中使用 . 进行拼接
isset()判断变量是否存在,判断变量是否定义了,同时它还可以判断变量的值是否为null,
输出结果的细节:在php中如果输出true,那么结果为1,如果输出false,输出结果为null
unset()删除 1.如果删除一个变量,那么变量的值会置为null
2.可以同时删除多个变量
3.如果在函数中删除全局变量,那么并不会真正的将全局变量删除(以后再说)
empty()空 判断变量是否为空值,为空的值有:"" 0 “0”,null,false,array().如果值为以上中的某一个,则返回值
获取字符串长度: strlen():可以获取指定字符串的长度
mb_strlen($str);也可以获取字符串的长度,但是这个有版本问题,只有5.6以上可以正确获取字符串的长度
date(Y-m-d H:i:s) 获取输出的时间
默认情况下这个函数获取的是格林威志时间,如果想获取中国时区的时间,就需要进行配置文件的修改
php-ini >date.timezone = PRC|Asia/shanghai|Asia/chongqin
2输出内容的方式
echo:输出多个字符串
print:输出一个字符串值
print_r:可以输出复杂数据类型,如数组,以键值对的形式输出
var_dump:可以输出复杂数据类型,是一个函数,必须加括号,如数组,以键值对的形式输出,还可以输出数据的长度
3.字符串
输出对应的转义符,使用对应的单双号
单引号 ‘’:不能解析变量,会将变量当成普通字符串处理 \ ’
双引号 “”:能解析变量 " \t \n \r $
4.数组:
创建方式:三种方式
$arr = array()
$arr = []
$arr[] = value; //如果数组不存在则可以自动的创建一个数组,并将当前值添加到数组中,
如果存在则添加数据到数组
数组的类型:
索引数组:不人为设置key $arr = array(1,2,3,4);
关联数组:人为设置key和value $arr = array("name"=>"jack")
混合数组:$arr= array(1,2,3,"name"=>"jack",4)
二维数组:数据的值本身又是一个数组
$arr = array(
array(
"name"=>"jack",
"age"=>20
),
array()
);
数组遍历:for | foreach
for($i =0;$i<count(数组);$i++){}
foreach(需要遍历的数组对象 as $key => $value){}
###5.变量作用域:函数内部默认不能使用函数外部所声明的成员,如果想使用,则:
1.使用global关键字
$num = 100;
function cal(){
// 如果想在函数内部使用函数外部声明的全局变量,那么就可以使用关键字:global
// global就是用来添加对外部成员的引用
// 注意点:不能在引用的同时对变量赋值,如果想赋值,则需要换下一行赋值
global $num;
// 如果在函数内部修改了全局变量的值,那么这个修改也会影响后面的使用
$num = 10;
$sum =0;
for($i =0;$i<=$num;$i++){
// $sum = $sum + $i;
$sum += $i;
}
return $sum;
}
2.使用超全局变量$GLOBALS 超全局变量
###6.常量的定义和使用:
define(名称,值,false)
js中设置常量:const
###7.载入其它文件:文件包含
include:如果载入失败,不会报错,后续代码会继续执行,它可以重复载入
include_once:如果载入失败,不会报错,后续代码会继续执行,它不会重复载入,只会真正的载入一次
require:如果载入失败,会报错,后续代码不会继续执行,它可以重复载入
require_once:如果载入失败,会报错,后续代码不会继续执行,它不可以重复载入
8.常用API
文件操作:
file_get_contents:可以读取文件内容并返回
file_put_contents(文件路径,写入的内容,FILE_APPEND):可以将指定的字符串内容写入到文件,其中第三个参数FILE_APPEND可以实现文件内容的追加
###9.html混编
1.在<?php 在这个结构内部只能写符合php语法的代码 ?>
2.在<?php ?>结构的代码会原样输出
3.混编实现方式
1.<?php echo '
2.
<?php if(){ ?>
<php }?>
将字符串分割:explode(“分隔符”,分割的字符串);
get获取和post获取方式
get方式:使用 $_GET 获取用户以get方式传递的参数,他是一个关联数组显示在地址栏 安全性低,存储小,在不同浏览器一般大小为4kb
如果想提交表单的数据,则必须为表单元素添加name属性
post方式:使用 $_POST获取用户以post方式传递的参数
// 判断:用户是否真正的发送的post请求,也就意味着我们得判断当前请求是否是post,如果是则进行处理,否则就跳过
// print_r($_SERVER);
if($_SERVER['REQUEST_METHOD'] === 'POST'){}
同样我们也可以使用
if(!empty($_FILES)){} 判断用户是否有相应的提交
$_SERVER里面有许多属性
form表单的action属性是书写需要提交的地址,一般就是本网页,
$_SERVER["PHP_SELF"]是自动获取action需要提交的目标地址
如果是本网页可以不写,methed是书写以什么方式提交给用户数据
-
单选框 复选框的问题
他们同样也要必须写name属性,
复选框:如果想同时选中多个复选框,则可以给复选框的name属性后加中括号[],后台获得是一个数组 -
文件或者图片上传
<input type='file' name='myfile' >
如果想传入多个文件,需要给input表单添加**multiple**属性,但是此时需要给name值后面添加中括号 [],这样才能保证后台能收到数据而不被后面传入的数据覆盖
在php中上传文件的方式必须是POST
在上传文件的时候必须要在表单里添加enctype属性 --- 他有两个属性值
application/x-www-form-urlencoded:将参数编码为键值对的格式,这是标准的编码格式(UTF-8 GBK GB2312),它用来处理字符串,它是默认的编码格式
multipart/form-data:它是专门用来处理特殊数据的,如文件
我们在form表单中用multipart/form-data
**在php中,file上传的文件都存储在 $_FILES中,**
Array
(
[myfile] => Array
(
[name] => 跨域攻击.png:源文件的名称
[type] => image/png:源文件的类型
[tmp_name] => C:\Windows\phpE412.tmp:这是文件在服务器的临时路径
[error] => 0:错误信息,0代表没有错误
[size] => 256436:文件的大小
)
)
```// 1.判断用户是否提交
if(!empty($_FILES)){
print_r($_FILES);
// echo $_FILES["myfile"]["tmp_name"];
// 判断文件类型是否满足需要
$type = $_FILES["myfile"]["type"];
// strpos(源字符串,搜索字符串):可以获取指定字符串在源字符串中第一次出现的索引值,索引从0开始
// if(strpos($type,"image/") === 0){
$filename = $_FILES["myfile"]["name"];
// 获取当前文件的扩展名 strrchr(源字符串,指定搜索的字符)
$extension = strrchr($filename,".");
// 生成一个随机的文件名称:获取到一个唯一值
$myname = time().rand(1000,9999).$extension;
move_uploaded_file($_FILES["myfile"]["tmp_name"],"./upload/".$myname);
// }else{
// echo '你选择不是图片';
// }
}
其中strrchr($filename,'.')是获取文件的扩展名 原理是从后面找找到 . 为止返回找的内容
$myname = time().rand(1000,9999).$extension;是为了防止文件名冲突被覆盖解决办法
move_uploaded_file($_FILES["myfile"]["tmp_name"],"./upload/".$myname); 这句代码是把图片文件从临时存储位置放到永久存储位置,防止被服务器清除
if(strpos($type,"image/") === 0){} 这句代码的意思是判断传入的文件是否是图片
原理是从头往后走,当遇到image并且走完 如果返回值为 0 ,说明image前面没有任何别的字符,此文件就是图片.
为了是用户体验更好 使用户填写了正确的用户名或者密码之后让文本框保持,使用下面的代码更加友好
` 姓名:<input type="text" name="username" value="<?php if(isset($username)) echo $_POST["username"] ?>">``
MYSQL数据库操作
有两种方式可以进行数据库的操作:
一:命令行(了解)操作比较繁琐,需要记忆大量的命令
二:数据库可视化工具 – Navicat for MySQL,可以进行数据库的增删改查操作
-
数据库查询操作
-
– 查询语句的语法:select * |字段列表 from 表列表 where 条件 查询可以返回一个结果表(表)
– *代表当前表的所有字段
– 1.查询mybase中的所有数据 选中某行点击运行旁边的倒三角进行运行
select * from mybase
– 2.查询mybase中所有的id和姓名
select id,name from mybase
– 3.带条件的查新
select * from mybase where id =3
– 4.创建多条件查询 not and or ==> 相当于js中的 ! && ||
select * from mybase where age<20 and gender =0
数据库增加操作
– 增加数据
– 增加语句的语法:insert [into] 表名[(字段1,字段2,…)] values(值1,值2…)
– 1136 - Column count doesn’t match value count at row 1 如果表名后没有指定字段那么必须设置对应的数量的值
insert into mybase values(5,‘andy’,30,1)
– 如果有标识列,那么标识列一般可以给null值,如果给null,系统会自动生成
insert into mybase values(null,‘andy’,35,0)
– 指定需要添加数据的字段
insert into mybase(name,age,gender) values(‘andy’,25,1)
– 对于可以为null的字段可以不赋值
insert into mybase(name) value(‘bay’)
– 非空字段需要赋值,否则系统也不能自动为其生成默认值 – 建议,非空字段一定要赋值
insert into mybase(age,gender) value(34,1)
数据库修改和删除操作:
– 修改语句的语法:update 表名 set 字段1 = 值1,字段2=值2… where 条件
– 修改时一定要注意条件,很重要
update mybase set age = age +1 – 注意条件
– 多条件修改
update mybase set age =age +10 where id =5 or id=4
update mybase set age = age+5,gender=0 where id=5
– 删除语句的语法:delete [from] 表名 where 条件 同样注意删除条件 因为删除不可逆,除非备份
delete from mybase where id=7
– 多条件删除
delete from mybase where id in(4,5)
常见的数据库函数:
– 常见的数学函数 – 统计
– count(): 可以查询满足条件的记录数,无法对null值进行计算,会无视null值,推荐使用*
select count(*) FROM mybase
– 通过字段查询统计
select count(id) from mybase
– MAX(expr):获取最大值 MIN(expr):获取最小值
select MAX(age) from mybase
select MIN(age) from mybase
– 如果查询的是字符串 它会根据解码进行排序
select MAX(name) from mybase
select MIN(name) from mybase
– avg :获取平均值,他的参数一般来说是数值
select avg(age) FROM mybase
– 如果查询的是字符串,系统会默认转换,但是无法转换会返回0
select AVG(name) FROM mybase
– order by:排序
– select * | 字段列表 from 表列表 where order by 排序字段列表 asc(升序是默认的)desc(降序)
select * from mybase order by id desc
select * from mybase order BY name
select * from mybase order by gender,age
– limit : 获取指定范围的数据
– limit 后只有一个参数的时候:相当于获取指定的前n条记录
select * from mybase limit 3
– 获取后三条数据,和order by 配合使用 但是order by 要放在limit前面,如果放在后面会报错的
select * from mybase order by id desc limit 3
– limit后也可以跟两个参数 limit n(偏移量,从0开始),m(获取的记录数)
SELECT * from mybase limit 2,3 – 从偏移量2开始往下去3条数据
– 另外一种写法
select * from mybase limit 3 offset 2 – offset:偏移量
– 可以通过这个写法进行分页
– 下面是分页制作
int pageSize=10;
int pageCount=1;
SELECT * FROM mybase LIMIT pageSize OFFSET (pageCount-1) * pageSize
SELECT * FROM mybase LIMIT pageSize OFFSET (pageCount-1) * pageSize
SELECT * FROM mybase LIMIT pageSize OFFSET (pageCount-1) * pageSize
数据库多表查询操作
– 查询数据
select * from student
select * from class
– 使用from where 可以实现多表查询
select * from student,class where student.cid = class.classid
select studentID,studentName,age,gender,className FROM student,class WHERE student.cid = class
.classid
SELECT * from student join class on student.cid = class.classid
– left join :他可以获取左表中的所有数据,如果建立关联的字段在右表中没有存在,那么右表中的相应字段的数据默认为null
select * from student left join class ON student.cid = class.classid
– right join :他可以获取右表中的所有数据,如果建立关联的字段在左表中没有存在,那么左表中的相应字段的数据默认为null
select * from student right join class ON student.cid = class.classid