咔叽网单游戏基地

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 29|回复: 0

[PHP编程] php+mysql实现的无限分类方法类定义与使用示例

[复制链接]
  • TA的每日心情
    无聊
    2019-5-27 08:20
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    1万

    主题

    1万

    帖子

    6万

    积分

    帖子管理员

    Rank: 9Rank: 9Rank: 9

    积分
    68254
    发表于 2020-7-6 22:11:09 | 显示全部楼层 |阅读模式
    本文实例讲述了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=del&cid='.$id.'" rel="external nofollow" >Del</a> <a >Edit</a> </li>';
    }
    ?>
    </ul>

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

    原文地址:https://www.jb51.net/article/187431.htm
    回复

    使用道具 举报

    QQ|手机版|小黑屋|咔叽网单

    GMT+8, 2020-8-14 01:35

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表