Masquer un dossier

Résolu/Fermé
christophedortel Messages postés 3 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 29 juin 2008 - 5 févr. 2008 à 19:20
lud1979 Messages postés 51 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 27 juillet 2013 - 14 févr. 2008 à 12:28
Bonjour à tous !

J'ai un script qui liste et affiche l'arborescence de mon site ...
Dans ce script : une variable permet de masquer le ou les dossiers qu'on met dans cette variable ...

J'aimerais que cette variable fasse l'inverse, c'est à dire affiche les dossiers placés dans la variable et masque les autres .

Voilà la variable :
$cfg[$i]["dossiers_hidden"]=array('DossierB','DossierC');

Donc ici, DossierB et DossierC sont cachés . DossierA, D, ... Z sont visibles ... et je voudrais le contraire !

C'est pour modifier un explorateur de site que j'ai trouvé ici : http://relexplorer.free.fr/ et que je souhaiterais mettre à dispo. pour mes utilisateurs, sans leur donner acces à tous les dossiers evidement !

Chez moi, DossierB est remplacé par $_SESSION['DossierB'], puisque les dossiers des Utilisateurs sont définis dans une base de données .

Voilà, quelqu'un a une solution ?

Merci d'avance

Christophe

7 réponses

lud1979 Messages postés 51 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 27 juillet 2013 7
12 févr. 2008 à 14:03
Salut,

J'ai téléchargé et testé ce script, je sais pas qui a pondu ca mais il est très fort.
Pour répondre à ta question, c'est très simple.
Tu ne touche pas ton fichier index, mais tu configures ton fichier config.inc


1] tu t'arranges à récupérer dans un tableau ($tabnomdosstot[]) la totalité de tes noms de dossier.)
2] dans un autre tableau($tabdossesion[]) , tu t'arranges à récupérer tous les noms de dossier correspondant à ton utilisateur.
3] tu te crée ton tableau de dossier à câcher ($tabsessionhidden[]) au début de config.inc comme ça :


   $cpt = 0;
   $cptbis = 0;
   $cptter = 0;
   $btrouve = 0;
   While ($cpt < siezof ($tabnomdosstot))
   {
        while ($cptbis < siezof ($tabdossesion)) AND ( $btrouve == 0)
        {
            if (strstr ($tabnomdosstot[$cpt], $tabdossesion[$cptbis]))
             {       
                 $btrouve = 1;
              }
          $cptbis ++;
        }

        if( $btrouve == 0)
        {
           $tabsessionhidden [$cptter] = $tabnomdosstot[$cpt];
           $cptter ++;
         }
        $cpt ++;
   }


// La suite de ton config.inc :
$i=-1;
$i++;
$cfg[$i]["user"]='admin1';// nom d'utilisateur de ta session
$cfg[$i]["password"]='admin1';// son mot de passe de ta session
$cfg[$i]["basefic"]='./base1/';// le répertoire de base par rapport à l'application (laisser un / à la fin)
$cfg[$i]["dossiers_hidden"]= $tabsessionhidden ; //** Le tableau hidden que tu viens de construire **//
$cfg[$i]["dossiers_readonly"]=array('readonly','testro1','testro2','testro3');
$cfg[$i]["dossiers_upload"]=array('uploadonly','upload1','upload2');


J'espère avoir bien compris le sens de ta question et y avoir répondu, n'hésite pas à me recontacter

Ludwig
1
christophedortel
12 févr. 2008 à 18:49
Merci Ludwig .

Je vais tester tout ça .
En tout les cas, tu as bien compris ma question . La logique est tout à fait respectée .
Maintenant, je dois faire un beau copier-coller !
Il faut savoir que :
1- je ne suis pas du tout developpeur
2- franchement sous-doué dans le domaine du php ...

donc pourrais-je te recontacter si des messages d'erreure etranges apparaissaient ?

Quoiqu'il en soit je donnerais le résultat ici pour ceux que ça pourrait interresser .

Cordialement

Christophe
0
christophedortel
12 févr. 2008 à 19:13
Et bien voilà la premiere preuve que je suis sous-doué :
Comment creer les 2 tableaux ($tabnomdosstot[]) et ($tabdossesion[]) ?
Et je suis en train de me rendre compte d'une chose : ($tabnomdosstot[]) et le dossier de base ne seraient ils pas les memes ?

Merci

Cordialement

Christophe
0
christophedortel
13 févr. 2008 à 00:10
Voilà le script tel qu'il est actuelement :

$tabnomdosstot[] = $_SESSION['dossier00'];
$tabdossesion[] = $_SESSION['dossier00']; // il faudrait rajouter ici : $_session['dossier01'] ... $_session['dossier05']  

$cpt = 0;
   $cptbis = 0;
   $cptter = 0;
   $btrouve = 0;
   While ($cpt < siezof ($tabnomdosstot))
   {
        while ($cptbis < siezof ($tabdossesion)) AND ( $btrouve == 0)
        {
            if (strstr ($tabnomdosstot[$cpt], $tabdossesion[$cptbis]))
             {       
                 $btrouve = 1;
              }
          $cptbis ++;
        }

        if( $btrouve == 0)
        {
           $tabsessionhidden [$cptter] = $tabnomdosstot[$cpt];
           $cptter ++;
         }
        $cpt ++;
   }


$i=-1;
$i++;
$cfg[$i]["user"]=$_SESSION['login'];// nom d'utilisateur
$cfg[$i]["password"]=$_SESSION['pass'];// son mot de passe
$cfg[$i]["basefic"]=$_SESSION['dossier00'];// le répertoire de base par rapport à l'application (laisser un / à la fin)
$cfg[$i]["dossiers_hidden"]= $tabsessionhidden ; //** Le tableau hidden que tu viens de construire
$cfg[$i]["dossiers_readonly"]=array('Upload','testro1','testro2','testro3');
$cfg[$i]["dossiers_upload"]=array('uploadonly','upload1','upload2');

?>


Et voilà le message d'erreure :

Parse error: syntax error, unexpected T_LOGICAL_AND in /home.10.28/christopq/www/Expconfigbis.inc.php on line 52
( la ligne 52 est la ligne commençant par "while" ) .

Tout ça pour un novice est bien compliqué !
Une idée ?

Merci d'avance

Christophe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lud1979 Messages postés 51 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 27 juillet 2013 7
13 févr. 2008 à 13:23
Oui bien sur tu peux me contacter dq tu veux, mais étant un peu pris par le boulo,
laisse moi un peu de temps pour te répondre.

1°) si tu es sur que $_SESSION['dossier00'] contient la totalité de tes dossiers
et que $_session['dossier01'] contient tous les dossiers "autorisé" de l'utilisateur,
dans l'affirmative, tu inialises mes variables comme ca :
  $tabnomdosstot[] = $_SESSION['dossier00'];
  $tabdossesion[] = $_SESSION['dossier01'];

fais qd même un echo pour vérifier.

2°) J'ai fais effectivement une erreur de parenthèse sur mon 2ème while
(j'ai rien testé je t'ai fais ça en 2 min pour que tu vois l'esprit).
remplace le par ca :
            while (($cptbis < siezof ($tabdossesion)) AND ( $btrouve == 0))

3°) Pour la suite :
$i=-1;
$i++;
$cfg[$i]["user"]=$_SESSION['login'];// nom d'utilisateur
$cfg[$i]["password"]=$_SESSION['pass'];// son mot de passe
$cfg[$i]["basefic"]=$_SESSION['dossier00'];// le répertoire de base par rapport à l'application (laisser un / à la fin)
$cfg[$i]["dossiers_hidden"]= $tabsessionhidden ; //** Le tableau hidden que tu viens de construire
$cfg[$i]["dossiers_readonly"]=array('Upload','testro1','testro2','testro3');
$cfg[$i]["dossiers_upload"]=array('uploadonly','upload1','upload2');


Tel que c'est écrit ca ne marchera certainement pas, il faudra l'intégrer dans le
while général, pour que je puisse mieux t'aider, donne moi le nom de tes viariables
contenant le nom d'utilisateur et mot de passe comme ca je te l'intègre dans le while
et tu ne drais plus être embété .

@+ et bonne journée
Ludwig
0
christophedortel
13 févr. 2008 à 19:06
Voilà tout le script tel qu'il est exactement en ce moment .

<?php require_once('Connections/connect.php'); ?>
<?php
session_start(); // On relaye la session
if (session_is_registered("authentification")&&($_SESSION['privilege'] == "uploader"))
{ 
}
elseif (session_is_registered("authentification")&&($_SESSION['privilege'] == "admin"))
{ 
}
elseif (session_is_registered("authentification")&&($_SESSION['privilege'] == "devel"))
{ 
}
else {
header("Location:../Login.php?erreur=intru"); // redirection en cas d'echec
}
?>
<?php
// Le paramètre 'basefic' est le répertoire de base relative 
//    à la racine de l'application (laisser un / à la fin)
// Attention : Il faut changer ces répertoires (voir l'explication plus bas)
// ----------- 
//    exemple1 : $cfg[$i]['basefic']='../../base/';
//    exemple2 : $cfg[$i]['basefic']='./base/';
// paramétrer aussi les dossier caches, les dossier en readonly, et les dossiers en upload only  
//    Voir l'exemple de admin3 qui n'a pas ce genre de dossier, il a entièrement accès à '/base1'
//----------------------< Attention > ---------------------------
// Le nom du répertoire de base de l'utilisateur ne doit jamais être 
// connu de l'utilisateur si ce répertoire est accessible par http.
// Pourquoi ?. 
// L'application permet d'effectuer des upload de fichiers sur un espace de travail fixé.
// L'utilisateur peut donc y mettre un fichier php (qui est un exécutable). 
// Il ne faut pas qu'il ait la possibilité de l'exécuter. 
// Ceci peut être fait via l'interface web, uniquement s'il connait l'url de son espace de travail.
// S'il y arrive, il pourrait exécuter des scripts php qui permettent de tout effacer sur le serveur.
// Pour évitez ça.
//   - Mettez un nom de répertoire assez compliqué.
//   - Veuillez à ce que ce nom de répertoire n'apparaisse jamais à l'écran 
//     (Même dans un éventuel message d'erreur de fonctionnement).
//     S'il apparait, il ne faut plus utiliser cette application (sauf à des utilisateurs sûr).
//     Envoyez moi, dans ce cas, un contact pour me prévenir du problème.
//------------------------------------------------------------------------
//
$tabnomdosstot[] = $_SESSION['dossier00'];
$tabdossesion[] = $_SESSION['dossier01']; // il faudrait rajouter ici : $_session['dossier01'] ... $_session['dossier05']  

$cpt = 0;
   $cptbis = 0;
   $cptter = 0;
   $btrouve = 0;
   While ($cpt < siezof ($tabnomdosstot))
   {
        while (($cptbis < siezof ($tabdossesion)) AND ( $btrouve == 0))
        {
            if (strstr ($tabnomdosstot[$cpt], $tabdossesion[$cptbis]))
             {       
                 $btrouve = 1;
              }
          $cptbis ++;
        }

        if( $btrouve == 0)
        {
           $tabsessionhidden [$cptter] = $tabnomdosstot[$cpt];
           $cptter ++;
         }
        $cpt ++;
   }


$i=-1;
$i++;
$cfg[$i]["user"]=$_SESSION['login'];// nom d'utilisateur
$cfg[$i]["password"]=$_SESSION['pass'];// son mot de passe
$cfg[$i]["basefic"]=$_SESSION['dossier00'];// le répertoire de base par rapport à l'application (laisser un / à la fin)
$cfg[$i]["dossiers_hidden"]= $tabsessionhidden ; //** Le tableau hidden que tu viens de construire
$cfg[$i]["dossiers_readonly"]=array('Upload','testro1','testro2','testro3');
$cfg[$i]["dossiers_upload"]=array('uploadonly','upload1','upload2');


?>



Et voilà l'erreure :
Fatal error: Call to undefined function: siezof() in /home.10.28/christopq/www/Expconfigbis.inc.php on line 50
( la ligne 50 est celle-ci : While ($cpt < siezof ($tabnomdosstot)) )

Le site est architecturé ainsi :

Racine du Site
--Utilisateurs ( c'est le dossier ou se trouve les sous dossiers propres aux utilisateurs et le dossier Partage )
----UtilisateurA
----UtilisateurB
----UtilisateurC
----Partage ( c'est le dossier ou se trouve les sous dossiers partagés )
------PartageX
------PartageY
------PartageZ

Dans ma bdd, pour l'utilisateur A, "Dossier00" est "Utlisateurs/UtilisateurA" et aucun autre utilisateur .
les "Dossier01" à "Dossiers05" sont des dossier qui peuvent etre partagés et sont ecrit dans la bdd "Utilisateurs/Partage/PartageX" et chaque utilisateur peut avoir 5 dossiers partagés maximum .

Dossier00 ne contient donc pas tous les dossiers autorisés à 1 utilisateur .
Serait il + pratique pour toi que Dossier00 soit le dossier "Utilisateurs" pour tout le monde ? Car ainsi, tous les dossiers sont dans dossier00 et l'application peut faire le filtre pour afficher les dossiers autorisés .
Fais moi savoir si cette modif peut t'arranger ou pas ( et peut etre est elle necessaire ... ) .
Si ça peut t'aider, je peux te faire parvenir une copie d'ecran de la bdd et de l'architecture du site .

Merci encore

Christophe
0
lud1979 Messages postés 51 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 27 juillet 2013 7
14 févr. 2008 à 12:28
1°)Pour l'erreur, j'ai fais une faute de frappe c'est sizeof qu'il faut mettre à la place de siezof.
Attention les même erreur est présente 2 fois dans les 2 boucles while.

2°) En effet comme Dossier00 ne contient pas tous les dossiers autorisés à 1 utilisateur, ca ne fonctionnera pas.

3°) Comme tu me l'a proposé envoie moi l'architecture de ta bdd et de ton site et aussi ton fichier Connections/connect.php En cachant
bien sur tes loggin et pass de connexion à ta bdd.

4°) JE T'AI ENVOYE DANS UN MESSAGE PRIVE AVEC MON MAIL ET MON MSN

5°) Si j'ai bien compris ta config, prenons l'exemple ou c'est l'utilisateur A qui est connecté
il doit seulement voir les dossiers suivants:

utilisateurs/utilisateurA                          DROITS : lecture/écriture UPLOAD DOWNLOAD
utilisateurs/Partage/PartageX/dossier01            DROITS : lecture/écriture UPLOAD DOWNLOAD 
                             "
                             "
utilisateurs/Partage/PartageX/dossier05           DROITS : lecture/écriture UPLOAD DOWNLOAD 
utilisateurs/Partage/PartageY/dossier01           DROITS : lecture seule DOWNLOAD 
                             "
                             "
utilisateurs/Partage/PartageY/dossier05           DROITS : lecture seule DOWNLOAD
utilisateurs/Partage/PartageZ/dossier01           DROITS : lecture seule DOWNLOAD 
                             "
                             "
utilisateurs/Partage/PartageZ/dossier05           DROITS : lecture seule DOWNLOAD


6°) Ton système est-il limité à seulement 3 utilisateurs ou plus?

7°) Tu m'a demandé : Fais moi savoir si cette modif peut t'arranger ou pas ( et peut etre est elle necessaire ... ) .
NON NE CHANGE RIEN
0