模仿文件存储方式,来进行添加、修改、添加子类的操作。

结合Mysql和Php完成的一个简单实例。

过程如下:

①.先连接数据库,因为在多个页面都会使用同一个连接,所以可以将连接数据库的过程封装成函数,方便各个页面调用(include '').代码格式如下:

function getConnect() {
    $host = 'localhost';
    $pwd = 'root';
    $username = 'root';
    $dbname = 'operation';
    $conn = new mysqli($host, $username, $pwd, $dbname);
    if ($conn->connect_error) {
        die("数据库连接失败");
    }
    return $conn;
}
function Select($sql){
    $conn=getConnect();
    $result=$conn->query($sql);
    return $result;
}

②.建立一个数据库表,用来存储数据,并方便的进行相应操作。

③.总共有有五个页面,分别是导航页面,用来进行简单的导航,方便操作;数据表显示页面,进过查询数据库,将查到的数据按照目录的级别进行显示;添加文件类型的页面,用来人工添加文件;修改页面,用来当操作修改时跳转的页面;添加子类页面,用来添加相应的子类,当点击添加子类时,需要跳转的页面。

导航页面:(用的是框架集进行分栏浏览)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>首页</title>
</head>
<frameset cols='20%,*'>
<frame src='navMessage.php' />
<frame src='typeList.php' name='main'/>
</frameset>
</html>

 

这里的navMessage.php是信息指示页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>首页</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
    <body>
        <div>
            <ul>
                <li><a href="typeList.php" target="main">类别管理</a></li>
                <li><a href="addList.php" target="main">类别添加</a></li>
            </ul>
        </div>
    </body>
</html>

数据表显示页面:

<?php
/*
 * 用来查询数据库中的数据,按照目录的形式输出来
 */
include 'getConnect.php';
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>首页</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
    <body>
    <center>
        <h2>查看数据表</h2>
        <hr />
        <table style="width: 800px;">
            <tr>
                <th style="width:130px;background: #ccc;height: 40px;">编号</th>
                <th style="width:130px;background: #ccc;height: 40px;">类别信息</th>
                <th style="width:130px;background: #ccc;height: 40px;">目录级别</th>
                <th style="width:130px;background: #ccc;height: 40px;">所属根目录</th>
                <th style="width:130px;background: #ccc;height: 40px;">所在路径</th>
                <th style="width:200px;background: #ccc;height: 40px;">操作</th>
            </tr>
            <?php

            function showList($id = '/') {
                echo $id;
                $result = Select("select * from type_2  where fid= '$id'");
                while ($row = $result->fetch_assoc()) {
                    ?>
                    <tr>
                        <td><?php echo $row['id'] ?></td>
                        <td><?php echo $row['typename'] ?></td>
                        <td><?php echo $row['class'] ?></td>
                        <td><?php echo $row['fid'] ?></td>
                        <td><?php echo $row['road'] ?></td>
                        <td><a href="action.php?action=del&road=<?php echo $row['road']; ?>&class=<?php echo $row['class'] ?>">删除</a>|<a href='updateList.php?fid=<?php echo $row['fid'] ?>&typename=<?php echo $row['typename'] ?>&road=<?php echo $row['road'] ?>'>修改</a>|<a href="addSon.php?action=addSon&road=<?php echo $row['road'] ?>">添加子类</a></td>
                    </tr>
                    <?php
//               if($row['fid']=='/'){
//                   $row['fid']='';
//                   showList($row['typename']);
//               }else{
//                   showList($row['fid'].'/'.$row['typename']);
                    if ($row['road'] == '/') {
                        break;
                    }
                    showList($row['road']);

//               }
//                echo "|";
                }
            }

            showList();
            ?>
        </table>
    </center>
</body>
</html>

这里的主要思想是递归找到目录及其子目录。

首先需要明白的是这个递归查找的规则是什么:

在我建立的表中,表中信息主要有:id(数据库自动+1),typename(文件名)、fid(它的父级文件所在的目录),road(当前文件的目录)。

也就是递归传进去的参数,是作为查找文件的父目录来查找的,因为如果是传文件的road的话,就会导致每次找的是一个文件,无法将它的所有子类找到,因为每个文件的road是

唯一的。更重要的,也无法进入查找语句,因为第一个首先传进的参数是一个根目录,根目录的当前路径是‘/’,它的typename也是'/',始终是进不了它的子目录的查找范围。

所以递归的规则是:传进去的是即将要查找相应目录的父级目录的文件。

当然,为了实现上面的查找规范,需要满足一定的输入规范。添加文件页面代码如下:

<?php
include "getConnect.php";
/*
 * 当输出将表单数据所在父目录的路径做为参数传过去,则会作为响应子目录的父目录存在
 */
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>首页</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
    <body>
    <center>
        <h2>欢迎添加类别</h2>
        <hr>
        <form action="action.php?action=add" method="post">
            <table>
                <tr>
                    <td>表中父目录</td>
                    <td>

                        <select name="fid">
                            <option value="/">根目录</option>
                            <?php

                            //可以通过
                            function showList($id = '/') {
                                $result = Select("select * from type_2  where fid= '$id'");

                                while ($row = $result->fetch_assoc()) {
                                    ?>
                                    <option value="<?php echo $row['road'] ?>"><?php echo $row['road'] ?></option>
                                    <?php
//                                    if($row['fid']=='/'){
//                                       $row['fid']='';
//                                       showList($row['typename']);
//                                     }else
//                                      showList($row['fid'].'/'.$row['typename']);
                                    if ($row['road'] == '/') {
                                        break;
                                    }
                                    showList($row['road']);
                                }
                            }

                            showList();
                            ?>
                        </select>
                    </td>
                    <td><input type="button" value="新建文件目录"/></td>
                </tr>
                <tr><td>类别名称</td><td><input type='text' name="typename"/></td></tr>
                <tr>
                    <td>选择所属级别</td>
                    <td>
                        <select name='class'>
                            <option value="0">根目录</option>
                            <option value="1">一级子目录</option>
                            <option value="2">二级子目录</option>
                            <option value="3">三级子目录</option>
                            <option value="4">四级子目录</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td><input type="submit" value="添加"/></td>
                    <td><input type="reset" value="重置"/></td>

                </tr>
            </table>
        </form>
    </center>
</body>
</html>

这是用form表单的形式,主要是方便多个数据的。在这个表单中,有一个是选择你所在的根目录的选项,选中的根目录就作为该添加文件的fid,而路径就是传过去的fid 连接新添加文件的typename。在action.php主要是用来操作数据的,里面有对数据的添加、删除以及更新。添加数据的部分代码是:

 case 'add':
            $fid=$_POST['fid'];
            $typename=$_POST['typename'];
            $class=$_POST['class'];
            $result_typename=Select("select typename,class,road from type_2");
            $road=rtrim($fid,'/').'/'.$typename;
            while($typename_s=$result_typename->fetch_assoc()){
                if((($typename_s['road']==$road)&&($typename==$typename_s['typename']))){
                    echo "<script>alert('用户名重复')</script>";
                    die("数据添加失败");
                }
            }
            $result=Select("insert into type_2(typename,fid,class,road)values('$typename','$fid','$class','$road')");
            if($result){
                echo "<script>alert('数据添加成功')</script>";
                echo "<script>window.location='typeList.php'</script>";
            }
            break;

这里需要提到的是添加子类需要跳转的页面,其实和添加类别这个页面是一样的,分开来写诗因为这个添加子类的页面需要获得一个父类路径,就是用来指定需要为哪个文件添加子文件,但是跳转后也可以改变父类的路径,这是灵活的。添加后,页面也是跳转到action.php中的add。添加子类跳转的页面代码如下:

<?php
/*
 * 这里需要一个表单,主要是用来将多份数据传送到指定的页面,并进行处理
 * 表单主要传送的数据有:
 * 需要修改对象的类别名、所属目录级别以及它的fid。id是每个单体的唯一标识,一旦创建就不能修改,所以当需要选中
 * 哪一个实体,即传入它的id号。
 * 修改后的版本:就是更新后的中是选择改变fid();
 * 更新的目的主要是修改数据的父目录,则应该传递的是父目录的名字,因为它存的路径是它的当前路径
 */
include "getConnect.php";
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>用来更新数据</title>
    </head>
    <body>
    <center>
        <h2>欢迎数据的更新</h2>
        <hr>
        <form action="action.php?action=add" method="post">
            <table>
                <tr>
                    <td>选择所在父级目录</td>
                    <td>
                        <select name='fid'>
                             <option value="/">根目录</option>
                            <?php
                            //可以通过
                            function showList($id = '/') {
                                $result = Select("select * from type_2  where fid= '$id'");
                                while ($row = $result->fetch_assoc()) {
                                    ?>
                                       <option <?php if($_GET['road']==$row['road']) echo 'selected'?> value="<?php echo $row['road'] ?>"><?php echo $row['road'] ?></option>
                                    <?php
                                     if($row['road']=='/'){
                                         break;
                                     }
                                      showList($row['road']);
                                }
                            }
                             showList();
                            ?>
                            ?>
                        </select>
                    </td>
                </tr>
                <tr><td>类别名称</td><td><input type='text' name="typename"/></td></tr>
                <tr>
                    <td>选择所属级别</td>
                    <td>
                        <select name='class'>
                            <option value="0">根目录</option>
                            <option value="1">一级子目录</option>
                            <option value="2">二级子目录</option>
                            <option value="3">三级子目录</option>
                            <option value="4">四级子目录</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td><input type="submit" value="修改"/></td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>

更新操作:主要更新所选文件的父级目录和它的文件名,代码如下:

<?php
/*
 * 这里需要一个表单,主要是用来将多份数据传送到指定的页面,并进行处理
 * 表单主要传送的数据有:
 * 需要修改对象的类别名、所属目录级别以及它的fid。id是每个单体的唯一标识,一旦创建就不能修改,所以当需要选中
 * 哪一个实体,即传入它的id号。
 * 修改后的版本:就是更新后的中是选择改变fid();
 * 更新的目的主要是修改数据的父目录,则应该传递的是父目录的名字,因为它存的路径是它的当前路径
 */
include "getConnect.php";
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>用来更新数据</title>
    </head>
    <body>
    <center>
        <h2>欢迎数据的更新</h2>
        <hr>
        <form action="action.php?action=update" method="post">
            <table>
                <tr>
                    <td>选择所在父级目录</td>
                    <td>
                        <select name='road'>
                             <option value="/">根目录</option>
                            <?php
                            //可以通过
                            function showList($id = '/') {
                                $result = Select("select * from type_2  where fid= '$id'");                               
                                while ($row = $result->fetch_assoc()) {
                                    ?>
                             <option <?php if($_GET['road']==$row['road']) echo 'selected'?> value="<?php echo $row['road'] ?>"><?php echo $row['road'] ?></option>
                                    <?php
//                                    if($row['fid']=='/'){
//                                       $row['fid']='';
//                                       showList($row['typename']);
//                                     }else
//                                      showList($row['fid'].'/'.$row['typename']);
                                     if($row['road']=='/'){
                                         break;
                                     }
                                      showList($row['road']);
                                }
                            }
                             showList();
                            ?>
                            ?>
                        </select>
                    </td>
                </tr>
                <tr><td>类别名称</td><td><input type='text' name="typename" value="<?php echo $_GET['typename']?>"/><input type="hidden" name="oldname" value="<?php echo $_GET['road']?>"/></td></tr>
                <tr>
                    <td>选择所属级别</td>
                    <td>
                        <select name='class'>
                            <option value="0">根目录</option>
                            <option value="1">一级子目录</option>
                            <option value="2">二级子目录</option>
                            <option value="3">三级子目录</option>
                            <option value="4">四级子目录</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td><input type="submit" value="更新修改"/></td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>

跳转带action.php中的update:代码如下:

 case 'update':
            $fid=$_POST['road'];      
            $typename=$_POST['typename'];
            $class=$_POST['class'];
            $oldname=$_POST['oldname'];
            $road=rtrim($fid,'/').'/'.$typename;
            /*
             * 因为road是唯一的,road包含该文件的文件名和父类文件名,所以一旦重复就导致文件重复,所以需要先遍历数据库中是否有相同的road
             * 如果有则添加不成
             */
            $result_typename=Select("select typename,class,road from type_2");
            while($typename_s=$result_typename->fetch_assoc()){
                if((($typename_s['road']==$road))){
                    echo "<script>alert('用户名重复')</script>";
                    echo "<script>window.location='typeList.php'</script>";
                    die("所选的路径有相同名字的文件,请更换目录,或文件名字");
                }
            }    
           //用来比较如果修改的后的路径发生重名,则无法完成更新。
            /*
             * 更新需要一个特定的条件,才能将制定的数据进行更新
             */
            $result=Select("update type_2 set typename='$typename',fid='$fid',class='$class',road='$road' where road='$oldname'");
            if($result){
                echo "<script>alert('数据更新成功')</script>";
                echo "<script>window.location='typeList.php'</script>";
            }            
            break;

删除操作,不需要一个专门的中间页面,只要选定某个文件,将它的路径传到action.php管理页面,再使用数据库语句,即可删除,但需要注意的是,当删除的文件下有许多子文件,按照我们的电脑的文件删除原则,一旦这个文件删除,那么它的子文件也会被删除。所以这里需要简单的处理。

代码如下

   case 'del':
            $road=$_GET['road'];
            echo $fid;
            $result=Select("DELETE FROM type_2 WHERE road LIKE '$road%'");
            var_dump($result);
            if($result){
                echo "<script>alert('删除成功')</script>";
                echo "<script>window.location='typeList.php'</script>";
            }
            break;

第一次将like用到实处,很高兴,所以需要记住。

转载于:https://www.cnblogs.com/baiyangLI/p/7398769.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值