• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-22) 27次浏览 已收录 0个评论

本篇文章介绍了,在php中无限极分类实现的两种解决方法。需要的朋友参考下

method of classify one

<?php/*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 "<script>location.href='ok.php?act=list'</script>";        }else{            echo "<script>alert('添加失败');</script>";        }    }//如果不等于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 "<script>location.href='ok.php?act=list'</script>";        }else{            echo "<script>alert('添加失败');</script>";        }    }}elseif($act=="add"){?><form method="post" action="?ac=addok">新分类名称:    <input type="text" name="type_name"><br/>当前分类:<select name="type_id" >    <option  value="0">顶级分类</option>    <?php    //循环遍历分类    while($res = mysql_fetch_assoc($sql1)){        //查找 ","号出现的次数        $m=substr_count($res['type_p_id'],",");        //使用空格替换 "空格"        $strpad = str_pad("",$m*8*2," ");        if($m==1){            $sele = "disabled";        }else{            $sele = "";        }    ?>        <option value="<?php echo $res['type_id']?>"><?php  echo $strpad.$res['type_name']?></option>    <?php    }    ?>    </select><br />    <input type="submit"  value="添加"/></form><?php                }elseif($act == "list"){    //获取列表根据 分类层进行排序    $sql = "select * from types order by type_p_id";    $res = mysql_query($sql);?><table width="50%" style="font-size:12px;margin-left:20%;"><tr><td>id</td><td>分类名</td><td>path路径</td><td>操作</td></tr><?phpwhile($arr = mysql_fetch_assoc($res)){?><tr>    <td><?php echo $arr['type_id']?></td>    <td><?php echo $arr['type_name']?></td>    <td><?php echo $arr['type_p_id']?></td>    <td ><a href="?ac=edit&type_id=<?php echo $arr['type_id'];?>">编辑</a> |        <a href="?ac=del&type_id=<?php echo $arr['type_id'];?>">删除</a<p style="color:transparent">本文来源gao!%daima.com搞$代*!码$网3</p><strong>搞代gaodaima码</strong>></td></tr><?php     }?></table><input type="button"  value="添加"  onclick="(location.href='?ac=add')"><?php                }elseif($act == "edit"){    $id = $_GET['type_id'];    $sql = "select *from  `types` where type_id=$id ";    $res = mysql_query($sql);    echo "<form  method='post'  action='?ac=edit_ok'>";    while($arr = mysql_fetch_assoc($res)){        echo "当前名称:{$arr['type_name']}"."<br />";        echo "新名称:<input type='text'  name='n_type_name'  >"."<br />";        echo "<input type='hidden'  value={$arr['type_id']} name='id'/>";    }    echo "<input type='submit'  value='更新'>";    echo "</form>";}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 "<script>location.href('ok.php?act=list')</script>";    }else{        echo "<script>location.href('ok.php?act=list')</script>";    }}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 "<script>location.href('ok.php?act=list')</script>";    }else{        echo "<script>alert('删除失败');</script>";    }}?>

types表:

下面是效果图:

method of classify two

<?php/*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);?><form method="post" action="?ac=addok">新分类名称:    <input type="text" name="type_name"><br/>当前分类:<select name="type_id" >    <option  value="0">顶级分类</option>    <?php    //循环这个数组将分类正确输出    for($i=0;$i<count($types);$i++){    ?>        <option value="<?php echo $types[$i]['type_id']?>"><?php  echo $types[$i]['new_type_name']?></option>    <?php    }    ?>    </select><br />    <input type="submit"  value="添加"/></form><?php}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 "<script>location.href='two.php?act=list'</script>";    }else{        echo "<script>alert('添加失败');</script>";    }}elseif($act == "list"){    //获取列表根据 分类层进行排序    $sql = "select * from type order by concat(type_id,type_p_id)";    $res = mysql_query($sql);?><table width="50%" style="font-size:12px;margin-left:20%;"><tr><td>id</td><td>分类名</td><td>path路径</td><td>操作</td></tr><?phpwhile($arr = mysql_fetch_assoc($res)){?><tr>    <td><?php echo $arr['type_id']?></td>    <td><?php echo $arr['type_name']?></td>    <td><?php echo $arr['type_p_id']?></td>    <td ><a href="?ac=edit&type_id=<?php echo $arr['type_id'];?>">编辑</a> |        <a href="?ac=del&type_id=<?php echo $arr['type_id'];?>">删除</a></td></tr><?php}?></table><input type="button"  value="添加"  onclick="(location.href='?ac=add')"><?php }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 "<script>location.href='two.php?act=list'</script>";    }else{            mysql_query("ROLLBACK");        echo "<script>alert('删除失败');</script>";    }}?>

type表:

下面是效果图

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php无限极分类实现的两种解决方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址