Web 后端php

Web 后端php

Web 后端php

PHP基本语法

PHP(HyperText Preprocessor):超文本预处理器
官方网站: https://www.php.net/

  1. PHP 代码必须包含在 <?php ... ?>标签中
    这是服务器识别 PHP 代码的标识
  2. 语句结束:每条语句以 ;(分号)结束
  3. 注释 //单行注释 /多行注释/
  4. 变量规则:所有变量都必须以$符号开头

1. 输出

<?php // 这是输出helloworld echo "helloworld"; // echo 打印,输出 ?> 输出:helloworld 

写程序的时候需养成注释代码的好习惯,以免日后忘记,导致从头开始理解代码

2. 定义变量和拼接字符串

<?php // 定义变量 $message ="你好,大家好"; $name="张三"; // . 表示拼接 echo $message."我是".$name; ?> 输出:你好,大家好我是张三 

简单来说,把变量比作一个盒子,变量名可以自定义,就像你可以拿不同材质、大小的盒子一样
定义一个变量,就像你网购一个快递,不管是什么样的盒子(你所定义的变量名),里面都是你所下单的东西(即你所定义的值)
变量可以反复使用,并且修改变量中包含的值,所有代码中的变量都会改变,节省修改代码时间

变量名可以自定义,但最好还是做到“见词生意”,看见变量名就能大概理解变量所代表的值
普通变量:保存单个数据,变量名可自定义

PHP 变量规则

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格

变量名是区分大小写的($y 和 $Y 是两个不同的变量)

在这里插入图片描述

HTML 和 PHP 可以混合输出

3. 数组

创建数组:

  1. [ ]

array() 函数用于创建数组----php版本5.4+

在这里插入图片描述
<?php // 定义数组:可以保存多个值 $student = ["xiaoming", "xiaolin", "xixi", "xiaoai"]; //利用索引获取数组里数据 echo $student[0]; //0 代表数组第一个值 ?> 输出:xiaoming 

数组:保存多个数据,可以用[ ]
组:用来存储一组类同数据(如:都表示姓名)

4. php流程控制–条件语句

PHP流程控制语句用于决定代码的执行顺序
条件语句:根据不同情况执行不同代码

在这里插入图片描述

if语句
表示判断,如果成立则执行,不成立则不执行

<?php $score = 75; if ($score >= 60) { echo "成绩及格"; } ?> 输出:成绩及格 #小于60则不会执行代码 

if…else语句
判断两个条件并执行其中一个

if…elseif…else 语句
判断多个条件,选择所触发条件的代码执行

<?php $score = 85; if ($score >= 90) { echo "成绩优秀"; } elseif ($score >= 80) { echo "成绩优良"; //85 >=80 成立 } elseif ($score >=60) { echo "成绩及格"; }else { echo "成绩不及格"; } ?> 输出:成绩优良 #根据所输入的数据判断哪条条件满足执行 

if语句:表示判断,可判断一次,两次,也可判断多次
if语句执行:当满足条件时则会执行,否则不执行

5. 流程控制–循环语句

PHP流程控制语句用于决定代码的执行顺序。
循环语句:重复执行某个任务
for循环

在这里插入图片描述

如:打印全班同学的名字

<?php //索引'xiaoming'=0, 'xiaolin'=1, 'xixi'=2, 'xiaogao'=3 $student = ['xiaoming', 'xiaolin', 'xixi', 'xiaogao']; //$i=0 初始化; $<=3 循环条件; $i=$i+1 迭代 for ($i = 0; $i <= 3 ; $i=$i+1) { echo $student[$i].' ' ; //这里输出空格是为了美观 } ?> 输出:xiaoming xiaolin xixi xiaogao 

for循环:当条件满足时,会重复执行某部分代码
注意:条件一直满足(死循环),会一直重复循环,电脑容易卡死

while循环

在这里插入图片描述
<?php $count = 3; $student = ['xiaoming', 'xiaolin', 'xixi', 'xiaogao']; // ($count >= 0) 循环条件 while ($count >= 0) { echo $student[$count].' ' ; $count=$count-1; //迭代,递减操作,确保循环能终止 } ?> 输出:xiaogao xixi xiaolin xiaoming 

while循环:当条件满足时,会重复执行某部分代码
习惯:知道次数通常用for,不知道次数通常用while

6. 类与函数

类:

在PHP中,使用class关键字来定义一个类
class表示类,可以通过属性表示多个不同类型的数据

<?php header("Content-Type: text/html; charset=utf-8"); // 定义一个类;student(类名,可自定义) class student{ // 定义属性;public 表示公共的,公开的 public $name; public $age; } // 类的使用:new一个对象 $stu1 = new student(); // 通过new的对象去使用该类中的属性并赋值(name = "xiaoming") $stu1 -> name = "xiaoming"; $stu1 -> age =18; // $stu1->name 表示使用$stu1对象中的name属性(此时变量$stu1中的属性name="xiaoming") echo $stu1->name; echo $stu1->age; ?> 输出:xiaoming18 

函数:

<?php header("Content-Type: text/html; charset=utf-8"); // 定义一个类;student(类名,可自定义) class student{ // 定义属性(变量);public 表示公共的,公开的 public $name; public $age; // function 表示自定义函数;say 函数名(可自定义) public function say() { //自定义函数 echo $this->name. " 你好!"; } } // 类的使用:new一个对象 $stu1 = new student(); $stu1 -> name = "xiaoming"; #代码从上往下执行,先给name赋值xiaoming $stu1 -> age =18; $stu1->say(); #然后再调用函数 ?> 输出:xiaoming 你好! 

类可以包含属性(变量)和方法(函数)
属性用于存储数据,而方法用于执行操作
new关键字直接跟类名来创建对象

理解关键字
class
对象new
函数function
  • 类是模板/蓝图,定义属性和方法的抽象规则;对象是类的实例,是根据模板创建的具体实体,拥有类的属性和方法。
    简单说:类造对象,对象用类的功能
  1. 一个类可创建多个不同对象,各对象属性值独立,方法共用。
  2. 对象通过 -> 访问属性/方法,类通过 :: 访问静态成员。
  3. 类是抽象的,不能直接使用;对象是具体的,可直接操作。

魔术方法·
魔术方法不需要显式调用,而是由PHP解释器在特定时机自动触发。
通常用两个下划线(__)开头,后跟方法名称,如构造方法 __construct()

<?php // 定义一个人类 class Person { //通常用两个下划线(__)开头,后跟方法名称,如构造方法 __construct() public function __construct() { echo "construct is coming ~"; } } // 通过某个机制触发,new的时候触发构造方法(满足条件,自动执行) $p1 = new Person(); ?> 输出:construct is coming ~ 

函数

  1. 普通函数:独立于类之外,直接定义、直接调用,无归属
  2. 类的函数:定义在类内部,是类的行为属性,需通过对象(非静态方法)或类名(静态方法)调用
  3. PHP 内置函数:PHP 自带的全局函数(“__”开头),无需定义直接触发机制调用,覆盖绝大多数常用功能,是开发中最常使用的函数类型

7. 超全局变量

PHP 的强⼤在于它能轻松处理⽤⼾通过 Web 提交的数据,这依赖于⼏个特殊的超全局变量,它们是 PHP ⾃动创建的数组
HP提供了预定义的超全局变量,用来获取HTTP请求信息

在这里插入图片描述


案例:


页面代码

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form action="test10.php" method="get"> 姓名:<input type="text" name="name"><br> 年龄:<input type="number" name="age"><br> <button type="submit">提交</button> </form> </body> </html> 

和接收代码

<?php header("Content-Type: text/html; charset=utf-8"); $name = $_GET['name'] ; $age = $_GET['age'] ; echo "<h3>接收到的参数:</h3>"; echo "姓名:{$name}<br>"; echo "年龄:{$age}<br>"; echo "<a href='a.php'>返回填写表单</a>"; ?> 

效果:

在这里插入图片描述


在这里插入图片描述

序列化与反序列化

传递多个数据可以用序列化对象
序列化 是将⼀个 PHP 对象(包括它的类名、所有属性和属性值)转换为⼀个可存储、可传输的字符串的过程。
同样创建一张测试页面

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form action="test10.php" method="get"> 姓名:<input type="text" name="name"><br> 年龄:<input type="number" name="age"><br> 密码:<input type="password" name="pwd"><br> <button type="submit">提交</button> </form> </body> </html> 

和一张接收页面

<?php header("Content-Type: text/html; charset=utf-8"); // 用来测试,看是否能获取 $name = $_GET['name'] ; $age = $_GET['age'] ; $pwd = $_GET['pwd'] ; echo "<h3>接收到的参数:</h3>"; echo "姓名:{$name}<br>"; echo "年龄:{$age}<br>"; echo "密码:{$pwd}<br>"; // 把多个数据打包到一个类中来 class student{ public $name; public $age; public $pwd; } $stu1 = new student(); $stu1 -> name = $name; $stu1 -> age = $age; $stu1 -> pwd = $pwd; echo "<h3>序列化后的数据:</h3>"; // serialize:序列化:把对象转换为字符串 $serialized = serialize($stu1); echo $serialized; echo "<h3>反序列化后的数据:</h3>"; // unserialize:反序列化:把字符串转换为对象 $restored = unserialize($serialized); //序列化以后的值 echo $restored->name ; echo "<br>"; echo $restored->age ; echo "<br>"; echo $restored->pwd ; echo "<br>"; echo "<a href='a.php'>返回填写表单</a>"; ?> 

效果:

在这里插入图片描述


在这里插入图片描述

Read more

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.