商品修改{修改页一般与添加页有百分之九十的相似度}

  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 />
版权所有 &copy; 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-商品修改、删除的更多相关文章

  1. PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改

    删除分类 删除一个分类的同时,其所有子分类都删除 在控制器CategoryCtroller.class.php中添加删除函数(delete) 在分类模型中添加钩子函数_before_delete()[ ...

  2. PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

    添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...

  3. PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改

    商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...

  4. PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

    商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete: ...

  5. PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

    权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...

  6. PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表

    表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...

  7. PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码

    Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...

  8. PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析

    RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...

  9. PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理

    库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...

随机推荐

  1. RDF类型报表-PDF中文乱码

    在Oracle R12中,遇到了客户一张客户化的报表: 报表的输出格式是布局在RDF文件(非RTF)中,在并发请求输出时,PDF会出现中文乱码,而HTML和excel显示正常: 根据资料: 查看$OA ...

  2. 利用html5的FormData对象实现多图上传

    <html> <head> <title>FormData多图上传演示</title> </head> <body> <a ...

  3. js&jquery:添加事件的三种方法和常用的一些事件

    一.添加事件的方法 1.EventTarget.addEventListener添加 获取事件目标元素,通过addEventListener函数添加 // Assuming myButton is a ...

  4. PB导出规定格式DBF文件 dBase 3 格式 222个字段

    最近在做一个给卫计委做数据上报的数据接口,接口要求使用奇葩的dBase 3数据库存储上报数据,忙活了几天总算搞好了,使用开发工具为powerbuild 12,222个字段的上报数据表生成DBF文件,写 ...

  5. mysql用一个表更新另一个表

    写法: UPDATE Document, ObservationRequestSET Document.CreateOrganizationName = ObservationRequest.Orga ...

  6. UESTC 1246 拆x3

    用归纳法分析可以知道死循环只有4. 分析一下复杂度,如果n很大并且不是素数,根据基本不等式可以知道 sum factor(n) ≥ 2+n/2 ≍ n/2. 复杂度是O(T*logN*sqrt(N)) ...

  7. 在线文本编辑器cheditor应用实例

    CKEditor 即 FCKEDITOR . FCKeditor是眼下最棒的可见就可以得网页编辑器之中的一个,它採用JavaScript编写.具备功能强大.配置easy.跨浏览器.支持多种编程语言.开 ...

  8. Uva 11235 RMQ问题

    RMQ: 有一个不变的数组,不停的求一个区间的最小值. 使用倍增的思想优化到logN; d(i,j) 表示从 i 开始的,长度为2j的一段元素中的最小值. 那么状态转移方程: d(i,j) = min ...

  9. 轻量级HTTP服务器Nginx(配置与调试Nginx维护Nginx)

    轻量级HTTP服务器Nginx(配置与调试Nginx) 文章来源于南非蚂蚁   Nginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/opt/nginx/conf ...

  10. P1540 机器翻译

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...