PHP.26-TP框架商城应用实例-后台3-商品修改、删除
商品修改{修改页一般与添加页有百分之九十的相似度}
create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT
(或者1)和Model::MODEL_UPDATE
(或者2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成Model::MODEL_UPDATE
操作。
save():用于更新数据库信息;如果失败返回false,如果成功返回受影响条数
1、控制器GoodsController.class.php中增加edit方法
- public function edit()
- {
- //判断用户是否提交了表单(如果提交了,就在if中处理表单,否则显示表单)
- if(IS_POST){ //IS_POST:TP自带常量:当前是否POST请求
- $model = D('goods'); //D()实例化/Model/中模型goods
- //2.CREATE方法:a.接收数据并保存到模型中 b.根据模型中定义的规则验证表单
- /**
- *第一个参数:要接收的数据默认是$_POST
- *第二个参数:表单的类型。当前是添加还是修改的表单,1:添加 2:修改
- *$_POST:表单中原始的数据,I('post.'):过滤后的$_POST的数据,过滤XSS攻击
- **/
- if($model->create(I('post'), 2))
- {
- //save():用于更新数据库信息;如果失败返回false,如果成功返回受影响条数【如果修改前跟修改后相同就返回0】
- if(FALSE !== $model->save())
- {
- //显示成功信息并等待1秒之后跳转
- $this->success('操作成功!', U('lst'));
- exit;
- }
- }
- //如果上面失败了在这里处理失败的请求
- //从模型中取出失败的原因
- $error = $model->getError();
- //由控制器显示错误信息,并在3秒跳回上一个页面[error()默认3秒]
- $this->error($error);
- }
- //显示表单
- $this->display();
- }
function edit()
2、修改商品模型GoodsModel.class.php控制允许修改的字段
- //修改调用create方法允许接收的字段
- protected $updateFields = 'id,goods_name,market_price,shop_price,is_on_sale,goods_desc';
3、修改lst.html添加修改按钮,使之传递id参数 U()
4、在修改的表单中显示原来的数据
先根据ID取出原数据的信息 -> 修改控制器GoodsController.class.php中的edit方法;注意:这里的模型实例化则不能在if里面
- //修改商品表单
- public function edit()
- {
- $id = I('get.id'); //获取要修改的商品的id
- $model = D('goods'); //D()实例化/Model/中模型goods
- //判断用户是否提交了表单(如果提交了,就在if中处理表单,否则显示表单)
- if(IS_POST)
- { //IS_POST:TP自带常量:当前是否POST请求
- //2.CREATE方法:a.接收数据并保存到模型中 b.根据模型中定义的规则验证表单
- /**
- *第一个参数:要接收的数据默认是$_POST
- *第二个参数:表单的类型。当前是添加还是修改的表单,1:添加 2:修改
- *$_POST:表单中原始的数据,I('post.'):过滤后的$_POST的数据,过滤XSS攻击
- **/
- if($model->create(I('post'), 2))
- {
- //save():用于更新数据库信息;如果失败返回false,如果成功返回受影响条数【如果修改前跟修改后相同就返回0】
- if(FALSE !== $model->save())
- {
- //显示成功信息并等待1秒之后跳转
- $this->success('操作成功!', U('lst'));
- exit;
- }
- }
- //如果上面失败了在这里处理失败的请求
- //从模型中取出失败的原因
- $error = $model->getError();
- //由控制器显示错误信息,并在3秒跳回上一个页面[error()默认3秒]
- $this->error($error);
- }
- //根据ID取出要修改的商品的原信息
- $data = $model->find($id);
- $this->assign('data', $data);
- //显示表单
- $this->display();
- }
function edit()
修改edit.html
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>ECSHOP 管理中心 - 修改商品 </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
- <link href="__PUB__/Admin/Styles/general.css" rel="stylesheet" type="text/css" />
- <link href="__PUB__/Admin/Styles/main.css" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <h1>
- <span class="action-span"><a href="__GROUP__/Goods/goodsList">商品列表</a>
- </span>
- <span class="action-span1"><a href="__GROUP__">ECSHOP 管理中心</a></span>
- <span id="search_id" class="action-span1"> - 修改商品 </span>
- <div style="clear:both"></div>
- </h1>
- <div class="tab-div">
- <div id="tabbar-div">
- <p>
- <span class="tab-front" id="general-tab">通用信息</span>
- </p>
- </div>
- <div id="tabbody-div">
- <form enctype="multipart/form-data" action="__SELF__" method="post" >
- <input type="hidden" name="id" value="<?php echo $data['id'];?>" />
- <table width="90%" id="general-table" align="center">
- <tr>
- <td class="label">商品名称:</td>
- <td><input type="text" name="goods_name" value="<?php echo $data['goods_name'];?>"size="30" />
- <span class="require-field">*</span></td>
- </tr>
- <tr>
- <td class="label">LOGO: </td>
- <td>
- <img src="/Public/Uploads/<?php echo $data['mid_logo'];?>">
- <br />
- <input type="file" name="logo" size="30" />
- </tr>
- <tr>
- <td class="label">市场售价:</td>
- <td>
- <input type="text" name="market_price" value="<?php echo $data['market_price'];?>" size="20" />
- <span class="require-field">*</span>
- </td>
- </tr>
- <tr>
- <td class="label">本店售价:</td>
- <td>
- <input type="text" name="shop_price" value="<?php echo $data['id'];?>" size="20"/>
- <span class="require-field">*</span>
- </td>
- </tr>
- <tr>
- <td class="label">是否上架:</td>
- <td>
- <input type="radio" name="is_on_sale" value="1" <?php if($data['is_on_sale']=='1') echo 'checked="checked"'; ?> /> 是
- <input type="radio" name="is_on_sale" value="0" <?php if($data['is_on_sale']=='0') echo 'checked="checked"'; ?> /> 否
- </td>
- </tr>
- <tr>
- <td class="label">商品描述:</td>
- <td>
- <textarea id="goods_desc" name="goods_desc" /><?php echo $data['goods_desc'];?>"</textarea>
- </td>
- </tr>
- </table>
- <div class="button-div">
- <input type="submit" value=" 确定 " class="button"/>
- <input type="reset" value=" 重置 " class="button" />
- </div>
- </form>
- </div>
- </div>
- <div id="footer">
- 共执行 9 个查询,用时 0.025161 秒,Gzip 已禁用,内存占用 3.258 MB<br />
- 版权所有 © 2005-2012 上海商派网络科技有限公司,并保留所有权利。</div>
- </body>
- </html>
- <!--导入在线编辑器-->
- <link href="__PUB__/umeditor1.2.3-utf8-php/themes/default/css/umeditor.css" type="text/css" rel="stylesheet">
- <script type="text/javascript" src="__PUB__/umeditor1.2.3-utf8-php/third-party/jquery.min.js"></script>
- <script type="text/javascript" src="__PUB__/umeditor1.2.3-utf8-php/third-party/template.min.js"></script>
- <script type="text/javascript" charset="utf-8" src="__PUB__/umeditor1.2.3-utf8-php/umeditor.config.js"></script>
- <script type="text/javascript" charset="utf-8" src="__PUB__/umeditor1.2.3-utf8-php/umeditor.min.js"></script>
- <script type="text/javascript" src="__PUB__/umeditor1.2.3-utf8-php/lang/zh-cn/zh-cn.js"></script>
- <script>
- UM.getEditor('goods_desc', {
- initialFrameWidth: "100%",
- initialFrameHeight: 150
- });
- </script>
edit.html
注:1、显示logo图片
2、radio之类的选择按钮
5、在模型GoodsModel.class.php中添加_before_update()用于处理图片
思路:判断是否有图片上传,类似_before_insert()中处理logo的方法;先获取id,处理图片,在插入数据库前删除原图数据unlink
- //钩子方法_before_update:更新前插入,在添加前会自动调用
- protected function _before_update(&$data, $option)
- {
- $id = $option['where']['id']; //要修改的商品的ID
- /**************处理LOGO******************/
- //判断有没有选择图片
- if($_FILES['logo']['error'] == 0){
- $upload = new \Think\Upload(); //实例化上传类
- $upload->maxSize = 1024*1024; //1M
- $upload->exts = array('jpg', 'gif', 'png', 'jpeg'); //设置附件上传类型
- $upload->rootPath = './Public/Uploads/'; //设置附件上传根目录
- $upload->savePath = 'Goods/'; //设置附件上传子目录
- //上传文件
- $info = $upload->upload();
- if(!$info){
- //获取失败原因把错误信息保存到模型的error属性中,然后在控制器里调用$model—>getError()获取错误信息并由控制器打印
- $this->error = $upload->getError();
- return FALSE;
- }else{
- //上传成功,并生成缩略图
- //先拼成原图上的路径
- $logo = $info['logo']['savepath'] . $info['logo']['savename'];
- //拼出缩略图的路径和名称
- $mbiglogo = $info['logo']['savepath'] .'mbig_'. $info['logo']['savename'];
- $biglogo = $info['logo']['savepath'] .'big_'. $info['logo']['savename'];
- $midlogo = $info['logo']['savepath'] .'mid_'. $info['logo']['savename'];
- $smlogo = $info['logo']['savepath'] .'sm_'. $info['logo']['savename'];
- $image = new \Think\Image();
- //打开要生成缩略图的图片
- $image->open('./Public/Uploads/'.$logo);
- //生成缩略图
- $image->thumb(700, 700)->save('./Public/Uploads/'.$mbiglogo);
- $image->thumb(350, 350)->save('./Public/Uploads/'.$biglogo);
- $image->thumb(130, 130)->save('./Public/Uploads/'.$midlogo);
- $image->thumb(50, 50)->save('./Public/Uploads/'.$smlogo);
- /**************把路径放到表单中*****************/
- $data['logo'] = $logo;
- $data['mbig_logo'] = $mbiglogo;
- $data['big_logo'] = $biglogo;
- $data['mid_logo'] = $midlogo;
- $data['sm_logo'] = $smlogo;
- /*******插入数据前,删除原来的图片*************/
- //先查询出原来的图片的路径
- $oldLogo = $this->field('logo,mbig_logo,big_logo,mid_logo,sm_logo')->find($id);
- //从硬盘上删除图片
- unlink('./Public/Uploads/'.$oldLogo['logo']);
- unlink('./Public/Uploads/'.$oldLogo['sm_logo']);
- unlink('./Public/Uploads/'.$oldLogo['mid_logo']);
- unlink('./Public/Uploads/'.$oldLogo['big_logo']);
- unlink('./Public/Uploads/'.$oldLogo['mbig_logo']);
- }
- }
- //过滤这个字段 【必须对所有输入内容进行过滤】
- $data['goods_desc'] = removeXSS($_POST['goods_desc']);
- }
_before_update
商品删除
思路:通过id,把数据从数据库中删除,同时删除对应的logo图片
1、在lst.html中添加删除按钮,onclick控制是否确认删除,避免失误操作
2、在商品控制器GoodsController.class.php中添加删除方法
- //删除商品表单
- public function delete()
- {
- $model = D('goods');
- if(FALSE !== $model->delete(I('get.id')))
- $this->success('删除成功!', U('lst'));
- else
- $this->error('删除失败!原因:'.$model->getError());
- }
3、在模型类GoodsModel.class.php中添加一个删除之前的钩子方法,删除五个LOGO图片【_before_delete()】
- //钩子方法_before_delete:删除前的操作
- protected function _before_delete($option)
- {
- $id = $option['where']['id']; //要删除的商品的ID
- //先查询出原来的图片的路径
- $oldLogo = $this->field('logo,mbig_logo,big_logo,mid_logo,sm_logo')->find($id);
- //从硬盘上删除图片
- unlink('./Public/Uploads/'.$oldLogo['logo']);
- unlink('./Public/Uploads/'.$oldLogo['sm_logo']);
- unlink('./Public/Uploads/'.$oldLogo['mid_logo']);
- unlink('./Public/Uploads/'.$oldLogo['big_logo']);
- unlink('./Public/Uploads/'.$oldLogo['mbig_logo']);
- }
PHP.26-TP框架商城应用实例-后台3-商品修改、删除的更多相关文章
- PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改
删除分类 删除一个分类的同时,其所有子分类都删除 在控制器CategoryCtroller.class.php中添加删除函数(delete) 在分类模型中添加钩子函数_before_delete()[ ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
- PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)
商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete: ...
- 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.建表字 ...
- PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析
RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...
- PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...
随机推荐
- Debug get/set property
1. Select "Debug -> Windows -> Breakpoints" from VS menu. 2. Click "New -> B ...
- wechat开发笔记之1.线上环境搭建与测试
Wechat开发笔记 线上环境搭建: 申请一个wechat公众平台. 手机个人微信可以用webwechat来测试. Website:https://web.weixin.qq.com/ 手机客户端扫一 ...
- Struts2_Namespace
namespace 决定了action的访问路径,默认为"",可以接收所有路径的action,当精确的index.action处理不了的时候,就会找到这个action;namesp ...
- Java实习问题记录
1. $(window).height() 获取屏幕高度2. $("#chartbottomdiv").width() 某个控件的属性 用"."3. // 保留 ...
- 动态原型模式 js
动态原型模式 function Person(name,age){ this.name = name; this.age = age; if(typeof this.sayName != " ...
- 罗技G502设置
这个鼠标默认内置了3个档案模式,用G9键来调节. p2 蓝色 1个灯 p2 蓝色 2个灯 p3 蓝色 3个灯 如此循环设置
- IOS SVN源代码管理工具使用
01. 源代码管理工具概述(PPT)===================================================* 源代码管理工具的作用:# 能追踪一个项目从诞生一直到 ...
- DFS+BFS(POJ3083)
题目链接:http://poj.org/problem?id=3083 解题报告:这个题目,搜最短路,没有什么问题.优先走左边,走右边,有很多说法,思路大概都相同,都是记录当前朝向,根据数学公式(i+ ...
- BZOJ 2824: [AHOI2012]铁盘整理
BZOJ 2824: [AHOI2012]铁盘整理 标签(空格分隔): OI-BZOJ OI-搜索 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ...
- 2018.7.15 解决css中input输入框点击时去掉外边框方法
.input_css{ background:no-repeat 0 0 scroll #EEEEEE; border:none; outline:medium; }