• 技术文章 >php教程 >php手册

    php无限极分类实现的两种解决方法

    2016-06-13 11:53:15原创320
    今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样。

    method of classify one

    复制代码 代码如下:


    /*

    reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑
    没有进行移动操作 小弟能力有限忘大家多多包涵啊

    第一种方法:CREATE TABLE `types` (
    `type_id` int(11) NOT NULL AUTO_INCREMENT,
    `type_name` varchar(20) NOT NULL,
    `type_p_id` varchar(64) NOT NULL DEFAULT '-',
    PRIMARY KEY (`type_id`),
    KEY `type_name` (`type_name`),
    KEY `tname` (`type_name`)
    ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
    注:
    这里没做字段有效验证;
    type_id 表示主键自增
    type_name 表示分类名
    type_p_id 表示分类路径 这里的分类路径是 上层父类的分类路径加上此类的主键id 用逗号隔开
    */
    error_reporting(7);
    header("Content:text/html;charset=utf-8");
    //这里先进行操作的判断
    $arr = array('list','add','del','edit','addok','edit_ok');
    $act= in_array($_GET['ac'],$arr)?$_GET['ac']:$arr[0];
    //连接数据库
    $conn = mysql_connect("localhost","root","root")or die('数据库连接失败');
    mysql_select_db("study",$conn);
    mysql_query("set names utf8");
    //根据分类层进行排序
    $sql = "select * from types order by type_p_id";
    $sql1 = mysql_query($sql);
    //添加分类
    if($act == "addok"){
    $type_id = $_POST['type_id'];
    $type_name = $_POST['type_name'];
    //如果等于0表示是跟目录
    if($type_id=="0"){
    $sql = "insert into types set type_name = '{$type_name}'";
    $res = mysql_query($sql);
    $id = mysql_insert_id();
    $sql = "update types set type_p_id = '$id,' where type_id=$id";
    $res = mysql_query($sql);
    if( mysql_affected_rows ()>0){
    echo "";
    }else{
    echo "";
    }
    }//如果不等于0
    else{
    //根据typeid 找到 该id下的type_p_id
    $sql = "select type_p_id from `types` where type_id = $type_id";
    $res = mysql_query($sql);
    $res = mysql_fetch_assoc($res);
    $type_id = $res['type_p_id'];

    //先将名称插入进去
    $sql = "insert into types set type_name = '{$type_name}'";
    $res = mysql_query($sql);
    //获取最后执行的id 然后进行数据更新 主要更新 type_p_id
    $id = mysql_insert_id();
    $sql = "update types set type_p_id = '$type_id$id,' where type_id=$id";
    $res = mysql_query($sql);
    if($res){
    echo "";
    }else{
    echo "";
    }
    }
    }elseif($act=="add"){
    ?>


    新分类名称:

    当前分类:



    }elseif($act == "list"){
    //获取列表根据 分类层进行排序
    $sql = "select * from types order by type_p_id";
    $res = mysql_query($sql);
    ?>


    while($arr = mysql_fetch_assoc($res)){?>






    }
    ?>
    id分类名path路径操作
    编辑 |
    删除


    }elseif($act == "edit"){
    $id = $_GET['type_id'];
    $sql = "select *from `types` where type_id=$id ";
    $res = mysql_query($sql);
    echo "
    ";
    while($arr = mysql_fetch_assoc($res)){
    echo "当前名称:{$arr['type_name']}"."
    ";
    echo "新名称:"."
    ";
    echo "";
    }
    echo "";
    echo "
    ";
    }elseif($act == "edit_ok"){
    $name = trim($_POST['n_type_name']);
    $id = $_POST['id'];
    if(!empty($name)){
    $sql = "update `types` set type_name='$name' where type_id=$id";
    mysql_query($sql);
    echo "";
    }else{
    echo "";
    }
    }elseif($act == 'del'){
    //这里的删除是要把当前分类 和当前的子分类都要删除 所以用到$id%
    $id = $_GET['type_id'];
    $sql ="delete from `types` where type_p_id like '$id%' ";
    $res = mysql_query($sql);
    if($res){
    echo "";
    }else{
    echo "";
    }
    }
    ?>


    types表:

    下面是效果图:

    method of classify two

    复制代码 代码如下:


    /*

    reader:
    这是自己写的无限极分类实现方法 里面的编辑很简单的(你们懂得。) 就没写了
    没有进行移动操作 小弟能力有限忘大家多多包涵啊
    第二种方法:
    CREATE TABLE `types` (
    `type_id` int(11) NOT NULL AUTO_INCREMENT,
    `type_name` varchar(20) NOT NULL,
    `type_p_id` varchar(64) NOT NULL,
    PRIMARY KEY (`type_id`),
    KEY `type_name` (`type_name`),
    KEY `tname` (`type_name`)
    ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
    注:
    这里没做字段有效验证;
    type_id 表示主键自增
    type_name 表示分类名
    type_p_id 表示分类路径 这里的分类路径是 上层的分类id 如果是当前分类 这个值为 0
    */
    error_reporting(7);
    header("Content-type:text/html;charset=utf-8");
    //这里先进行操作的判断
    $arr = array('list','add','del','edit','addok','edit_ok');
    $act= in_array($_GET['ac'],$arr)?$_GET['ac']:$arr[0];
    //连接数据库
    $conn = mysql_connect("localhost","root","root")or die('数据库连接失败');
    mysql_select_db("study",$conn);
    mysql_query("set names utf8");

    if($act=="add"){
    /**
    * @access public
    * @param array $types 数组 这里的数组要传引用&
    * @param interal $pid 所属的分类上层分类id
    * @param int $path 分类层 默认从0开始每次循环加一
    * @return array();
    */
    function getTypes(&$types=array(),$pid=0,$path=0){
    $sql = "select * from `type` where type_p_id = $pid";
    $res = mysql_query($sql);
    while($row = mysql_fetch_assoc($res)){
    $str = "";
    for($i=0;$i<$path;$i++){
    $str.=" ";
    }
    $row['new_type_name'] = $str.$row['type_name'];
    $types[] = $row;
    getTypes($types,$row['type_id'],($path+1));
    }
    return $types;
    }
    //获取分类 调用函数
    getTypes($types);
    //获取列表根据 分类层进行排序
    $sql1 = "select * from type order by type_id";
    $sqll = mysql_query($sql1);
    ?>


    新分类名称:

    当前分类:



    }elseif($act == "addok"){
    $type_name = $_POST['type_name'];
    $type_id = $_POST['type_id'];
    $sql = "insert into `type`(type_name,type_p_id) values ('$type_name','$type_id')";
    $res = mysql_query($sql);
    if(mysql_insert_id()>0){
    echo "";
    }else{
    echo "";
    }
    }elseif($act == "list"){
    //获取列表根据 分类层进行排序
    $sql = "select * from type order by concat(type_id,type_p_id)";
    $res = mysql_query($sql);
    ?>


    while($arr = mysql_fetch_assoc($res)){?>






    }
    ?>
    id分类名path路径操作
    编辑 |
    删除


    }elseif($act == "del"){
    /***
    这里要删除大分类的时候必须要删除该大分类下的子分类
    所以这里开始mysql事务 mysql 事务开启的方式 事务详细说明请参考
    */
    mysql_query("SET AUTOCOMMIT=1");//开启事务
    $type_id = $_GET['type_id'];
    //删除该分类
    $sqlone = "delete from `type` where type_id=$type_id";
    //删除该分类下的子分类
    $sqltwo = "delete from `type`where type_p_id=$type_id";
    $res1 = mysql_query($sqlone);
    $res2 = mysql_query($sqltwo);
    if($res1 && $res2)
    {
    mysql_query("COMMIT");
    echo "";
    }else{
    mysql_query("ROLLBACK");
    echo "";
    }
    }
    ?>


    type表:

    下面是效果图

    写的确实不怎么样啊 还望大家见谅。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:深入PHP数据缓存的使用说明 下一篇:php gzip压缩输出的实现方法
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• PHP过滤器的实现方法第1/2页• php自动跳转中英文页面• 投票管理程序_php基础• 实现分十页分向前十页向后十页的处理_php基础• PHP数据库操作之基于 Mysqli 的数据库操作类库
    1/1

    PHP中文网