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.建表字 ...
随机推荐
- NoSQL(Not Only SQL)
Everything has its properties and has relation with each other. All in world can be related to each ...
- constrained属性
hibernate文档上是这么写的: constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束.这个选项影响save ...
- php的yii框架开发总结2
开发流程:1.用yii创建网站目录,当时用命令行创建时遇到了问题,试了很久才找到原因:我的原因是在yii/framework/yiic.bat这个文件中的一条语句: if "%PHP_COM ...
- Node.js-Webstorm2018配置nodejs
网上都是webstorm老版本的设置方法!根本就找不到以下配置项: 下面介绍2018版的配置方式.功能:使webstrom支持node.js语法检测及语法提示! 例如:配置前,没有任何提示 配置后 配 ...
- svn更改地址怎么办
开发过程中有时会遇到服务器更换地址的情况,比如之前地址是 svn://www.aaa.com 后来换成了 svn://www.bbb.com 这时候怎么办呢?分客户端和服务器端2种情况处理 客户端: ...
- bootstrap中模态框、模态框的属性
工作中有需要用到模态框的可以看看 <div class="modal fade" id="userModal" tabindex="-1&quo ...
- 在idea中配置jetty
第一步:在pom.xml中配置jetty插件 <plugins> <!-- jetty插件 --> <plugin> <groupId>org.mort ...
- Oracle 启动 停止JOB
转自:https://www.cnblogs.com/qianbing/p/6971633.html --查看job下次执行时间以及间隔时间 '; --启动job ); --停用job EXEC DB ...
- 记录表TABLE中 INDEX BY BINARY_INTEGER 的作用
type my_number_arr is table of number index by binary_integer; 其作用是,加了”index by binary_integer ”后,my ...
- Python 初始—(高阶函数)
变量可以指向函数,函数的参数能接收变量, 将函数通过参数进行传递 def SetAbs(a,b,abs){ return abs(a)+abs(b) }