1. 程式人生 > >模仿文件存儲方式,來進行添加、修改、添加子類的操作。

模仿文件存儲方式,來進行添加、修改、添加子類的操作。

nav urn 選中 round ssa 路徑 input rom src

結合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用到實處,很高興,所以需要記住。

模仿文件存儲方式,來進行添加、修改、添加子類的操作。