首页 > 代码库 > PHP.27-TP框架商城应用实例-后台3-商品修改、删除
PHP.27-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(); }
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(); }
修改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="http://www.mamicode.com/__PUB__/Admin/Styles/general.css" rel="stylesheet" type="text/css" /> <link href="http://www.mamicode.com/__PUB__/Admin/Styles/main.css" rel="stylesheet" type="text/css" /> </head> <body> <h1> <span class="action-span"><a href="http://www.mamicode.com/__GROUP__/Goods/goodsList">商品列表</a> </span> <span class="action-span1"><a href="http://www.mamicode.com/__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="http://www.mamicode.com/<?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="http://www.mamicode.com/<?php echo $data[‘goods_name‘];?>"size="30" /> <span class="require-field">*</span></td> </tr> <tr> <td class="label">LOGO: </td> <td> <img src="http://www.mamicode.com/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="http://www.mamicode.com/<?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="http://www.mamicode.com/<?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="http://www.mamicode.com/1" <?php if($data[‘is_on_sale‘]==‘1‘) echo ‘checked="checked"‘; ?> /> 是 <input type="radio" name="is_on_sale" value="http://www.mamicode.com/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="http://www.mamicode.com/确定" class="button"/> <input type="reset" value="http://www.mamicode.com/重置" class="button" /> </div> </form> </div> </div> <div id="footer"> 共执行 9 个查询,用时 0.025161 秒,Gzip 已禁用,内存占用 3.258 MB<br /> 版权所有 © 2005-2012 上海商派网络科技有限公司,并保留所有权利。</div> </body> </html> <!--导入在线编辑器--> <link href=http://www.mamicode.com/"__PUB__/umeditor1.2.3-utf8-php/themes/default/css/umeditor.css" type="text/css" rel="stylesheet"> <script type="text/javascript" src="http://www.mamicode.com/__PUB__/umeditor1.2.3-utf8-php/third-party/jquery.min.js"></script> <script type="text/javascript" src="http://www.mamicode.com/__PUB__/umeditor1.2.3-utf8-php/third-party/template.min.js"></script> <script type="text/javascript" charset="utf-8" src="http://www.mamicode.com/__PUB__/umeditor1.2.3-utf8-php/umeditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="http://www.mamicode.com/__PUB__/umeditor1.2.3-utf8-php/umeditor.min.js"></script> <script type="text/javascript" src="http://www.mamicode.com/__PUB__/umeditor1.2.3-utf8-php/lang/zh-cn/zh-cn.js"></script> <script> UM.getEditor(‘goods_desc‘, { initialFrameWidth: "100%", initialFrameHeight: 150 }); </script>
注: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‘]); }
商品删除
思路:通过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.27-TP框架商城应用实例-后台3-商品修改、删除