PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)
商品相册图片删除
当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id【因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除】


//钩子方法_before_delete:删除前的操作
protected function _before_delete($option)
{
$id = $option['where']['id']; //要删除的商品的ID
/***********删除商品相片********/
//先查询出原商品相册的路径
$gpModel = M('goods_pic');
$pics = $gpModel->field('pic,sm_pic,mid_pic,big_pic')->where(array(
'goods_id' => array('eq', $id),
))->select();
foreach ($pics as $k => $v){
deleteImage($v); //$v是一个数组
}
$gpModel->where(array( //根据商品id删除数据库中的路径信息
'goods_id' => array('eq', $id),
))->delete(); /***********删除LOGO********/
//先查询出原来的图片的路径
$oldLogo = $this->field('logo,mbig_logo,big_logo,mid_logo,sm_logo')->find($id);
deleteImage($oldLogo);
/****** 删除会员价格 ********/
//根据商品表id 删除操作【后用了外键级联删除,则不需要写这段代码】
/* $mpModel = D('member_price');
$mpModel->where(array(
'goods_id' => array('eq', $id),
))->delete(); */
}
_before_delete()
注:TP中提供的数据库连贯操作语法where()会进行sql注入过滤,注意不能直接传入变量
修改图片时删除使用AJAX实现无刷新删除
1、在修改表单中列出已经上传好的商品相册
先在控制器类GoodsController.class.php/edit()中,取出相册路径信息

在表单edit.html中输出
1.1、先定义显示的样式

1.2、在商品相册的table中显示

1.3、增加JS脚本控制“添加图片”

2、AJAX删除图片
2.1在“删除按钮”加上class,以便js脚本寻找;将每张图片的id放到删除按钮中

2.2编写js,删除图片
//删除图片
$(".btn_del_pic").click(function(){
if(confirm('确定要删除吗?'))
{
//先选中删除按钮所在的li标签
var li = $(this).parent();
//从这个按钮上获取pic_id属性
var pid = $(this).attr("pic_id");
$.ajax({
type : "GET",
url : "<?php echo U('ajaxDelPic', '', FALSE); ?>/picid/"+pid,
success : function(data)
{
//把图片从页面中删除掉
li.remove();
}
});
}
})
thinkphp中的大U函数三个参数:
U('ajaxDelPic') ==> /index.php/Admin/Goods/ajaxDelPic.html
U('ajaxDelPic?id=1') ==> /index.php/Admin/Goods/ajaxDelPic/id/1.html
U('ajaxDelPic', array('id'=>1)) ==> /index.php/Admin/Goods/ajaxDelPic/id/1.html
U('ajaxDelPic', array('id'=>1), FALSE) ==> /index.php/Admin/Goods/ajaxDelPic/id/1
2.3 在商品控制器GoodsController.class.php中添加 ajaxDelPic方法处理这个请求

3、修改相册时,添加新图片
思路:跟添加商品图片的思路一样:先判断是否上传图片pic,因为是批量上传,所以先将二维转成一维,然后循环上传
注:当处理logo的代码在处理图片pics的代码之下时,当处理完图片pics后,$_FLEFS中虽然还会存储着logo的信息,但$_FLEFS已经的下标已经不是logo,因为处理图片的代码是add(),当插入数据库操作执行后,$_FLEFS的属性会变动,原来的name是logo就变成0。
因此要先执行处理logo的代码
//钩子方法_before_update:更新前插入,在添加前会自动调用
protected function _before_update(&$data, $option)
{
$id = $option['where']['id']; //要修改的商品的ID
/**************处理LOGO******************/
//判断有没有选择图片 if($_FILES['logo']['error'] == 0)
{
$ret = uploadOne('logo', 'Goods', array(
array(700, 700),
array(350, 350),
array(130, 130),
array(50, 50),
));
$data['logo'] = $ret['images'][0];
$data['mbig_logo'] = $ret['images'][1];
$data['big_logo'] = $ret['images'][2];
$data['mid_logo'] = $ret['images'][3];
$data['sm_logo'] = $ret['images'][4]; //先查询出原来的图片的路径
$oldLogo = $this->field('logo,mbig_logo,big_logo,mid_logo,sm_logo')->find($id);
//从硬盘上删除图片
deleteImage($oldLogo);
} /**********商品相册处理********/
if(isset($_FILES['pic'])) //先判断是否有上传
{
$pics = array();
//var_dump($_FILES['pic']['name']);die();
//二维数组转成一维
foreach ($_FILES['pic']['name'] as $k => $v)
{
$pics[] = array(
'name' => $v,
'type' => $_FILES['pic']['type'][$k],
'tmp_name' => $_FILES['pic']['tmp_name'][$k],
'error' => $_FILES['pic']['error'][$k],
'size' => $_FILES['pic']['size'][$k],
);
}
//var_dump($pics);die();
$_FILES = $pics; //把处理好的数组赋给$_FILES,因为uploadOne函数是在$_FILES中获取图片的
$gpModel = M('goods_pic');
//循环每个上传
foreach ($pics as $k => $v)
{
if($v['error'] == 0)
{
$ret = uploadOne($k, 'Goods', array(
array(650, 650),
array(350, 350),
array(50, 50),
));
//var_dump($ret);die();
if($ret['ok'] == 1)
{
$gpModel->add(array(
'pic' => $ret['images'][0],
'big_pic' => $ret['images'][1],
'mid_pic' => $ret['images'][2],
'sm_pic' => $ret['images'][3],
'goods_id' => $id,
));
}
}
}
}
/************处理会员价格****************/
$mp = I('post.member_price');
$mpModel = M('member_price');
//先删除原来的会员价格
$mpModel->where(array(
'goods_id' => array('eq', $id),
))->delete();
foreach ($mp as $k => $v)
{
$_v = (float)$v;
//如果设置了会员价格就插入到表中
if($_v > 0)
{
$mpModel->add(array(
'price' => $_v,
'level_id' => $k,
'goods_id' => $id,
));
}
} //过滤这个字段 【必须对所有输入内容进行过滤】
$data['goods_desc'] = removeXSS($_POST['goods_desc']);
}
PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)的更多相关文章
- PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...
- PHP.32-TP框架商城应用实例-后台8-商品相册-添加
商品相册[是商品的其他相片] 添加相册需求: 每张图片生成三张缩略图{50*50.350*350.650*650} 1.建表p39_goods_pic{id,pic,sm_pic,mid_pic,bi ...
- PHP.30-TP框架商城应用实例-后台6-商品会员价格删除-外键,级联操作
商品会员价格删除 需求:当删除一件商品时,这件商品对应的会员价格也应该从会员价格表{price,level_id,goods_id}中删除掉. 有两种删除方法 1.在钩子函数_before_delet ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除
添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
随机推荐
- 栅格那点儿事(一)---Raster是个啥子东西
Raster是个啥子东西 现如今,不仅是在遥感应用中能看到花花绿绿的影像了,在GIS应用中也能随处看到她们的身影.在各种在线地图中,卫星影像作为底图与矢量的道路层叠加:高程DEM作为高程来源实现地形的 ...
- 关于VisualStudio2010发布项目问题
VisualStudio2010速度还是很给力的,VS2015打开机器就双100%了:VS2010机器上跑起来还是很好用的. 今天编译一个MVC3.0项目,发布时候出现诡异现象:Content文件夹里 ...
- PHP文件是什么?如何打开PHP文件?
在平时我们可能会碰到过php文件,可是很多用户不知道php文件是什么文件?也不知道怎么打开php文件?为了满足一些用户的好奇心,小编现在就给大家讲解php文件以及如何打开php文件的方法. 1.PHP ...
- iOS 有些库只能在真机上运行,不能在模拟器上运行的解决方式
在开发中,多少肯定会用到第三方的东西,或许大家也和我一样遇到到这样的情况,有些库正好适合自己的需求,但是这个库却只支持真机上运行,在模拟器上编译却不通过, 一般情况下,.a静态包,你刚刚导入的时候,不 ...
- 设有三个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲块组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者)共享另一个由m个缓冲块组成的缓冲池。用P、V操作描述它们之间的同步关系。
生产者消费者问题 设信号量mutex1, mutex2, full1, full2, empty1, empty2分别表示1和2号缓冲区的访问互斥, 是否满, 是否空 semaphore mutex1 ...
- 1006: Hero In Maze
1006: Hero In Maze 时间限制: 1000 Sec 内存限制: 64 MB提交: 417 解决: 80[提交][状态][讨论版][命题人:外部导入] 题目描述 500年前,Jess ...
- 2017.11.21 基于JSP+Servlet+JavaBean实现复数运算(二)
代码的实现 最基本的MVC模式 //input.jsp 输入界面 <%@ page language="java" import="java.util.*" ...
- CSS 负边距读后感
最近看到一篇讲解CSS 负边距的文章: http://segmentfault.com/a/1190000003750411?utm_source=Weibo&utm_medium=share ...
- 旧文备份:怎样利用好单片机上的存储器资源来实现OD的存储与访问
我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它.因为OD的内容比较杂, ...
- 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章
从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章 如何使用本书 1.1 本书的参考资料 本书参考资料为:<STM32 ...