URL
协议名称://域名:端口/文件目录(文件名称)?key=value&key2=value2
PHP 标记
语法:<?php 内容 ?>
输出内容方式
1.echo
注:1.echo可以输出字符串,它可以同时输出多个字符串,以,分隔。
2.print
注:1.它也可以输出字符串,它只能输出一个值。
3.print_r()
注:1.更多的用来输出复杂类型:它可以输出复杂数据的key和值。
4.var_dump()
注:1.可以输出复杂类型,它可以输出复杂类型数据的key和value,同时还可以获取value的长度。
与 HTML 混编
普通嵌入
语句混编
注释
单行注释
多行注释
变量
声明变量
语法:$变量名=值;
注:1.如果变量声明没有赋值,那么这个值默认为null。
补充与变量相关的函数
1. isset()
作用:判断变量是否存在,判断变量是否定义了,同时它还可以判断变量的值是否为null。
注:1.输出结果的细节:在php中如果输出true,那么结果为1,如果输出false,输出结果为null。
2.如果存在,则返回true(1),不存在则返回false(空)。
2.empty()
作用:判断变量是否为空值,为空的值有:"" 0 "0",null,false,array()
注:如果值为空,那么返回true(1)。
3. 删除变量unset()
作用:删除变量。
注:1.如果删除一个变量,那么变量的值会置为null。
2.可以同时删除多个变量。
3.如果在函数中删除全局变量,那么并不会真正的将全局变量删除。
数据类型
基本数据类型
包含:string(字符串) integer(整型) float(浮点型) boolean(布尔型)
复合数据类型
包含: array(数组) object(对象)
特殊数据类型
包含:null(空) 资源
判断数据类型
1.is_string():判断当前变量是否是字符串类型
2.is_bool():判断当前变量是否是布尔类型
3.is_int():判断当前变量是否是整形类型
4.is_float():判断当前变量是否是浮点类型
5.is_array():判断当前变量是否是数组类型
6.is_object():判断当前变量是否是对象类型
7.is_numeric:判断当前变量是否为数值类型
8.is_null:判断当前变量是否为空
9.is_callable:判断是否为函数
单引号字符串
注:1. 它不能解析变量,如果在''中包含的变量,变量会被当成普通字符串原样输出。
2.它支持转义,如\\ \'。
双引号字符串
作用:""中可以来解析变量。
注:1.如果在变量名后面紧接着其它的合法字符(中文,a-z A-Z 0-9 _),那么系统会将整个变量及后面的字符串当成一个变量进行解析。
2.如果需要在这种情况下正确的解析变量,可以将变量包含在{}中。
3.支持的转义字符:\" \\ \n \t \$ \r。
数组
索引数组
创建方式:1.array(添加数组的成员,成员类型不作要求);
例: $arr = array(1,2,3,true,"abc");
2.$变量名=[数组成员]
例: $arr = [1,2,3,true,"abc"];
3.$变量名[ ]=值;
注:如果变量不存在则自动创建一个数组,并将当前值添加到数组中,如果存在则添加数据到数组。
通过索引获取数组中的成员
语法:echo $变量名[索引];
例:echo $arr[3];
遍历数组(不常用)
关联数组
语法:array($key=>$value,$key=>$value...);
注:1.以键值对的方式来描述数据,类似于js中的对象 {key:value,key:value...}
获取关联数组中的成员
语法:echo $变量名["属性名"];
in_array判断数组是否存在某个值
语法:in_array("需要判断的值",变量名)
遍历关联数组
完整语法: foreach(数组对象 as 键 => 值){ }
简洁语法: foreach(数组对象 as 值){ }
创建数组总结
数据类型转换
字符串连接符
语法:用‘.’拼接
例:echo '我的名字叫'.$name;
运算符
指令式if
指令式for
函数
注:1.如果想在函数内部使用函数外部声明的全局变量,那么就可以使用关键字:global。
2.不能在引用的同时对变量赋值,如果想赋值,则需要换下一行赋值。
3.如果在函数内部修改了全局变量的值,那么这个修改也会影响后面的使用。
global关键字
1.如果想在函数内部使用函数外部声明的全局变量,那么就可以使用关键字:global。
超全局变量
1.$GLOBALS — 引用全局作用域中可用的全部变量
注:1.无下划线。
2.$_SERVER — 获取服务端相关信息
3.$_REQUEST — 获取提交参数
4.$_POST — 获取 POST 提交参数
5.$_GET — 获取 GET 提交参数
6.$_FILES — 获取上传文件
7.$_ENV — 操作环境变量
8.$_COOKIE — 操作 Cookie
9.$_SESSION — 操作 Session
定义常量
语法:define(常量名称,常量值,标记是否对大小写敏感false)
例: define("PI",3.14,true);
注:1.第一个参数是常量的名称,建议采用全大写字母命名,多个单词下划线分隔。
2.第二个参数是常量中存放的数据。
3.第三个参数是常量名称是否区不分大小写,默认 false ,表示区分大小写
4.false代表对大小写敏感,true代表不区分大小写。
5.第三个值可省略。
使用常量
魔术常量的使用
概念:魔术常量的意思是指这个常量值会根据不同的使用场合返回不同的值。
载入其他文件:文件包含
语法:例:include '路径';
例: include './common.php';
1.include
注:1.如果文件载入失败,也不会影响后续代码的执行 。
2.如果重复载入文件那么被载入的文件的代码会真正的重复执行。
2.include_once
注:1.如果文件载入失败,也不会影响后续代码的执行。
2.如果重复载入文件,最终也只会载入一次。
3. require
注:1.如果文件载入失败,那么后续不再执行。
2.如果重复载入文件那么被载入的文件的代码会真正的重复执行。
4. require_once
注;1.如果文件载入失败,那么后续不再执行。
2.如果重复载入文件,最终也只会载入一次。
使用层面:1.include 一般用于载入公共文件,这个文件的存在与否不能影响程序后面的运行。
2.require 用于载入不可缺失的文件。
3.至于是否采用一次载入(once)这种方式取决于被载入的文件。
常用API
获取字符串长度
1.strlen($变量名)
作用:获取一个字符的字节长度。
2.mb_strlen($变量名,'utf-8');
作用:获取一个字符串的字符个数。
获取数组长度count()
语法: $变量名1=count($要获取长度的变量名);
拆分字符串explode
语法:explode(''分隔字符'',要拆分的变量(字符));
作用:可以拆分指定的字符串,并将拆分的结构存储到数组并返回。
注:1.分隔字符用双引号引起来。
获取时间
时间戳:time()
注:1.从 Unix 纪元(格林威治时间 1970-01-01 00:00:00)到当前时间的秒数。
格式化日期:date()
strtotime()
strpos — 查找字符串首次出现的位置
语法:strpos(源字符串,"要查找的字符")
strrchr — 查找指定字符在字符串中的最后一次出现
语法:strrchr(源字符串,"要开始截取的字符")
注:1.该函数返回 字符串中的一部分,这部分以要查找的字符的最后出现位置开始(包含自己),直到末尾。
2.返回从截取的字符串后的所有字符。
strstr — 查找字符串的首次出现
语法:strchr(源字符串,"要开始截取的字符")
注:1.返回从截取的字符串后的所有字符。
rand — 产生一个随机整数
语法:rand(起始数字,结束数字)
例:rand(1000,9999)
trim — 去除字符串首尾处的空白字符(或者其他字符)
语法:trim(源字符串,"要去除的字符")
注:1.不写第二个值代表去除空格。
2.可以去除的包含\t\n\r\0\x0B等。
header() 函数向客户端发送原始的 HTTP 报头
语法:header(string,replace,http_response_code)
例: header('Location:./data.php'); //强制让页面跳转到data.php
注:1.string,必需。规定要发送的报头字符串(Location)。
2.http_response_code,可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)
json_decode — 对 JSON 格式的字符串进行解码
语法:json_decode($json);
作用:一个 JSON 格式的字符串并且把它转换为 PHP 变量
json_encode — 对变量进行 JSON 编码
语法:json_encode(变量)
作用:1.将php变量转换为json格式
implode — 将一个一维数组的值转化为字符串
语法:implode(数组名,"要分隔的字符");
uniqid — 随机生成一个唯一ID
注:1.获取一个带前缀、基于当前时间微秒数的唯一ID。
die() 退出当前脚本
语法:die()
作用:die() 函数输出一条消息,并退出当前脚本。
注:1.如果括号里是字符串,则该函数会在退出前输出字符串。
文件操作
1.读取文件file_get_contents
语法:file_get_contents("文件路径")
作用:读取文件内容,如果读取成功,就会返回一个字符串类型的值(文件内容),如果读取失败,就会返回false。
注:1.通常只用来获取文本内容,如果有图片内容那么需要使用header方法。
2.写入文件file_put_contents
语法:file_put_contents("文件路径",需要写入的内容,FILE_APPEND )
作用:将指定的内容写入到文件,同时返回当前成功写入的字符的数量
注:1.FILE_APPEND 表示追加写入,如果不写那么会覆盖掉之前的内容。
3.读取到的文件解析方式
1.header("Content-Type:text/html"); //默认,文本
2.header("Content-Type:image/jpeg"); //图片
注:1.设置当前页面的返回值的类型是图片格式,意味着后期浏览器接收了返回值之后,会按照图片格式进行解析。
2.直接书写在代码顶部。
GET请求
作用:GET从字面上理解为'获取',通常用于获取服务端的数据。
常用的地方:地址栏访问,src/href,表单,各种搜索框,各种详情页面,大部分超链接。
注:1.可以在地址栏中看到提交的内容。
2.数据长度有限制,因为 URL 地址长度有限(2000个字符)。
判断有没有某个get数据
语法:if( isset($_GET['xxx']) ) { .... }
POST请求
作用:post就是指发送,提交,它可以向指定的资源提交要被处理的数据。
注:1.可以提交任何类型的数据,包括文件。
2.由于界面上看不见,浏览器也不储存,所以更安全。
判断有没有某个post数据
语法:if( isset($_POST['xxx']) ) { .... }
判断有没有post提交过来
语法:if( $_SERVER['REQUEST_METHOD'] ==="POST") { ..... }
表单处理
1.action:表单提交地址(填完了,交给谁)
注:1.如果不填写则代表提交给自己。
2.method:表单以什么方式提交
注:提交方式有get,post。
单选按钮处理
注:1.需要给每一个单选按钮添加一个value。
2.必须添加name属性,属性值一样,最终只会提交选中的哪一项。
复选按钮处理
注:1.需要给每一个复选框添加name和value属性,值不同。
2. 没有设置 value 的 checkbox 选中提交的 value 是 on。
3.设置了 value 的 checkbox 选中提交的是 value 值。
4.如果需要传递所有被选择的复选框的数据,那么可以在name属性值后面添加[],如果添加了[],那么系统会默认收集所有被选择的复选框的值,存储到一个数组中
下拉选择框处理
注:1.设置 value 提交 value,没有设置 value 提交 option标签的文字内容。
表单数据提交总结
文件上传
1.文件上传之后的相关信息都存储在$_FILES中。
2.在php中,上传文件的请求方式必须是post。
修改文件上传大小限制
注:1.修改 php.ini 中的 post_max_size 配置,让服务端可以接受更大的请求体体积。
2.修改 php.ini 中的 upload_max_filesize 配置,让服务端支持更大的单个上传文件。
form表单数据编码enctype
语法:enctype="multipart/form-data"
1. application/x-www-form-urlencoded:将参数编码为键值对的格式,这是标准的编码格式(UTF-8 GBK GB2312),它用来处理字符串,它是默认的编码格式。
2. multipart/form-data:它是专门用来处理特殊数据的,如文件。
注:1.在上传的时候必须在表单设置enctype属性。
$_FILES数组
概念:$_FILES 同样也是一个关联数组,键为表单的 name。
注:error等于0代表上传正确,为1代表上传超过了服务器设置的大小限制,需要手动修改。
1.$_FILES["myFile"]["name"]
注:文件的原始名称。
2.$_FILES["myFile"]["tmp_name"]
注:文件的临时路径,默认为c:/windows/temp(运行窗口—>temp)。没有直接将文件上传至Apache服务器的根目录.。
3.$_FILES["myFile"]["type"] 文件的内容类型。
注:常见的文件类型: image/jpeg,image/png,image/gif,text/html,text/javascript。
4.$_FILES["myFile"]["error"]
注:文件上传的错误代号。0代表没有发生错误。
5.$_FILES["myFile"]["size"]
注:文件大小(单位为byte,字节)
文件上传后存储到服务器
语法:move_upload_file($_FILES[‘键’][‘tmp_name],要存储的地方路径及文件名);
注:1.因为文件上传之后是临时存储,所以需要用此方法内存储到服务器。
empty判断是否有文件上传
语法:if( !empty($_FILES)) {.... }
if(empty($_FILES)||$_FILES['photo']['error'] !=0){ }
限制文件类型
1.为表单元素添加属性accept
语法:accept=" .jpg,.png"
注:1.表示只能上传JPG和png格式的文件。
2.strpos在php中进行限制
语法:if(strpos($type,"image/") === 0){ }
注:1.此方法是判断$_FILES[‘键’][‘type’]属性是否以image/开头的,如果是那么就代表了用户上传的是图片类型,然后才去保存这张图片到服务器,否则提示上传的不是图片。
生成随机文件名称
同时上传多个文件
方法1:给表单添加multiple
注:1.如果使用了multiple上传多个文件,那么必须给表单name属性值添加[ ]。
2.使用这种方式上传文件,$_FILES会生成一个二维数组。
方法2:创建多个上传文件表单
注:1.使用这种方式上传文件,$_FILES会生成一个二维数组。
2.必须给表单name属性值添加[ ]。
上传多个文件时文件保存方式
Cookie、Session
cookie
创建cookie
语法:setcookie(cookie名[,cookie值,有效时间,有效路径]);
获取cookie
语法:$_COOKIE('cookie名')
cookie有效期
临时cookie:setcookie("uName","admin");
一小时过期:setcookie("uName","admin",time()+ 3600);
永久cookie:setcookie("password","123",PHP_INT_MAX);
path有效路径
整站都能够访问:setcookie("username","jack",PHP_INT_MAX,"/");
注:1.目录的设置是参照网站根目录的。
2.设置目录为父级目录,子目录也能访问。
3.设置目录为子级目录,父级目录不能访问。
删除cookie
设置有效时间为过去时间:setcookie("uName","admin",time()-1);
将cookie中的值设置为false或者空字符串:setcookie("uName","");
不设置值:setcookie("uName");
注:1.怎么设置怎么删除。
判断是否拥有某个指定名称的cookie值
语法: if(isset($_COOKIE["cookie名"])){ }
Session
注:1.使用session时必须先用session_start();开启。
设置Session
语法:session_start(); //开启
$_SESSION['user'] = array('username'=>'lisi','age'=>'12'); //定义
读取Session
语法:session_start(); //开启
$user = $_SESSION['user'];
删除一个Session
语法:session_start(); //开启
unset($_SESSION['user']);
删除所有session信息
语法:session_start(); //开启
unset($_SESSION);或$_SESSION = []
销毁session
语法:session_destroy();
注:谨慎使用。
会话技术原理
MySQL
基本查询语句
查询
增加
修改
删除
常见的统计函数
count()查询满足条件的数据
max()及min()
avg获取平均值
order by:排序
limit:获取指定范围的数据
inner, left join, right join查询多个表
链接到mysql数据库
语法:mysqli_connect('数据库服务器地址','用户名','用户名','密码','要链接/打开的数据库名')
例: $conn=mysqli_connect('localhost','root','root','mybase');
注:1.如果连接成功,就返回一个连接对象(资源),如果连接失败,返回false。
设置数据库编码
语法:
服务器端的编码和php的编码不一致:mysqli_set_charset(链接成功的变量名,"utf8");
mysqli_query(链接成功的变量名,"set names utf-8")
php的编码和浏览器端的编码不一致:header("Content-Type:text/html;charset=utf-8")
注:1通常需要设置数据库编码,要不会乱码。
创建sql语句(增删改查语句)
例:$sql = "insert into mytable values(null,'张三',30,'男')";
注:1.在执行新增语句的时候,mysqli_query的返回值:如果成功则返回true,否则返回false。
执行sql语句
语法:mysqli_query(连接对象,sql语句);
例:$result = mysqli_query($conn,$sql); //$sql可以是增删改查的语句
注: 1.增加删除和修改:如果成功则返回true,否则返回false
2.查询:
查询失败:false
查询成功但是没有数据行:mysqli_num_rows(资源对象--引用)
查询成功也有数据行:读取数据
mysqli_error错误提示
语法: mysqli_error(链接对象);
例:mysqli_error($conn);
判断结果集中行数
语法:mysqli_num_rows(结果集)
注:1.可以输出最近一条sql语句在执行时所产生的错误信息。
获取数据的函数
1.mysqli_fetch_array(结果集资源,返回的内容的形式)
返回内容的形式包含:1.MYSQLI_ASSOC //关联数组
2.MYSQLI_NUM //索引数组
3.MYSQLI_BOTH //混合数组,默认
例:mysqli_fetch_array($result,MYSQLI_ASSOC);
注:1.提取数据生成一个数组.同时生成索引数组和关联数组两种形式。
2.mysqli_fetch_assoc:提取数据生成一个数组:将数据生成关联数组
3.mysqli_fetch_row:提取数据生成一个数组,将数据生成为索引数组
读取数据库所有数据
注:1.会生成一个二维数组。
关闭连接对象释放资源
语法: mysqli_close(链接对象);
注:1.当与mysql相关的操作执行完毕之后就立刻释放。
链接数据库获取数据基本步骤
创建异步对象
语法:var xhr = new XMLHttpRequest();
open设置请求行
语法:异步对象.open(请求方式,请求url):
例:xhr.open("get","validate.php?username="+name);
xhr.open("post","validate.php");
注:1.get请求如果有参数就需要在url后面拼接参数,
2.post如果有参数,就在请求体中传递
设置请求头
语法:异步对象.setRequestHeader('key':'value')
例: xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
注:1.get方式不需要设置请求头
2.post需要设置 Content-Type:application/x-www-form-urlencoded
3. 返回值为xml需要这样设置header("Content-Type:application/xml;charset=utf-8");
send设置请求体:发送请求
语法:异步对象.send(参数:key=value&key=value)
例:xhr.send("num="+arr);
注:1.如果有参数,post应该在这个位置来传递参数
2.对于 get请求不需要在这个位置来传递参数
响应报文
报文行:响应状态码 响应状态信息 200 ok
报文头:服务器返回给客户端的一些额外信息
报文体:服务器返回给客户端的数据
注:1.responseText:普通字符串。
2.responseXML:符合xml格式的字符串。
获得返回数据
语法1.异步对象.responseText //普通字符串。
2.异步对象.responseXML //符合xml格式的字符串。
status:获取当前服务器的响应状态
语法:异步对象.status
注:1. 如果返回值为200表示响应成功。
监听异步对象的响应状态 readyState
注:1. 0表示创建了异步对象,但是还没有真正的去发送请求
2. 1表示调用了send方法,正在发送请求
3. 2表示send方法执行完毕了,已经收到服务器的响应内容--原始内容,还不可以使用
4. 3表示正在解析数据
5. 4表示响应内容解析完毕,可以使用了
常见异步事件
1.onreadystatechange //表示异步对象发生改变
例:异步对象.onreadystatechange = function(){ }
ajax基本步骤
1.创建异步对象。 //var xhr = new XMLHttpRequest();
2.设置请求行。 // xhr.open("post", "demo02.php");
3.设置请求头。
//xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
4.设置请求体。 // xhr.send("num1=" + arr1 + '&' + "num2=" + arr2);
5.判断服务器响应是否完成
ajax的基本代码模式(get请求):
var xhr = new XMLHttpRequest();
//url通常就是一个php文件,可以返回信息
var url = "server.php?name=jack&age=18&a=99&b=ccc";
xhr.open("get", url);
xhr.send(null);
xhr.onreadystatechange = function(){
if( xhr.status == 200 && xhr.readyState == 4){
var str = xhr.responseText; //获得返回的文本
}
}
ajax的基本代码模式(post请求):
var xhr = new XMLHttpRequest();
//url通常就是一个php文件,可以返回信息
xhr.open("post", "server.php");
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send("name=jack&age=18&a=99&b=ccc"); //send中带数据
xhr.onreadystatechange = function(){
if( xhr.status == 200 && xhr.readyState == 4){
var str = xhr.responseText; //获得返回的文本
}
}
获取json数据格式并处理的方式:
if( xhr.status == 200 && xhr.readyState == 4){
var str = xhr.responseText; //获得返回的文本(假设是json文本)
var obj = JSON.parse(str); //将json文本解释为json对象
}
获取xml数据格式并处理的方式:
//服务器端:
header("Content-Type: application/xml; charset=utf-8");
//客户端:
if( xhr.status == 200 && xhr.readyState == 4){
var xmlObj = xhr.responseXML; //获得返回xml文档
var obj1 = xmlObj.getElementById("dv");
var obj2 = xmlObj.querySelector("#dv2");
var items = xmlObj.querySelectorAll("item");
}
serialize()获取所有表单元素值
语法:$("form表单").serialize();
例:$("#ajaxForm").serialize();
注:1.这个方法是jq的方式,所以需要使用jq对象来调用
2.这个方法可以将表单中所有name属性的表单元素的值收集,生成 key=value&key=value...这种格式
获取当前文件的路径
语法:Location.href
jQuery中的Ajax
发起Ajax请求
语法:$.ajax({})
以GET方式发起Ajax请求
语法:$.get()
以POST方式发起Ajax请求
语法:$.post()
url接口地址
语法:url:'./server/nav-json.php',
type请求方式
语法:type:'post',
timeout请求超时
语法:timeout:3000,
注:1.设置请求超时:单位为毫秒,如果服务器的响应时间超过指定的时候,请求失败。
ontimeout 监听超时事件
语法:异步对象.ontimeout=function(e){ }
dataType服务器返回格式
语法:dataType:'json',
注:1.设置响应数据的格式 xml json text html script jsonp。
data发送请求数据
语法:data:{},
注1.请求需要传递的参数。
beforeSend:function () {}请求发起前调用
语法:beforeSend:function () {}
success成功响应后调用
语法: success:render,
error错误响应时调用
语法:error:function(){ }
例: error:function(e){
if(e.statusText == "timeout"){
alert("请求超时,请重试");
}
},
complete 响应完成时调用(包括成功和失败)
语法:complete:function(){ }
例:complete:function(){
console.log('实现一些全局成员的释放,或者页面状态的重置....');
}
jQuery Ajax介绍
http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp
art-Template模板引擎
1.创建html结构
语法:<script type="text/template" id="navtemp">结构<script>
2.引入插件
例:<script src="template-native.js"></script>
3.接收模板引擎的返回值
语法:template(模板id,数据(对象));
例:var html = template("navTemp",obj);
注:1.调用模板引擎中的函数,返回值为替换之后的动态结构
4.添加返回的数据到页面
模板引擎基本步骤
综合案例
跨域
设置跨域请求
1.header( 'Access-Control-Allow-Origin:*' );
注:1.*代表允许所有其他的域向当前的域发送ajax请求。
2.header( 'Access-Control-Allow-Origin:http://www.study.com');
注:1.代表允许指定域向当前的域发送ajax请求。
注:1.服务器端设置。
XMLHttpRequest2.0
设置超时 xhr.timeout
监听超时事件 xhr.ontimeout = function () {// code}
FormData收集表单数据
实例化:var formdata=new FormData(form表单对象)
监听文件上传进度
语法:xhr.upload.onprogress = function (ev) {// code}
注:1.监听必须在send之前来设置。
2.ev.loaded 表示已上传的大小,ev.total表示文件整体的大小 |
|