php基本语法
1. 前后端交互
1.1 仅学习基本语言自己能写demo即可
1.2 了解前后端开发状态
1.3 安装环境
- 浏览器不运行php文件
- php解析需要apache环境
- 涉及到后段,关系型数据库MySql
- 集成环境:MAMP/WAMP
1.4 phpstudy(集成环境软件)
-
启动时将apache和Mysql一起打开
-
apache 端口80,Mysql 端口号3060,也可以自己设置
-
phpstudy 默认首页,在文件夹有index.xxx时会自动首页显示
-
phpstudy 默认不显示目录结构(新版显示目录结构解决方法)
面板>设置>配置文件>vhosts.conf>0localhost_80>记事本打开找到“Options FollowSymLinks ExecCGI”改成“Options +Indexes +FollowSymLinks +ExecCGI”>重新启动apache
2. php基本语法
1.1 php必须写在php标签对 <?php ?>;没写在内部的代码都会解析成html
1.2 定义变量
<?php
$num = 100
?>
1.3 输出语法
<?php
// 解决中文乱码
header('content-type:text/html;charset=utf-8');
// 只能输出基本类型,复杂类型会报错
echo "hello world";
echo("</br>")
// 所有类型
print_r()
echo("</br>")
// 所有类型,并且带上类型
var_dump()
echo("</br>")
?>
1.4 字符串
<?php
// 单引号:普通字符串
// 双引号:可以解析变量,和模版字符串一样
// 拼接字符串用 .
?>
1.5 流程控制语句
<?php
// 和js差不多
if(){}
switch(){}
for(){}
while(){}
do{}while{}
?>
1.6 数组
<?php
// 索引型数组
$arr = array(1,2,3,4,5)
// 关联型数组相当于js对象
$arr = array(a=1,b=2,c=3)
?>
3. php操作数据库
3.1 了解MySql数据库(需要用到数据库可视化工具,如navcat)
3.2 操作数据库基本语法
<?php
// 1.和数据建立连接(先开启数据库)
$link = mysqli_connect('IP','username','password','database');
print_r($link);
// 2.查询一个sql
// 2.1 关键字建议大写;字段名表名建议使用``
$sql = 'SELECT * FROM `tableName`';
$res = mysqli_query($link,$sql);
// 2.2 只有查询语句需要解析,此处为解析成关联型数组
$data = mysqli_fetch_all($res,MYSQLI_ASSOC) ;
// 2.3 转成json格式
$jsonStr = json_encode($data);
echo $jsonStr;
echo "+++++++++++++++++++++++++++++++++++++++++++++++";
// 查询语句
// 查询所有数据
$sql = 'SELECT * FROM `tableName`';
// 查询某几个字段
$sql = 'SELECT `name`,`age` FROM `tableName`';
// where查询条件
$sql = 'SELECT * FROM `tableName` WHERE `age`>28';
// and查询条件
$sql = 'SELECT * FROM `tableName` WHERE `age`>28 AND `sorce`>90';
// or查询条件
$sql = 'SELECT * FROM `tableName` WHERE `age`>28 AND `age`<20';
// limit分页查询(从索引0到10)
$sql = 'SELECT * FROM `tableName` LIMIT 0,10';
// order by排序(DESC升/ASC降)
$sql = 'SELECT * FROM `tabelName` ORDER BY `sorce` DESC';
// like %模糊查询(查询所有以王开头的名)
$sql = "SELECT * FROM `tableName` WHERE `name`='王%'";
// like _模糊查询(查询什么王什么)
$sql = 'SELECT * FROM `tableName` WHERE `name`="_王_"';
// count avg max min 聚合函数(统计数据;result为键别名)
$sql = 'SELECT count(*) result FROM `tableName` '
// 插入语句(顺序插入)
$sql = 'INSERT INTO `tableName` VALUES(1025,'wtp',18)'
// 删除语句
$sql = 'DELETE FROM `tableName` WHERE `id`=1025'
// 修改语句
$sql = 'UPDATE `tableName` SET `gender`="女" WHERE `id`>100'
?>
4. 浏览器与php交互(简易登陆案例)
4.1 服务器文件夹内创建文件login.html
</ 表单提交时会项login.php发送数据(在地址栏) >
<form action="./login.php">
<p>请输入用户名</p>
<input type="text" name="username" autocomplete="off">
<p>请输入密码</p>
<input type="password" name="password" autocomplete="off">
<hr>
<button>登录</button>
</form>
4.2 创建login.php
<?php
header('content-type:text/html;charset=utf-8');
// 接收前端信息
// php有个天生的关联型数组叫做$_GET,所有地址栏带过来的参数都会存在这里
$username = $_GET['username'];
$password = $_GET['password'];
$link = mysqli_connect('localhost','root','root','user');
$sql = "SELECT count(*) c FROM `user_account` WHERE `username`='$username' AND `password`='$password'";
$res = mysqli_query($link,$sql);
$data = mysqli_fetch_all($res,MYSQLI_ASSOC);
if($data[0]['c']){
header('location:./home.html');
}else{
echo '用户名密码错误';
echo '<button><a href="./login.html">重新登录</a></button>';
}
?>
4. http传输协议
4.1 前后端交互的方式,规定前端以什么形式发送数据,后端以什么形式接收数据。
4.2 建立连接
-
基于TCP/IP协议三次握手
-
浏览器和服务器执行
-
目的:为了保证通道连接
三次握手:(12握手,23握手,34握手)
1.前端和后端说:你在吗
2.后端和前端说:我在
此处表明后端知道前端正常发送,后端知道后段正常接受
3.前端和后端说:好的我知道了
此处表明前端知道后端正常接收,前端知道前端正常发送,前端知道前端正常接收,前端知道后端正常发送
4.后端对前端说:你发送请求吧
后端知道前端正常接收,后端知道后端正常发送
4.3 发送请求:前端发送给后端必须以 请求报文 形式发送
-
请求行;
请求方式:GET和POST的区别
1.get携带参数方式地址栏直接拼接;post地址栏没有,在请求体里
2.get数据携带数据无限但受限于浏览器(IE 2kb);post理论无限,但受服务器限制apache默认限制2mb
3.get会被浏览器主动缓存;post不会
4.get明文发送;post暗文发送,相对安全
5.get只能发送url编码;post任意数据配套请求头
-
请求头;
cookie:浏览器端的存储空间
1.域名下存储,换一个就不行了
2.只能在文件夹及其子目录访问
3.按照字符串存储(“a=1;n=2”)
4.存储大小50条左右(4kb)
5.默认会话级别的时效,可以手动关闭实现7天免登录
6.前后端都可以操作
7.如果有数据,发送请求时自动携带(cookie注入xss脚本攻击)
cookie获取方式:
// 查询返回字符串 document.cookie // 设置:一次只能设置一条, ';'后可以书写对这条cookie的描述 document.cookie = "key=value;expires=123456;path='./xxx'"
php操作cookie:
<?php // php自带关联型数组 $_COOKIE $x = $_COOKIE['x'] // 设置cookie setcookie(key,value,exprires,path) // php 获取当前时间 单位秒 time() ?>
-
请求空行;
-
请求体
4.4 接收响应:
常见状态码:
101 表示连接继续;200 通用成功;302 临时重定向;301 永久重定向;304 缓存(数据);403 访问权限不够;404 地址不存在;
500 通用服务端错误;501 维护或者过载;
4.5 断开连接:基于TCP/IP协议的四次挥手(原理同三次握手)