一个业余选手写的无限分类Update代码

浏览:1566 发布日期:2013/03/27 分类:求助交流
平时爱好PHP,也很喜欢ThinkPHP,使用ThinkPHP也就一个月的时间,属于业余中的业余水平,这几天一边看着教程一边写了个无限分类,插入和删除都很简单,更新就有点麻烦了,写了一个非递归的更新代码,测试时也没啥问题,总是感觉有点问题,就是不知道哪里有问题,恳请大家有时间帮我看看,多多批评哈,,谢谢各位了!
Mysql数据库:CREATE TABLE IF NOT EXISTS `think_category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `pid` int(11) NOT NULL,
  `path` varchar(100) NOT NULL,
  `pathname` varchar(200) NOT NULL,
  `url` varchar(200) NOT NULL,
  `sort` int(11) NOT NULL,
  `state` int(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

--
-- 转存表中的数据 `think_category`
--

INSERT INTO `think_category` (`id`, `name`, `pid`, `path`, `pathname`, `url`, `sort`, `state`) VALUES
(1, '新闻', 0, '0', '首页', '', 1, 1),
(2, '体育', 0, '0', '首页', '', 2, 1),
(3, '合肥新闻', 1, '0-1', '首页-新闻', '', 1, 1),
(4, '南京新闻', 1, '0-1', '首页-新闻', '', 2, 1),
(5, '网球', 2, '0-2', '首页-体育', '', 1, 1),
(6, '足球', 2, '0-2', '首页-体育', '', 2, 1),
(7, '经济新闻', 3, '0-1-3', '首页-新闻-合肥新闻', '', 4, 1),
(8, '电子新闻', 4, '0-1-4', '首页-新闻-南京新闻', '', 5, 1),
(9, '手机新闻', 4, '0-1-4', '首页-新闻-南京新闻', '', 1, 1),
(10, '水球', 2, '0-2', '首页-体育', '', 3, 1),
(11, '乒乓球', 2, '0-2', '首页-体育', 'http://www.hfnx.com', 3, 1),
(12, '足球明星', 6, '0-2-6', '首页-体育-足球', '', 2, 1),
(13, '足球赛事', 6, '0-2-6', '首页-体育-足球', '', 20, 1);
Html代码:<form method="post" action="__URL__/update">
    名称:<input type="text" name="name"   value="{$listone.name}" /><br />
    分类:<select name="pid">
        <option value="{$listone.pid}" selected="selected">不改变类别</option>
        <option value="0">根目录</option>
    <volist name="list" id="vo">
      <option value="{$vo.id}">
        <php>
             echo str_repeat(' ',$vo[count]);
        </php>
        {$vo.name}
           </option>
    </volist>
    </select><br />
    链接:<input type="text" name="url"  value="{$listone.url}"  /><br />
     排序:<input type="text" name="sort"  value="{$listone.sort}"  /><br />
    <input type="hidden" name="id" value="{$listone.id}" />
    <input type="hidden" name="oldpid" value="{$listone.pid}" />
    <input type="hidden" name="oldpath" value="{$listone.path}" />
    <input type="hidden" name="oldname" value="{$listone.name}" />
    <input type="hidden" name="oldpathname" value="{$listone.pathname}" />
       <input type="submit" value="提交" />
</form>
IndexAction代码    public function edittype($id=0){
        $list = $this->cateall();
        $this->assign("list",$list);  
        $cate = M('Category');
        $listone = $cate->where('id='.$_GET['id'])->find();
        $this->assign("listone",$listone);
        $this->display();
    }
    
    public function update($id=0){
        $Type = D('Category');
        $path = $_POST['oldpath'].'-'.$_POST['id'];//下属path
        $pathname = $_POST['oldpathname'].'-'.$_POST['oldname'];//下属pathname
        $list = $Type->query("select * from think_category where concat(path,'-',id) like '$path-%'" );//找到旧下属
        if($Type->create()){
            $result = $Type->save();
            if($result){
                if(($_POST['pid'] <> $_POST['oldpid']) or ($_POST['name'] <> $_POST['oldname'])){
                    $listnewone = $Type->where('id='.$_POST['id'])->find();//获得父级更新后数据
                    foreach($list as $key => $value){
                        $data['path'] = str_replace($path,$listnewone['path'].'-'.$listnewone['id'],$list[$key]['path']);//替换path
                        $data['pathname'] = str_replace($pathname,$listnewone['pathname'].'-'.$_POST['name'],$list[$key]['pathname']);//替换pathname
                        $data['id'] =  $list[$key]['id'];
                        $Type->save($data);
                    }    
                }
                $this->success('修改成功','__URL__/');
            }else{
                $this->error('修改失败');
            }
        }else{
            $this->error($Type->getError());
        }        
    }
    
    protected function cateall(){
        $Type = M('Category');
        $list = $Type->field("*,concat(path,'-',id) AS bpath")->order('bpath')->select();
        foreach($list as $key => $value){
            $list[$key]['count'] = count(explode("-",$value['bpath']));
        }
        return $list;
    }
最佳答案
评论() 相关
后面还有条评论,点击查看>>