zoukankan      html  css  js  c++  java
  • 模仿文件存储方式,来进行添加、修改、添加子类的操作。

    结合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=" 800px;">
                <tr>
                    <th style="130px;background: #ccc;height: 40px;">编号</th>
                    <th style="130px;background: #ccc;height: 40px;">类别信息</th>
                    <th style="130px;background: #ccc;height: 40px;">目录级别</th>
                    <th style="130px;background: #ccc;height: 40px;">所属根目录</th>
                    <th style="130px;background: #ccc;height: 40px;">所在路径</th>
                    <th style="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用到实处,很高兴,所以需要记住。

  • 相关阅读:
    消息队列RocketMQ版最佳实践订阅关系一致
    Java8 stream、List forEach 遍历对象 List 对某一字段重新赋值
    SQL的嵌套查询与连接查询
    Xshell7 个人可以申请免费使用正版
    @NotEmpty、@NotBlank、@NotNull 区别和使用
    List集合日常总结
    Time Zone(时区)
    Arrays.asList() 和Collections.singletonList()的区别
    GitBash生成SSH密钥
    Mysql中用SQL增加、删除、修改(包括字段长度/注释/字段名)总结
  • 原文地址:https://www.cnblogs.com/baiyangLI/p/7398769.html
Copyright © 2011-2022 走看看