2010-10-30 4 views
0

Je suis en train de créer un système de gestion de fichiers Je stocke tous les noms de fichiers et de fichiers dans la base de données (MySQL) J'essaie d'ajouter des dossiers dans la base de données Je voulais montrer tous les dossiers pour montrer là la position correcte, voici un exemple:créer un répertoire de fichiers en 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... 

J'ai actuellement la table mysql layed comme ça

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 

Voici ce qui suit code que j'ai jusqu'à présent

$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>  '; 
             } 


        } 
        } 

que quelqu'un peut me aider ou me conduire s'il vous plaît sur le droit chemin

+0

Ce qui ne fonctionne pas? Est-ce juste une question sur le formatage du HTML, ou avez-vous d'autres problèmes? – kijin

+0

au moment où je reçois les dossiers ce qui n'est pas un sous-dossiers et puis je veux ajouter les sous-dossiers de mysql la même table dans le bon dossier et je veux le faire pour tous les sous-dossiers dans la table dossiers dans les sous-dossiers – Rickstar

+0

Dans la structure mysql, la colonne sub_folder_id contient en fait une référence au dossier PARENT. Nom de colonne confond un peu :) – Kel

Répondre

1

Votre structure a plus d'un niveau d'imbrication? votre approche n'est pas tout à fait correcte. pour représenter une structure arborescente comme votre html, vous devez au moins utiliser un algorithme récursif. Pour ma part, il est préférable de mapper le jeu de données renvoyé au tableau php et d'implémenter la fonction de recherche approfondie.

2

Quelques suggestions:

  • "sub_folder_id" devrait être "parent_id", parce qu'il est vraiment l'ID du dossier parent que vous stockez là.
  • Utilisez null au lieu de -1 pour indiquer "none" ou "not applicable".
  • "Folder1-Sub1" est en fait le nom complet du sous-dossier, n'est-ce pas? (Aucun problème.)
  • Que font les colonnes "file_name" et "file_folder_id"? Les fichiers n'ont pas besoin d'un traitement séparé, ils ont un nom et un dossier parent (c'est-à-dire le dossier auquel ils appartiennent) tout comme les sous-dossiers. Traitez les fichiers comme des dossiers, et ajoutez simplement une colonne séparée pour indiquer le type de l'entrée: 'fichier', 'dir', 'lien', etc.
0

Voici une solution récursive par laquelle vous pouvez faire un Propre une solution propre qui vous permettra d'imprimer la profondeur illimitée de l'arbre. J'écris l'algorithme, vous pouvez facilement mettre le code:

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); 
Questions connexes