tp5商城
记录几个要点:
- 用户使用firbug伪造表单字段,比如伪造表单id字段,如何防止,tp5中好像没有。
- xss攻击:使用htmlspecialchars() 会把img、p、等等合法标签过滤掉,想要有选择性过滤标签,使用htmlpurifier软件包,搜索htmlpurifier下载解压,把library放到项目目录中。如果是框架,那么把相关代码放在公共文件中生成一个函数,方便随时调用。
/**
* htmlpurifier 过滤js脚本 // 有选择性的过滤XSS --》 说明:性能非常低-》尽量少用
*/
function removeXss($data) {
//引入路径 根据具体位置设置,其他不需要改动
require_once '../HtmlPurifier/HTMLPurifier.auto.php';
$_clean_xss_config = HTMLPurifier_Config::createDefault();
$_clean_xss_config->set('Core.Encoding', 'UTF-8');
// 设置保留的标签
$_clean_xss_config->set('HTML.Allowed', 'div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]');
$_clean_xss_config->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
$_clean_xss_config->set('HTML.TargetBlank', TRUE);
$_clean_xss_obj = new HTMLPurifier($_clean_xss_config);
return $_clean_xss_obj->purify($data);
} - 商品生成缩略图:商品列表页需要把,商品详情页需要把,放大镜需要把,等等。所以在添加商品图片时,数据表中要有几个字段存放不同尺寸的图片。
- 项目中图片的优化:1. 图片相关配置写在配置文件中;2. 图片路径不要写死,写在配置文件中; 3. 上传图片和图片处理的代码封装成一个函数。
//图片配置
'image' => [
'maxSize' => 1024*1024,
'exts' => array('jpg', 'jpeg', 'png', 'gif'),
'rootPath' => '../public/uploads/', //上传图片保存的路径,PHP使用的路径,它是硬盘上的路径,他的根目录是D:
'viewPath' => '/public/uploads', //显示图片时的路径,浏览器使用的路径,根目录是网站的根目录
], //在配置文件中写上这段代码,类似这种 - 模拟并发量:使用Apache自带的ab.exe软件测试,需要先打开cmd,把ab.exe路径复制进cmd下运行。
C:\Users\fb>D:\wamp\www\wamp32bits\wamp\bin\apache\apache2.4.18\bin\ab.exe -c 10 -n 10 localhost/homework111/11js/mail.php
//这是cmd里的命令-c: 并发量 -c 10 10个并发量; -n 每个客户端请求数; -n 10 10个并发总共请求10次。 后面的是PHP脚本路径。PHP代码如下:
$db = @mysqli_connect('localhost', 'root', '', 'stu');
mysqli_set_charset($db, 'utf8');
$sql = "SELECT id from miaosha"; // mysqli_query($db, 'LOCK TABLE miaosha WRITE'); //锁表
$fp = fopen('form.html', 'r'); // 一定要在操作数据库表之前上锁
flock($fp, LOCK_EX); //php lock
$r = mysqli_query($db, $sql);
// var_dump($r);
if($r && mysqli_num_rows($r)){
$re = [];
while($row = mysqli_fetch_assoc($r)){
$re[] = $row['id'];
}
}
if($re[0] > 0){
$re[0]--;
// echo 666;
mysqli_query($db, 'UPDATE miaosha set id='.$re[0]);
}
// mysqli_query($db, 'UNLOCK TABLES'); //mysql释放锁,可以不写,脚本自动释放
flock($fp, LOCK_UN);
fclose($fp);
mysqli_close($db);并发下读取数据库,假设数据库有100件商品,甲乙两个人可能同时读到100,然后各买1件,修改数据库,这时修改后的数据库剩余99件,但实际应该剩余98件。这就是并发带来的问题。所以使用锁。
- 用户在填写多个值的时候,使用逗号隔开,如果既有中文逗号,又有英文逗号,那么在分割字符串的时候肯定有问题,怎么办?-------------------------------》方法:在插入数据库之前把中文逗号转换为英文逗号,怎么做?---------》str_replace(',', ',', $str);函数将逗号转换。
tp5商城的更多相关文章
- 李忠益TP5商城项目笔记(待完成)
商品种类的无限极分类 $data=db('goods_type')->field(['*','concat(path,",",id)'=>'paths'])->o ...
- tp5 商城商品模型删除
1:控制器代码 public function delete($id) { //验证id是否正确 $id if (!intval($id)) { return getJsonData(10010, ' ...
- tp5 商城模型id详情接口
1:创建模型 2:定义关联模型 <?php namespace app\common\model; use think\Model; use traits\model\SoftDelete; c ...
- TP5框架,开源小程序商城源码,前端+后台完整版
CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...
- TP5.0+小程序商城构建(1)
1.导语 1.整体的思路与编程思想(大局观.AOP面向切面编程,10-20%) 2.具体的编程知识与技巧(TP5.小程序.数据库等80%) 2.课程内容与产品技术点 1.ThinkPHP5框架 1.编 ...
- 慕课网 微信小程序商城构建全栈应用 tp5【总结】
1.异常处理: [代码越抽象,复用性越高] [封装性越好,适应代码变化的能力越强] [] <?php/** * Created by PhpStorm. * User: 14155 * Date ...
- Jimmychoo商城系统总结
一.需求 1.游戏模块 ①在进入H5之前,首先有一个动态的探照灯的动效,然后由"淡出"效果到H5首页. ②在点击"开始游戏"之后会有一段动画演示游戏内容,然后滑 ...
- TP5视频教程课程内容
<TP5 视频教程课程内容> 一.ThinkPHP5TP5 官网基础教程, 官网手册作为参考,讲解TP5的使用方法.理解TP的用途 二.TP5大型项目实战及底层源码分析用TP5 做大型电商 ...
- tp5 使用技巧(持续更新中...)
tp5 使用技巧(持续更新中...) 1.自动写入时间 create_time和update_time 使用save方法才行,insert方法不生效,不知为何 2.过滤字段 allowfield和st ...
随机推荐
- [Python3] 038 函数式编程 偏函数
目录 函数式编程 之 偏函数 1. 关于强制类型转换 int 的补充 2. 利用 int 新建函数 3. functools.partial 函数式编程 之 偏函数 1. 关于强制类型转换 int 的 ...
- ZooKeeper原理及介绍
Zookeeper简介 1.1 什么是Zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据生态中的重要组件.它是 ...
- myeclipse显示db-brower
myeclipse显示db-brower 这东西怎么调出来? windows->show view->other->db borwser
- ZOJ 2314 (无源汇有上下边界的可行流)
(点击此处查看原题) 题意分析 给出n个结点,m条管道,每条管道存在最小流量和最大流量,而且每个结点的流入量等于流出流出量,问这n个结点和m条管道能否形成流量循环 解题思路 经典的无源汇有上下边界的可 ...
- 基于rabbitmq的Spring-amqp基本使用
目录 1. 依赖和配置 添加AMQP的启动器: 在application.yml中添加RabbitMQ地址: 2. 监听者 3. AmqpTemplate 4. 测试代码 Spring-amqp是对A ...
- pycharm 快捷键练习 和基本英语单词练习
通过练习 一下快捷键 打代码的速度得到提升 pycharm以下 快捷键+快捷键意义 ctrl+a 全选 ctrl+c 复制(不选中默认复制一行) ctrl+v 粘贴 ctrl+x 剪切 ctrl+f ...
- js创建jsonArray传输至后台及后台解析
//产品清单 //产品数量长度 var cnbvLength = FieldCount9 + 1; var arrayList=[]; for(var i = 0; i < cnbvLength ...
- CALL apoc.cypher.doIt创建动态节点的时候怎么指定多个标签?
下面的创建节点实例,请教一下CALL apoc.cypher.doIt如何创建多个标签?现在的方式是只能指定一个标签! UNWIND [{name:"sdasdsad234fdgsasdfa ...
- Arduino控制LED灯(开关控制)
问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...
- 分布式的几件小事(五)dubbo的spi思想是什么
1.什么是SPI机制 SPI 全称为 Service Provider Interface,是一种服务发现机制. SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实 ...