当前位置: 首页 > news >正文

PHP进阶:前后端交互、cookie验证、sql与php

单词:construct 构造        destruct 摧毁        empty  空的        trim 修剪        strip 清除        slash 斜线        special 特殊        char 字符         query 询问

构造方法(魔术方法)

构造方法是一种特殊的函数,用于在创建对象时初始化对象属性。在 PHP 中,构造方法通过 __construct() 实现。以下是一个示例:

class Person{var $name;var $age;var $sex;function __construct($name='老王',$age=18,$sex='女'){$this->name =$name;$this->age =$age;$this->sex =$sex;}
}$ren = new Person("张三",18,"男");

超级全局变量

超级全局变量用于接收前端表单传递的数据。例如,使用 $_GET$_POST 和 $_REQUEST 接收 GET 和 POST 请求的参数。

前端表单示例:

<form action="super_var.php" method="get"><input type="text" name="uname" placeholder="请输入用户名"><br><input type="password" name="pwd" placeholder="请输入密码"><br><input type="submit" value="登录">
</form>

后端接收数据示例:

/isset判断是否存在key为‘uname’和‘pwd’的值
if(isset($_POST['uname'])&&isset($_POST['pwd'])){$name = $_POST['uname'];$pwd = $_POST['pwd'];//empty判断值是否为NULL,为NULL返回值为1if(empty($name)||empty($pwd)){echo "<script>alert('用户名或密码不能为空');history.back();</script>";exit;}//只能包含字母和数字长度大于6小于12的正则表达式,preg_match匹配正则$reg = "/^[a-zA-Z0-9]{6,12}+$/";if(!preg_match($reg,$name)){echo "<script>alert('用户名或密码只能包含字母和数字');history.back();</script>";exit;}echo "<script>alert('登录成功!')</script>";
}

数据清洗

数据清洗是处理用户输入的重要步骤。以下是一些常用的数据清洗函数:

  • trim():去除字符串首尾的空格。
  • stripslashes():去除字符串中的反斜杠。
  • htmlspecialchars():将特殊字符转换为 HTML 实体。
$str = ' NTD 2404 ';
echo '|'.trim($str).'|'; // 输出:|NTD 2404|$str = '\n\N\T\D 2404';
echo stripslashes($str); // 输出:nNTD 2404$str = "<script>alert('hello');</script>";
echo htmlspecialchars($str); // 输出:安全的 HTML 代码

Cookie 和 Session

Cookie 和 Session 用于保存会话状态。

Cookie

Cookie 用于在不同页面间保存用户信息。设置 Cookie:

setcookie('cookie_name','cookie_key',time()+x);

获取 Cookie:

$_COOKIE['cookie_name']

删除 Cookie:

setcookie('cookie_name','',time()-x);

Session

Session 将用户信息存储在服务器上。使用 Session:

session_start();//开启session
$_SESSION['uname'] =$name;//传递参数
$_SESSION['pwd'] =$pwd;

关闭 Session:

unset($_SESSION['uname']);
unset($_SESSION['pwd']);//清空文件中的内容
session_destroy();//销毁session

Session 文件通常存储在 PHPstuby/tmp/tmp 目录下

文件名:sess_8bglllpijuhagji8earq3uo1j1(下划线前为固定值,后缀为sessionID)

PHP与SQL联动

PHP 连接 MySQL | 菜鸟教程 (runoob.com)

//链接数据库
$conn = new mysqli('127.0.0.1','root','root');
if($conn->connect_error){//判断是否链接成功die("连接失败".$conn->connect_error);
}//使用数据库
$conn -> query('use user');//增
$sql = 'insert into persion(name,age) values("王同学",20)';
$conn -> query($sql);//执行成功返回一个boolean值ture//改
$sql = 'update persion set age=30 where name="王同学"';
$conn -> query($sql);//删
$sql = "delete from persion where age<=20";
$conn -> query($sql);//查    fetch_assoc获取结果一次一行
$sql = "select * from persion";
$res = $conn -> query($sql);
while($row = $res->fetch_assoc()){echo "姓名:".$row['name']."年龄:".$row['age']."<br>";
}

查数据时:$res为查询结果集

object(mysqli_result)#2 (5)  { ["current_field"]=> int(0) ["field_count"]=> int(3) ["lengths"]=> NULL ["num_rows"]=> int(5) ["type"]=> int(0) }

  • current_field:当前字段的索引。
  • field_count:结果集中的字段数量。
  • lengths:一个数组,包含了结果集中每个字段的数据长度。
  • num_rows:结果集中的行数。
  • type:结果集的类型。

sql预处理

$sql = "insert into persion(name,age) values (?, ?)";
//生成预处理对象
$stmt = $conn->prepare($sql);
$stmt ->bind_param("si", $name, $age);
$name = "张三";
$age = 18;
$stmt->execute();
$stmt->close();

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot原理解析(二)- Spring Bean的生命周期以及后处理器和回调接口
  • ssh出现Permission denied(publickey,gssapi-keyex,gssapi-with-mic).
  • 配置php-fpm服务
  • 【ffmpeg命令入门】视频剪切,倍速与倒放
  • 视图、存储过程、触发器
  • goland设置Gin框架中tmpl模板的语法提示的方法
  • Spring 循环依赖详解
  • 基于python opencv 多进程处理图像
  • 你了解你的GD32 MCU系统主频是多少吗 ?
  • 什么是反射以及反射的应用及例子
  • 14、如何⽤DDD设计微服务代码模型
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • SimD~
  • 数据结构之树知识总结
  • 快速搞定分布式RabbitMQ---RabbitMQ进阶与实战
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaWeb(学习笔记二)
  • leetcode-27. Remove Element
  • mockjs让前端开发独立于后端
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • session共享问题解决方案
  • Vue2 SSR 的优化之旅
  • WebSocket使用
  • 给初学者:JavaScript 中数组操作注意点
  • 经典排序算法及其 Java 实现
  • 坑!为什么View.startAnimation不起作用?
  • 排序(1):冒泡排序
  • 使用docker-compose进行多节点部署
  • 微信小程序设置上一页数据
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #1014 : Trie树
  • #预处理和函数的对比以及条件编译
  • (11)MATLAB PCA+SVM 人脸识别
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)shell调试方法
  • (转)人的集合论——移山之道
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 材料检测系统崩溃分析
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .NET周刊【7月第4期 2024-07-28】
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @SentinelResource详解
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析