• 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 />
    版权所有 &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 ThinkUpload();    //实例化上传类
                    $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 ThinkImage();
                        //打开要生成缩略图的图片
                        $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']);
            }

     

  • 相关阅读:
    【分布式】SpringCloud(2)--SpringCloud分布式架构思想的理解
    【分布式】SpringCloud(1)--基于RestTemplate构建简易微服务调用框架
    【问题管理】-- MyBatis实体类的属性名和数据库列名不一致解决方法汇总
    【开发工具】-- 一文全面解析 Postman 工具
    【数据库】Redis(4)--Redis进阶Redis配置与持久化
    【数据库】Redis(3)--Redis事务、Jedis、SpringBoot整合Redis
    分享的面试问题,java学习教程
    怎么保证缓存和数据库一致性
    详解一条 SQL 的执行过程
    json字符串{"1-3": 29},{"8-": 50},{"8-": 50},返回 1-3天 29,大于8天 100
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/6951733.html
Copyright © 2020-2023  润新知