一、什么是php
它是通过访问服务器得形式打开, 不能本地直接打开
完整路径必须全英文,是因为解析问题
PHP是"PHP Hypertext Preprocessor"
- apache 服务器, html 文件支持中文, php 文件不支持中文
- nginx 服务器, html 和 php 文件都不支持中文
二、php能够做什么
- 创建、打开、读取、写入、删除以及关闭服务器上的文件
- 接收表单数据
- 发送并取回 cookies
- 添加、删除、修改数据库中的数据
- 限制用户访问网站中的某些页面
- 对数据进行加密
三、语法
- 脚本以 <?php 开头,以 ?>
- 文件通常包含 HTML 标签以及一些 PHP 脚本代码。
- 注释
// 这是单行注释
#这也是单行注释
/块注释/ - 大小写敏感
-在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感
-所有变量都对大小写敏感。函数名不区分大小写 - header(“content-type:text/html;charset=utf-8”);
php运行
- php 代码书写在一个 .php 后缀得文件里面
- echo所书写的内容,写在哪,结构就显示哪
- 必须写在 php 标签对内部 <?php ?>
- 扩展名无所谓,里面内容只要是html,都会被解析。
如果没有解析PHP的环境,就不会展示php内容,变为下载php文件
四、变量
定义
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
作用域
- local(局部)函数内的变量是局部变量
- global(全局)函数外的变量是全局变量
- static(静态)通常,当函数完成/执行后,会删除所有变量。定义静态的变量仅有在第一次进入时定义并且赋值,第二次执行时,不在执行。函数执行完成后 静态变量不会被销毁
function abc(){
static $a=5;
$a++;
echo $a;
}
abc();//6
abc();//7
abc();//8
- 全局变量 :在函数内的变量,如果需要声明或者使用函数外的变量可以使用global
$x=3;
function abc(){
global $x;
$x=6;
echo $x;
}
abc();
echo $x;
- $GLOBALS[index] 的数组中存储了所有的全局变量。
$x=3;
function abc(){
$GLOBALS["x"]=6;
echo $GLOBALS["x"];
}
abc();
echo $x;
$a=10;
$b=30;
function get_number(){
global $b;//当前函数中所有b变量都是全局
$a=20;
echo $GLOBALS["a"];//临时使用,函数内还有同名的局部变量
echo "<br>";
echo $a;//局部变量
echo "<br>";
echo $b;//全局变量
$b=40;//修改了全局的b
}
get_number();
echo "<br>";
echo $b;
- 超全局变量
- $_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。
- $_REQUEST 用于收集 HTML 表单提交的数据。
- $_POST 广泛用于收集提交 method=“post” 的 HTML 表单后的表单数据。
- $_GET 也可用于收集提交 HTML 表单 (method=“get”) 之后的表单数据。
- $_FILES 从客户计算机向远程服务器上传文件。
- $_ENV 通过环境方式传递给当前脚本的变量的数组。例如当前计算机名称
- $_COOKIE 变量用于取回 cookie 的值。
- $_SESSION 存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量
- 魔术变量
LINE 返回当前代码在php中的行数,用于调试php脚本;
FILE 返回当前文件的完整路径(绝对路径)
FUNCTION 返回当前函数的函数名
CLASS 返回当前的类名
五、打印输出
- echo 字符,数值,布尔 都会转换成字符串, 能够输出一个以上的字符串
- print 和echo类似,但只能输出一个字符串,并始终返回 1
echo print $a;//51
先打印print $a,再用echo打印print返回的值
- print_r(你要输出得内容); //可以将数组或者对象转换为字符串返回
- var_dump(你要输出的内容); //输出数据类型和值
var_dump(5); //int 5
六、条件和循环语句
- if () {}
if ($a > 0) {
} elseif ($a === 0) {
// 注意 **elseif中间没有空格**
} else {
}
- switch () {}
switch ($i) {
case 1:
break;
case 2:
break;
break;
default:
}
- for () {}
echo "<ul>";
for($i=0;$i<10;$i++){
// echo "<li>".$i."</li>"; //【.】是拼接
echo "<li>{$i}</li>";
}
echo "</ul>";
- while () {}
$i=0;
$s=0;
while($i<100){
$s+=$i;
$i++;
}
- do {} while ()
do{
$s+=$i;
$i++;
}while($i<100);
- for遍历索引数组,foreach遍历关联数组
七、数组和对象
数组
- 索引型数组
a r r = a r r a y ( 数 据 1 , 数 据 2 , 数 据 3 , . . . ) ; ‘ arr = array(数据1, 数据2, 数据3, ...); ` arr=array(数据1,数据2,数据3,...);‘arr=[4,6,8,10]` - 关联型数组
a r r = a r r a y ( k e y = > v a l u e , k e y 2 = > v a l u e 2 , . . . ) ‘ arr = array( key => value, key2 => value2, ... ) ` arr=array(key=>value,key2=>value2,...)‘arr1=array(“name”=>“xietian”,“agr”=>30)` - 数组遍历
- for循环
$arr=[1,2,3,4,5,6];
for($i=0;$i<count($arr);$i++){
echo $arr[$i];
echo "<br>";
}
- foreach循环
$arr=array[1,2,3,4,5,6];
foreach($arr as $value){
echo $value."</br>";
}
$arr1=array("name"=>"xietian","age"=>30,"sex"=>"男");
var_dump($arr1);
foreach($arr1 as $key=>$value){
echo $key.":".$value."<br>";
}
- 数组方法
- count( )
函数用于返回数组的长度(元素的数量)
<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>
访问数组里面的成员,数组名[索引]
/数组名[key]
JSON类型数据 json_encode() json_decode()
对象
用箭头来代替点 对象->属性
class Box
{
/* 成员变量 */
var $a = 1;
/* 成员函数 */
function Box()
{
}
function play()
{
echo $this->a;
}
}
new 实例化对象 $b=new Box();
随机数 mt_rand(min,max)
八、前后端通信
- 前端与服务端通信的消息 —— 报文:消息头 - 消息体
- 请求头:
header("content-type:text/html")
- 消息体:就是你要请求的内容
- 请求头:
- 前端发送消息给服务端 —— 请求
request
- 服务端返回消息给前端 ——响应
response
GET和POST
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行URI编码(不是URL),而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
- GET产生一个TCP数据包;POST产生两个TCP数据包(fireFox的POST只发送一次)
Mysql数据库
- 建库
默认账号和密码都是root
。- 点击数据库 —— 输入库名 —— 创建
- 进入库 —— 输入表名/字段数 —— 执行(创建)
- 类型 - 字符串
CHAR
(规定长度) 【效率最高】VARCHAR
(设定最低长度) 【第二】TEXT
(不限长度)【最低】int
整数
- 长度/值
字符长度,中文2个字符等于一个字 - 整理
- 编码越少,速度越快
ascii_bin
- 中文用
utf-8_bin
- 编码越少,速度越快
- 索引
- 主键(PRIMARY):通常表中只有一个主键,通常是pid,主键就是唯一标识
- 唯一(UNIQUE):不能重复、通常是用户名
- A_I
自增,有数据增加就会自动pid的的值
名字 | 类型 | 长度 | 默认 | 整理 | A_I |
---|---|---|---|---|---|
pid | int | 11 | √ | ||
user | varchar | 30 | ascii_bin | ||
password | varchar | 18 | ascii_bin | ||
name | varchar | 8 | utf8_bin | ||
age | int | 3 | |||
sex | char | 2 | 男 | utf8_bin | |
tel | char | 11 | ascii_bin | ||
varchar | 30 | ascii_bin |
MySQL语法
- 增
insert
INSERT INTO `student` (`字段1`, `字段2`, ...) VALUES(数据1, 数据2, ...)
// 在插入的时候, 主键可以不写
// 1. 全字段插入(NULL是主键)
$sql = 'INSERT INTO `student` VALUES(NULL "谢柳宁", 18, "男", "2020", 100)';
// 2. 选取字段插入
$sql = 'INSERT INTO `student` (`name`, `score`) VALUES("谢柳宁", 59)';
- 删
delete
DELETE FROM `student` WHERE 条件
// 删除的语句
$sql = 'DELETE FROM `student` WHERE `id`>1025';
- 改
updata
UPDATE `student` SET 要修改的字段=要修改的值 WHERE 条件
// 修改一条数据
$sql = 'UPDATE `student` SET `gender`="女" WHERE `id`>1000';
- 查
select
1. 查询所有
// SELECT * FROM `表`
$sql = 'SELECT * FROM `student`';
2. 查询所有数据, 但是只要几个字段
// SELECT 字段1, 字段2, ... FROM `表`
$sql = 'SELECT `name`, `age` FROM `student`';
3. WHERE 条件
// 按照条件查询
$sql = 'SELECT * FROM `student` WHERE `age`>28';
4. AND 且
// 并列条件查询
$sql = 'SELECT `score`, `age` FROM `student` WHERE `score`>90 AND `age`>25';
5. OR 或
// 或者条件查询
$sql = 'SELECT `age` FROM `student` WHERE `age`>28 OR `age`<20'
6. LIKE % 模糊查询
// 必须是 三xxx
$sql = 'SELECT `name` FROM `student` WHERE `name` LIKE "张%"';
// 必须是 xxx三
$sql = 'SELECT `name` FROM `student` WHERE `name` LIKE "%三"'
// 包含三就可以
$sql = 'SELECT `name` FROM `student` WHERE `name` LIKE "%三%"'