2010-10-30 136 views
0

我正在制作一个文件管理器系统我将所有文件夹名称和文件存储在数据库中(MySQL)我试图在数据库中添加文件夹,然后向它们添加子文件夹,我想它显示所有文件夹中有正确的 的位置来展示,这里是一个如:在php&mySQL中创建文件目录

Folder1 
    Folder1-Sub1 
     Folder1-Sub1-Sub1 
     Folder1-Sub1-Sub2 
     Folder1-Sub1-ect... 
    Folder1-Sub2 
    Folder1-Sub3 
    Folder1-ect... 

    Folder2 
    Folder2-Sub1 
    Folder2-sub2 

    ect... 

我目前拥有的MySQL表奠定了这样

id folder_name   sub_folder_id file_name file_folder_id 
    1  Folder1     -1    -1    -1 
    2  Folder1-Sub1    1    -1    -1 
    3  Folder1-Sub1-Sub1   2    -1    -1 
    4  Folder1-Sub1-Sub2   2    -1    -1 
    5  Folder1-Sub2    1    -1    -1 
    6  Folder1-Sub3    1    -1    -1 
    7  Folder2     -1    -1    -1 
    8  Folder2-Sub1    7    -1    -1 
    9  Folder2-Sub2    7    -1    -1 

这里是以下代码,我到目前为止

$GetFolders = mysql_query("SELECT * FROM user_filesfolders"); 
        $file_tree = "";  
        while($ShowFolders = mysql_fetch_array($GetFolders)) 
        { 
         if($ShowFolders['folder_name']==-1){ 
          //Dont Add Becuse it not a folder 
         }else{ 
            $file_tree .= ' 
            <tr> 
            <td height="30" colspan="4"><strong> 
            <input type="checkbox" name="checkbox[]" class="folder_checkbox" id="-1" /> 
            <span class="tree_drop" id="-1"> 
            <img src="images/Folder.png" width="15" height="21" /> <span id="status">+</span> '.$ShowFolders['folder_name'].'</strong> 
            </span> 
            </td> 
            </tr>  '; 


      //I need to keep adding floders to folder from mysql 

            $file_tree .= ' 
            <tr> 
            <td height="30" colspan="4"><strong> 
            <input type="checkbox" name="checkbox[]" class="folder_checkbox" id="-1" /> 
            <span class="tree_drop" id="-1"> 
            <img src="images/Folder.png" width="15" height="21" /> <span id="status">+</span> '.$ShowFolders['folder_name'].'</strong> 
            </span> 
            </td> 
            </tr>  '; 
             } 


        } 
        } 

有人可以帮我请,或导致我正确的道路

+0

什么不行?这只是一个关于格式化HTML的问题,还是你有其他问题? – kijin 2010-10-30 06:45:26

+0

此刻我正在获取文件夹什么是不是一个子文件夹,然后我想从子文件夹从MySQL相同的表添加到正确的文件夹,我想做的是为表中的所有子文件夹所以把子子文件夹中的文件夹 – Rickstar 2010-10-30 06:51:19

+0

在mysql架构中,sub_folder_id列实际上包含对PARENT文件夹的引用。列名混淆了一点:) – Kel 2010-10-30 06:53:41

回答

1

贵结构有一个以上的嵌套层次? 你的方法不太正确。为了表示像HTML一样的树结构,你必须至少使用递归算法。至于我,最好将返回的数据集映射到php数组并实现深度搜索功能。

2

几点建议:

  • “sub_folder_id”应为“PARENT_ID”,因为它是真的,你要存储在那里的父文件夹的ID。
  • 使用null而不是-1暗示“无”或“不适用”。
  • “Folder1-Sub1”实际上是子文件夹的全名,对吧? (没有问题。)
  • 什么是“file_name”和“file_folder_id”列在那里?文件不需要单独处理,它们就像子文件夹一样有一个名称和一个父文件夹(即它们所属的文件夹)。对待文件,如文件夹,只需添加一个单独的列,以指示条目的类型:“文件”,“目录”,“链接”等
0

这里是一个递归解决方案,通过它可以使一个整洁干净的解决方案,可让您打印无限深度的树。我正在写算法,你可以很容易地把代码:

function GetTree($parentId) 
{ 
    $html=''; 
    $childHtml=''; 
    1. Get all the children of the parent ID got 
    2. foreach child, 
     $childHtml.=GetTree($ChildId); 

    //so you now have all the child html. you need to wrap it into this parent html now. 

    3. if($parentId==-1) 
     $html=childHtml; 
    4. else 
     $html=$some_html_code_for_this_folder.$html.$some_other_html_code_for_this_folder 

    return $html; 

} 


//use 
echo GetTree(-1);