无限级分类技术

19 篇文章 0 订阅

数据库表

创建item表

CREATE TABLE `item` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 `parentid` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

表中数据:

这里写图片描述

系统截图

这里写图片描述

详细代码

数据库连接文件
conn.php

<?php
$mysqli = new mysqli("localhost","root","","test");
$mysqli->set_charset('utf8');

列表页
list.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>目录列表</title>
    <style type="text/css">
    div{
        width: 800px;
        margin: 50px auto;
        line-height: 30px;
    }
    </style>
</head>
<?php 
    include_once 'conn.php';
    include 'getdir.php';
    if(isset($_GET['id']) && $_GET['id'] > 0){
        $id = intval($_GET['id']);

        $query = "SELECT * FROM item WHERE parentid=$id";
        $mysqli_res = $mysqli->query($query);
        $items = $mysqli_res->fetch_all(MYSQLI_ASSOC);

        $query = "SELECT * FROM item WHERE id=$id";
        $res = $mysqli->query($query);
        $line = $res->fetch_assoc();
        $parentid = $line['parentid'];
        $dir = getdir($id);
        $mysqli->close();
    }else{
        $query = "SELECT * FROM item WHERE parentid=0";
        $mysqli_res = $mysqli->query($query);
        $items = $mysqli_res->fetch_all(MYSQLI_ASSOC);
        $mysqli->close();
        $dir = './';
        $parentid = '.';
        $id = 0;
    }
?>
<body>
<div>
<table border="1" width="800px">
    <tr>
        <td align='center'>当前目录: <?php echo $dir;?></td><td colspan="2" align='center'><a href='list.php?id=<?php echo $parentid;?>'>上一级</a></td>
    </tr>
    <?php 
    foreach ($items as $item){    
        echo "<tr align='center'>";
        echo '<td><a href="./list.php?id='.$item['id'].'">'.$item['name'].'</a></td><td><a href="./add.php?id='.$item['id'].'">添加</a></td><td><a href="./del.php?id='.$item['id'].'">删除</a></td>';
        echo "</tr>";
    }
    ?>
    <tr>
       <td align='center' colspan='3'><a href='add.php?id=<?php echo $id?>'>添加目录</a></td>
    </tr>
</table>
</div>
</body>
</html>

添加子目录页面
add.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>添加目录</title>
    <style type="text/css">
    div{
        width: 800px;
        margin: 50px auto;
        line-height: 30px;
    }
    </style>
</head>
<?php 
    include 'conn.php';
    if(isset($_GET['id'])){
       $id = intval($_GET['id']);
       $query = "SELECT * FROM item WHERE id=$id";
       $res = $mysqli->query($query);
       $line = $res->fetch_assoc();
       $dir = $line['name'];
    }
?>
<body>
<div>
<table border="1" width="800px">
    <tr>
        <td align='center'>在目录:  <?php echo $dir;?>/ 下创建子目录</td>
    </tr>
    <tr>
    <td align='center'>
    <form method='POST' action='./insert.php'>
       <input type='hidden' name='parentid' value="<?php echo $id;?>">
       <input type='text' name='name' /> <input type='submit' value='提交' />
    </form>
    </td>
    </tr>
</table>
</div>
</body>
</html>

执行添加目录操作
insert.php

<meta charset='utf-8'>
<?php 
include_once 'conn.php';
if(isset($_POST['name'])&&isset($_POST['parentid'])){
    $parentid = intval($_POST['parentid']);
    $name = addslashes($_POST['name']);
    $query = "INSERT INTO item(name,parentid) VALUES('$name',$parentid)";
    $res = $mysqli->query($query);
    if($res){
        header("Location:list.php?id=$parentid");
    }else{
        echo "<script>alert('插入失败');history.go(-1);</script>";
    }
}

获取当前目录地址
getdir.php

include_once 'conn.php';
$dir = array();
function getdir($id){
    $query = "SELECT * FROM item WHERE id=$id";
    global $mysqli;
    global $dir;
    $res = $mysqli->query($query);
    $line = $res->fetch_assoc();
    $tempdir = $line['name']."/";
    array_unshift($dir, $tempdir);
    if($line['parentid']>0){
        return getdir($line['parentid']);
    }else{
        $str = implode($dir);
        return $str;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值