• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php+mysql实现的无限分类方法类定义与使用示例

    本文实例讲述了php+mysql实现的无限分类方法类定义与使用。分享给大家供大家参考,具体如下:

    创建数据库以及表

     CREATE DATABASE `sortclass`DEFAULT CHARSET utf8;
     CREATE TABLE IF NOT EXISTS `class` (
     `cid` mediumint(8) unsigned NOT NULL auto_increment,
     `pid` mediumint(8) unsigned NOT NULL,
     `cname` varchar(50) NOT NULL,
     PRIMARY KEY (`cid`),
     KEY `pid` (`pid`)
     ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    
    header("Content-type: text/html; charset=utf-8");
    //连接数据库
    $link = mysql_connect('localhost','root','eric') or die(mysql_error());
    mysql_select_db('sortclass',$link);
    //无限分类类库
    class SortClass{
     var $data = array();
     var $child = array(-1=>array());
     var $layer = array(-1=>-1);
     var $parent = array();
     var $link;
     var $table;
     function SortClass($link, $table){
      $this->setNode(0, -1, '顶极节点');
      $this->link = $link;
      $this->table = $table;
      $node = array();
      $results = mysql_query('select * from '.$this->table.'',$this->link);
      while($node = mysql_fetch_assoc($results)){
       $this->setNode($node['cid'],$node['pid'],$node['cname']);
      }
     }
     function setNode ($id, $parent, $value){
      $parent = $parent?$parent:0;
      $this->data[$id] = $value;
      $this->child[$id] = array();
      $this->child[$parent][] = $id;
      $this->parent[$id] = $parent;
      $this->layer[$id] = !isset($this->layer[$parent])? 0 : $this->layer[$parent] + 1;
     }
     function getList ($tree, $root= 0){
      foreach ($this->child[$root] as $key=>$id){
       $tree[] = $id;
       if ($this->child[$id]) $this->getList($tree, $id);
      }
     }
     function getValue ($id){return $this->data[$id];}
     function getLayer ($id, $space = false){
      return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];
     }
     function getParent ($id){return $this->parent[$id];}
     function getParents ($id){
      while ($this->parent[$id] != -1){
       $id = $parent[$this->layer[$id]] = $this->parent[$id];
      }
      ksort($parent);
      reset($parent);
      return $parent;
     }
     function getChild ($id){return $this->child[$id];}
     function getChilds ($id = 0){
      $child = array($id);
      $this->getList($child, $id);
      return $child;
     }
     function addNode($name,$pid){
      mysql_query("insert into $this->table (`pid`,`cname`) values ('$pid','$name')",$this->link);
     }
     function modNode($cid, $newName){
      mysql_query("update $this->table set `cname`='$newName' where `cid` = $cid",$this->link);
     }
     function delNode($cid){
      $allChilds = $this->getChilds($cid);
      $sql ='';
      if(empty($allChilds)){
       $sql = "delete from $this->table where `cid` = $cid";
      }else{
       $sql = 'delete from '.$this->table.' where `cid` in ('.implode(',',$allChilds).','.$cid.')';
      }
      mysql_query($sql,$this->link);
     }
     function moveNode($cid, $topid){
      mysql_query("update $this->table set `pid`=$topid where `cid` = $cid", $this->link);
     }
    }
    //函数
    function back(){
     echo 'script language="JavaScript">window.location.href="test.php?" rel="external nofollow" +new Date().getTime();/script>';
     exit;
    }
    //声成select
    function makeSelect($array,$formName){
     global $tree;
     $select = 'select name="'.$formName.'">';
     foreach ($array as $id){
      $select.='option value="'.$id.'">'.$tree->getLayer($id, '|-').$tree->getValue($id)."/option>";
     }
     return $select.'/select>';
    }
    $tree = new SortClass($link,'`class`');
    $op = !empty($_POST['op']) ? $_POST['op'] : $_GET['op'];
    if(!empty($op)){
    
     if($op=='add'){
      $tree->addNode($_POST['cname'],$_POST['pid']);
      back();
     }
    
     if($op=='mod'){
      $tree->modNode($_POST['cid'],$_POST['cname']);
      back();
     }
    
     if($op=='del'){
      $tree->delNode($_GET['cid']);
      back();
     }
    
     if($op=='move'){
      $tree->moveNode($_POST['who'],$_POST['to']);
      back();
     }
    }
    $category = $tree->getChilds();
    ?>
     style type="text/css">
      body{font-size:12px;}
      ul{list-style:none;}
      a{cursor:pointer;}
     /style>
     script language="javascript">
      function $(e){return document.getElementById(e);}
      function mod(cid){
       $('cid').value=cid;
       $('op').value='mod';
       $('name').style.border='1px solid red';
      }
     /script>
     form action="test.php" method="post">
      名称:input type="text" id="name" name="cname" /> 添加到:?=makeSelect($category,'pid')?>br />
      input type="hidden" id="op" name="op" value="add" />
      input type="hidden" id="cid" name="cid" />
      input type="submit" value="Submit" />
     /form>
     h3>移动分类/h3>
     form action="test.php" method="post">
      ?=makeSelect($category,'who')?>移动到:?=makeSelect($category,'to')?>
      input type="hidden" id="op" name="op" value="move" />
      input type="submit" value="Submit" />
     /form>
     ul>
    ?php
    foreach ($category as $id){
     echo 'li>'.$tree->getLayer($id, '|- ').$tree->getValue($id).' a href="test.php?op=delcid='.$id.'" rel="external nofollow" >Del/a> a onclick="mod('.$id.')">Edit/a> /li>';
    }
    ?>
    /ul>
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
    • php+mysql实现无限分类实例详解
    • 实现PHP+Mysql无限分类的方法汇总
    • php+mysql数据库实现无限分类的方法
    • php+mysql实现无限级分类 | 树型显示分类关系
    • php+mysql查询实现无限下级分类树输出示例
    • php+mysql不用递归实现的无限级分类实例(非递归)
    • php+mysql实现无限级分类
    • PHP递归写入MySQL实现无限级分类数据操作示例
    上一篇:PHP array_reverse() 函数原理及实例解析
    下一篇:php生成随机数/生成随机字符串的方法小结【5种方法】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php+mysql实现的无限分类方法类定义与使用示例 php+mysql,实现,的,无限,分类,