Aide script

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2008, 19:18

J'ai essayé plusieurs choses, mais ça ne marche pas :/
Test:
<?php
//Script création de dossier  
if(isset($_POST['creation']) && !empty($_POST['nom'])) 
    { 
        //Si un nom de dossier est envoyé, on crée à la racine
        mkdir($_POST['nom'],0777); 
    }
elseif(isset($_POST['creation']) && empty($_POST['nom'])) 
    {
        //Si le nom du dossier est vide
        header("Location:test.php?error=nomvide");
    }
?> 
<html>
    <body> 
        <form name="formulaire_creation" enctype="multipart/form-data" method="post" action="test.php" >  
            <p>Création d'un dossier à la racine</p> 
            <input type="text" name="nom">  
            <input type="submit" name="creation" value="Créer">  
        </form> 
        <?php
            //Si on reçoit l'erreur de nom de dossier vide
            if(isset($_GET['error']) && $_GET['error'] == 'nomvide')
                {
                    echo 'Une erreur est survenue. Le nom du dossier à créer était vide';
                }
        ?>
		<form name="formulaire_envoi_fichier" enctype="multipart/form-data" method="post" action="upload.php">
  <p>Upload un fichier
    <input type="file" name="fichier_choisi">
    <br>
    <br />
  </p>
  <p><br>
    <input type="submit" name="bouton_submit" value="ok">
    
    
    </p>
</form>

<br /><bR /><bR />

<?
$folder = "./";
$dossier = opendir($folder);
while ($Fichier = readdir($dossier)) {
if ($Fichier != "." && $Fichier != "..") {
$nomFichier = $folder."/".$Fichier;
echo $nomFichier."<BR>";
echo '<a href="test.php?chemin='.$nomdudossier.'">'.$nomdudossier.'</a>'; 
}
}
closedir($dossier);
?> 
    </body> 
</html>

Upload:
<?php
if(isset($_GET['chemin']) && !empty($_GET['chemin']))
{
    $chemin = $_GET['chemin'];
   
   //traitement d'un upload :
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
	//nom du fichier choisi:
	$nomFichier    = $_FILES["fichier_choisi"]["name"] ;
	//nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
	//type du fichier choisi:
	$typeFichier   = $_FILES["fichier_choisi"]["type"] ;
	//poids en octets du fichier choisit:
	$poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
	//code de l'erreur si jamais il y en a une:
	$codeErreur    = $_FILES["fichier_choisi"]["error"] ;
	$nom = $_POST['nom'];  
mkdir("/test/".$nom, 0700); 
	//chemin qui mène au dossier qui va contenir les fichiers uplaod:
	$chemin = "./" ;
 

	if(copy($nomTemporaire, $chemin.$nomFichier))
		header("Location: http://wolfsite.fr/test/test.php");
                    
	else
		header("Location: http://wolfsite.fr/test/test.php");
                    exit();
}//fin if
else
{
	
	header("Location: http://wolfsite.fr/test/test.php");
               
}//fin else

    ?>
    <form name="formulaire_upload" enctype="multipart/form-data" method="post" action="test.php?chemin=<?php echo $chemin; ?>">Formulaire d'upload</form>
    <?php
    
}?> 

lux
Eléphant du PHP | 372 Messages

28 mai 2008, 19:36

MMh, dans test.php tu as ça :
echo '<a href="test.php?chemin='.$nomdudossier.'">'.$nomdudossier.'</a>';  
Donc ça renvoie vers test.php !!!

Donc ton script dans upload.php, faut le mettre dans test.php plutôt. Et un autre truc, $nomdudossier n'est défini nulle part. A revoir donc aussi :)

Et ensuite, je vois que tu butes sur des trucs basiques, avant de continuer consulte les quelques tutos sur phpfrance pour t'entraîner. Tu es sur la bonne voie :wink:

Invité
Invité n'ayant pas de compte PHPfrance

29 mai 2008, 18:25

Donc bah voilà j'ai fusionné les 2, j'ai rajouter $nomdudossier = mais je ne sais pas quoi mettre j'ai chercher mais j'ai pas trouver, ensuite j'ai une erreur quelque part mais je ne sais pas où:

Parse error: syntax error, unexpected $end in /homepages/45/d200735635/htdocs/test/test.php on line 97

<html>
    <body> 
           <form name="formulaire_upload" enctype="multipart/form-data" method="post" action="test.php?chemin=<?php echo $chemin; ?>">
            <p>Création d'un dossier à la racine</p> 
            <input type="text" name="nom">  
            <input type="submit" name="creation" value="Créer">  
       
      
		
  <p>Upload un fichier
    <input type="file" name="fichier_choisi">
    <br>
    <br />
  </p>
  <p><br>
    <input type="submit" name="bouton_submit" value="ok">
    
    
    </p>
</form>

<br /><bR /><bR />

<?
//Script création de dossier  
if(isset($_POST['creation']) && !empty($_POST['nom'])) 
    { 
        //Si un nom de dossier est envoyé, on crée à la racine
        mkdir($_POST['nom'],0777); 
    }
elseif(isset($_POST['creation']) && empty($_POST['nom'])) 
    {
        //Si le nom du dossier est vide
        header("Location:test.php?error=nomvide");
    }
 //Si on reçoit l'erreur de nom de dossier vide
            if(isset($_GET['error']) && $_GET['error'] == 'nomvide')
                {
                    echo 'Une erreur est survenue. Le nom du dossier à créer était vide';
                }
				
$nomdudossier = 
$folder = "./";
$dossier = opendir($folder);
while ($Fichier = readdir($dossier)) {
if ($Fichier != "." && $Fichier != "..") {
$nomFichier = $folder."/".$Fichier;
echo $nomFichier."<BR>";
echo '<a href="test.php?chemin='.$nomdudossier.'">'.$nomdudossier.'</a>'; 
}{
closedir($dossier);
}

if(isset($_GET['chemin']) && !empty($_GET['chemin']))
{
    $chemin = $_GET['chemin'];
   
   //traitement d'un upload :
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
	//nom du fichier choisi:
	$nomFichier    = $_FILES["fichier_choisi"]["name"] ;
	//nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
	//type du fichier choisi:
	$typeFichier   = $_FILES["fichier_choisi"]["type"] ;
	//poids en octets du fichier choisit:
	$poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
	//code de l'erreur si jamais il y en a une:
	$codeErreur    = $_FILES["fichier_choisi"]["error"] ;
	$nom = $_POST['nom'];  
mkdir("/test/".$nom, 0700); 
	//chemin qui mène au dossier qui va contenir les fichiers uplaod:
	$chemin = "./" ;
 

	if(copy($nomTemporaire, $chemin.$nomFichier))
		header("Location: http://wolfsite.fr/test/test.php");
                    
	else
		header("Location: http://wolfsite.fr/test/test.php");
                    exit();
}//fin if
else
{
	
	header("Location: http://wolfsite.fr/test/test.php");
               
}//fin else

    ?>


</body> 
</html>

lux
Eléphant du PHP | 372 Messages

29 mai 2008, 21:27

Bon j'ai pas regardé en détail. Déjà, quand il y a une erreur, on regarde ce que c'est, et la ligne. Et ensuite on corrige.

Déjà t'as un
$nomdudossier =
...

Ensuite ton erreur vient certainement à une boucle ou un if mal fermé ... donc il faudrait que tu indentes proprement ton code pour que ce soit plus clair. Je viens de le faire, il m'a fallu 5 minutes pour défricher.

Structure beaucoup plus, indentes, sinon, on va jamais s'en sortir.

Quand tu auras fait tout ça, que la page s'affiche, on se penchera sur la finalisation du fonctionnement du script.

Invité
Invité n'ayant pas de compte PHPfrance

29 mai 2008, 23:34

Erf vraiment désolé, j'ai fais le ménage,, mais il me dit que j'ai une erreur, j'ai tester plein de truc mais sa ne marche pas, peux tu me dire où est mon erreur ? Quel balise ai je oublier de fermer ??

Donc voilà ma page test.php
<form name="formulaire_creation" enctype="multipart/form-data" method="post" action="test.php">
 Upload ce fichier : <input type="file" name="fichier_choisi"><br><br>
 Créer un dossier : <input type="text" name="nom"><br><br>
 <input type="submit" name="bouton_submit" value="Okey">
 
 
 <br><br>
     

<?
// $nomdudossier = (je ne sais pas quoi mettre)
$folder = "./"; 
$dossier = opendir($folder); 
while ($Fichier = readdir($dossier)) { 
if ($Fichier != "." && $Fichier != "..") { 
$nomFichier = $folder."/".$Fichier; 
echo $nomFichier."<BR>"; 
} 

?> 

<br><br>

<?php
//Script création de dossier  
if(isset($_POST['creation']) && !empty($_POST['nom'])) 
    { 
        //Si un nom de dossier est envoyé, on crée à la racine
        mkdir($_POST['nom'],0777); 
    }
elseif(isset($_POST['creation']) && empty($_POST['nom'])) 
    {
        //Si le nom du dossier est vide
        header("Location:test.php?error=nomvide");
    }
 //Si on reçoit l'erreur de nom de dossier vide
            if(isset($_GET['error']) && $_GET['error'] == 'nomvide')
                {
                    echo 'Une erreur est survenue. Le nom du dossier à créer était vide';
                } ?>

<br><br><br>

<?php
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
    //nom du fichier choisi:
    $nomFichier    = $_FILES["fichier_choisi"]["name"] ;
    //nom temporaire sur le serveur:
    $nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
    //type du fichier choisi:
    $typeFichier   = $_FILES["fichier_choisi"]["type"] ;
    //poids en octets du fichier choisit:
    $poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
    //code de l'erreur si jamais il y en a une:
    $codeErreur    = $_FILES["fichier_choisi"]["error"] ;
    
    //chemin qui mène au dossier qui va contenir les fichiers uplaod:
    $chemin = "./" ;
  
    if(copy($nomTemporaire, $chemin.$nomFichier))
        header("Location: http://wolfsite.fr/test.php");
                    
    else
        header("Location: http://wolfsite.fr/test.php");
                    exit();
}

?> 
Je ne sais pas non plus comment définir le $nomdudossier :/
Faut faire un autre bouton de formulaire ?? Je ne vois pas comment sa pourrais marcher :/


Merci de ton aide

Invité
Invité n'ayant pas de compte PHPfrance

29 mai 2008, 23:40

Sans compté que j'ai oublier de fermé

Code : Tout sélectionner

</forme>
^^

lux
Eléphant du PHP | 372 Messages

30 mai 2008, 09:58

Ligne 14 tu as ça :
while ($Fichier = readdir($dossier)) {  
if ($Fichier != "." && $Fichier != "..") {  
$nomFichier = $folder."/".$Fichier;  
echo $nomFichier."<BR>";  
}
Déjà, si tu avais indenté comme je te l'ai dit, tu aurais clairement vu qu'il y a qqch qui ne vas pas :
while ($Fichier = readdir($dossier))
  {  
      if ($Fichier != "." && $Fichier != "..")
         {  
              $nomFichier = $folder."/".$Fichier;  
              echo $nomFichier."<BR>";  
         }

Il ne manque pas quelquechose ? ... je parlais de boucle pas fermée ... regarde bien les {} ...


Ensuite ta page devrait s'afficher. Par contre après faudra voir si le script marche, mais si moi déjà si ta page s'affiche :?:

Invité
Invité n'ayant pas de compte PHPfrance

30 mai 2008, 11:44

Ah ok, je suis en cours la je test ce soir,

Je savais pas ce que voulais dire indenté ^^

J'ai vu qu'il fallais que je ferme le If

Je testerais ce soir !

Invité
Invité n'ayant pas de compte PHPfrance

30 mai 2008, 23:18

Donc voilà ça marche parfaitement, sauf que, pourquoi, quand j'upload un fichier, on est obliger de faire F5 pour qu'il s'affiche alors que, les dossiers, quand on clique sur créer, s'affiche immédiatement ??

C'est quoi la solution ???
<form name="formulaire_creation" enctype="multipart/form-data" method="post" action="test.php">
 Upload ce fichier : <input type="file" name="fichier_choisi"><br>
 <br><input type="submit" name="bouton_submit" value="Uploader">
 </form>

<?php
//Script création de dossier  
if(isset($_POST['creation']) && !empty($_POST['nom'])) 
    { 
        //Si un nom de dossier est envoyé, on crée à la racine
        mkdir($_POST['nom'],0777); 
    }
elseif(isset($_POST['creation']) && empty($_POST['nom'])) 
    {
        //Si le nom du dossier est vide
        header("Location:test.php?error=nomvide");
    }
?> 
 

 
        <form name="formulaire_creation" enctype="multipart/form-data" method="post" action="test.php">  
            <p>Création d'un dossier à la racine</p> 
            <input type="text" name="nom"><br /><br />  
            <input type="submit" name="creation" value="Créer">  
        </form> 
        <?php
            //Si on reçoit l'erreur de nom de dossier vide
            if(isset($_GET['error']) && $_GET['error'] == 'nomvide')
                {
                    echo 'Une erreur est survenue. Le nom du dossier à créer était vide';
                }
        ?> <br>
 
 
 <br><br>
     
<?
$folder = "./";
$dossier = opendir($folder);
while ($Fichier = readdir($dossier)) {
if ($Fichier != "." && $Fichier != "..") {
$nomFichier = $folder."/".$Fichier;
echo $nomFichier."<BR>";
}
}
closedir($dossier);

?> 


<br><br><br>
<?php
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
    //nom du fichier choisi:
    $nomFichier    = $_FILES["fichier_choisi"]["name"] ;
    //nom temporaire sur le serveur:
    $nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
    //type du fichier choisi:
    $typeFichier   = $_FILES["fichier_choisi"]["type"] ;
    //poids en octets du fichier choisit:
    $poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
    //code de l'erreur si jamais il y en a une:
    $codeErreur    = $_FILES["fichier_choisi"]["error"] ;
    
    //chemin qui mène au dossier qui va contenir les fichiers uplaod:
    $chemin = "./" ;

    if(copy($nomTemporaire, $chemin.$nomFichier))
        header("Location: http://wolfsite.fr/test/test.php");
                    
    else
        header("Location: http://wolfsite.fr/test/test.php");
                    exit();
}

?>
Sinon, pour faire des "liens" qui permettent d'aller dans un dossiers, je ne sais pas comment définir le $nomdudossier = ???

Peux tu m'expliquer ça ??

lux
Eléphant du PHP | 372 Messages

31 mai 2008, 17:11

Alors, déjà ça affiche la page, c'est ça de gagné.

J'ai un peu regardé ton code, quelques améliorations sont à faire bien sur, donc je reprends du début une grosse partie déjà.

On évite les balises en majuscules :

Code : Tout sélectionner

<BR>
donc plutôt

Code : Tout sélectionner

<br>
ou mieux même,

Code : Tout sélectionner

<br />
Ensuite ton code pour lister les dossiers/fichiers, je l'ai mis au propre (indenté ...), et ajouté un contrôle pour savoir si c'est un dossier ou un fichier, avec la fonction is_dir.
<? 
// Ecriture de la liste des fichiers et dossiers
$folder = "./"; 
$dossier = opendir($folder); 
while ($Fichier = readdir($dossier))
	{ 
		if($Fichier != '.' && $Fichier != '..')
			{  
				//Si le fichier est un dossier, on mets un lien pour aller dedans
				if(is_dir($Fichier))
					{
						echo '<a href="test.php?chemin='.$Fichier.'">'.$Fichier.'</a><br>';
					}
				//Si le fichier n'est pas un dossier, on l'affiche normalement
				else
					{
						echo $Fichier.'<br>';	
					} 
			} 
	} 
closedir($dossier); 
?>
Ensuite, quand tu cliques sur le lien, il va falloir que la page affiche le contenu du bon dossier maintenant, que nous récupérons donc par la méthode GET :
// ----------- Ecriture de la liste des fichiers et dossiers

//Récupération du dossier courant
if(isset($_GET['chemin']) && !empty($_GET['chemin']))
	{
		$folder = $_GET['chemin'].'/'; //On ajoute le / à la fin
	}
else
	{
		$folder = './'; //Si jamais il n'y a pas de GET, on commence à la racine
	} 
$dossier = opendir($folder); 
while ($Fichier = readdir($dossier))
	{ 
		if($Fichier != '.' && $Fichier != '..')
			{  
				//Si le fichier est un dossier, on mets un lien pour aller dedans
				if(is_dir($folder.$Fichier)) //is_dir à besoin de tout le chemin
					{
						echo '<a href="test.php?chemin='.$folder.$Fichier.'">'.$Fichier.'</a><br>';
					}
				//Si le fichier n'est pas un dossier, on l'affiche normalement
				else
					{
						echo $Fichier.'<br>';	
					} 
			} 
	} 
closedir($dossier);
Donc la déjà tu peux entrer dans un dossier. Maintenant il faut que quand tu crée le dossier, ça le crée dans le bon dossier non ?

Alors donc le principe est simple, quand tu vas appuyer sur le bouton créer un dossier, il faut que tu récupères le bon chemin dans ton php, pour créer le dossier au bon endroit. Vu que l'envoi des données se fait par la méthode POST, tu dois avoir un champ caché dans ton formulaire qui donne la valeur du chemin au script :
<input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>">
Donc quand tu vas envoyer ton formulaire il faut traiter la demande, avec les vérifications qui s'imposent :
// ------------- Script création de dossier   
if(isset($_POST['creation']) && !empty($_POST['nom']))  
    {  
        //Si un nom de dossier est envoyé, on crée un dossier au bon endroit
        $chemin = $_POST['chemin']; //Récupéré dans le champ caché
        if(empty($chemin)){$chemin = './';} //Si il est vide, on est à la racine
        mkdir($chemin.'/'.$_POST['nom'],0777);
        header("Location:test.php?chemin=".$chemin); //Renvoi vers la bonne page, dans le bon dossier        
    } 
elseif(isset($_POST['creation']) && empty($_POST['nom']))  
    { 
        //Si le nom du dossier est vide 
        header("Location:test.php?error=nomvide"); 
    } 
?>  
Bon voila je viens de tester, ça devrait marcher. Le script qui fonctionne au complet (sans l'uplaod encore) :
<?php 
// ------------- Script création de dossier   
if(isset($_POST['creation']) && !empty($_POST['nom']))  
    {  
        //Si un nom de dossier est envoyé, on crée un dossier au bon endroit  
        $chemin = $_POST['chemin']; //Récupéré dans le champ caché
        if(empty($chemin)){$chemin = './';} //Si il est vide, on est à la racine
        mkdir($chemin.'/'.$_POST['nom'],0777);
        header("Location:test.php?chemin=".$chemin);          
    } 
elseif(isset($_POST['creation']) && empty($_POST['nom']))  
    { 
        //Si le nom du dossier est vide 
        header("Location:test.php?error=nomvide"); 
    } 
?>  
  
<form name="formulaire_creation" enctype="multipart/form-data" method="post" action="test.php">   
    <p>Création d'un dossier à la racine</p>  
    <input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>">
    <input type="text" name="nom"><br /><br />   
    <input type="submit" name="creation" value="Créer">   
</form>  

<?php 
//Si on reçoit l'erreur de nom de dossier vide 
if(isset($_GET['error']) && $_GET['error'] == 'nomvide') 
   {
       echo 'Une erreur est survenue. Le nom du dossier à créer était vide'; 
   } 

// ----------- Ecriture de la liste des fichiers et dossiers

//Récupération du dossier courant
if(isset($_GET['chemin']) && !empty($_GET['chemin']))
	{
		$folder = $_GET['chemin'].'/';
	}
else
	{
		$folder = './'; //Si jamais il n'y a pas de GET, on commence à la racine
	} 
$dossier = opendir($folder); 
while ($Fichier = readdir($dossier))
	{ 
		if($Fichier != '.' && $Fichier != '..')
			{  
				//Si le fichier est un dossier, on mets un lien pour aller dedans
				if(is_dir($folder.$Fichier))
					{
						echo '<a href="test.php?chemin='.$folder.$Fichier.'">'.$Fichier.'</a><br>';
					}
				//Si le fichier n'est pas un dossier, on l'affiche normalement
				else
					{
						echo $Fichier.'<br>';	
					} 
			} 
	} 
closedir($dossier); 
?>

Pour l'upload, ça devrait marcher sur le même principe, tu mets le formulaire d'upload qqpart, avec un champ caché tu récupères les dossier courant, et tu uploades dans le bon dossier. Je te laisse faire cette partie sur la même idée. Juste le scripte la, 61 lignes de code. Je ne vais pas tout faire, je t'ai donné un gros coup de pouce la :wink:

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2008, 00:33

Voilà ça marche :)

Donc je sais pas si on passe a l'effacement d'abord, ou à rendre l'interface un peu plus utilisable ^^
(là on se perd un peu il faut dire ^^http://wolfsite.fr/test/test.php). il faudrait marquer où on est dans les dossiers (le chemin), et ajouter un genre de structure de leur serveur où il pourrais voir tous les dossiers (mais pas les fichier):

Vous êtes : ./dossier1/sousdossier2

Code : Tout sélectionner

--------------------Dossier serveur -------------------Dossier1 ------------sousdossier1 ------------[b]sousdossier2[/b] ------------sousdossier3 -------------------Dossier2 ------------sousdossier1 ------------sousdossier2 ------------sousdossier3
.... enfin bref ^^ et qu'on puisse accèder a ces dossiers par le même moyen qu'on as utiliser avant.
Hypothese: creer un listing de seulement les dossiers et d'utiliser
$GET [chemin]
(mais je suis pas sûr, si c'est ça ou si c'est pas ça peux tu m'aider ?? x) )

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2008, 00:52

bon enfaite j'ai parler trop vite, les dossier se mette bien dans le dossier où on se trouve, mais les fichiers se mette à la racine :/

C'est bizard j'ai portant modifier mon code de mon upload j'ai du oublier de modifier quelque chose :/
<?php 
// ------------- Script création de dossier   
if(isset($_POST['creation']) && !empty($_POST['nom']))  
    {  
        //Si un nom de dossier est envoyé, on crée un dossier au bon endroit  
        $chemin = $_POST['chemin']; //Récupéré dans le champ caché
        if(empty($chemin)){$chemin = './';} //Si il est vide, on est à la racine
        mkdir($chemin.'/'.$_POST['nom'],0777);
        header("Location:test.php?chemin=".$chemin);          
    } 
elseif(isset($_POST['creation']) && empty($_POST['nom']))  
    { 
        //Si le nom du dossier est vide 
        header("Location:test.php?error=nomvide"); 
    } 
?>  <?php
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
        //Si un nom de dossier est envoyé, on crée un dossier au bon endroit  
        $chemin = $_POST['chemin']; //Récupéré dans le champ caché
        if(empty($chemin)){$chemin = './';} //Si il est vide, on est à la racine
     
        header("Location:test.php?chemin=".$chemin);          
    } 
elseif(isset($_POST['fichier_choisi']) && empty($_POST['name']))  
    { 
        //Si le nom du dossier est vide 
        header("Location:test.php?error=nomvide"); 
    } 
?>  

  <form name="formulaire_upload" enctype="multipart/form-data" method="post" action="test.php"> 
 <input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>">
 Upload ce fichier : 
    
 <input type="file" name="fichier_choisi"><br>
 
 <br><input type="submit" name="bouton_submit" value="Uploader">
 
 
    <p>Création d'un dossier à la racine</p>  
    <input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>">
    <input type="text" name="nom"><br /><br />   
    <input type="submit" name="creation" value="Créer">   
</form>  

<?php 
//Si on reçoit l'erreur de nom de dossier vide 
if(isset($_GET['error']) && $_GET['error'] == 'nomvide') 
   {
       echo 'Une erreur est survenue. Le nom du dossier à créer était vide'; 
   } 

// ----------- Ecriture de la liste des fichiers et dossiers

//Récupération du dossier courant
if(isset($_GET['chemin']) && !empty($_GET['chemin']))
    {
        $folder = $_GET['chemin'].'/';
    }
else
    {
        $folder = './'; //Si jamais il n'y a pas de GET, on commence à la racine
    } 
$dossier = opendir($folder); 
while ($Fichier = readdir($dossier))
    { 
        if($Fichier != '.' && $Fichier != '..')
            {  
                //Si le fichier est un dossier, on mets un lien pour aller dedans
                if(is_dir($folder.$Fichier))
                    {
                        echo '<a href="test.php?chemin='.$folder.$Fichier.'">'.$Fichier.'</a><br>';
                    }
                //Si le fichier n'est pas un dossier, on l'affiche normalement
                else
                    {
                        echo $Fichier.'<br>';    
                    } 
            } 
    } 
closedir($dossier); 
?> 

 

lux
Eléphant du PHP | 372 Messages

01 juin 2008, 09:42

Alors déjà quand t'as pas collé ton code, entre deux blocs php, tu peux enlever les
?>  <?php 
Ils sont inutiles vu que dans la continuité d'un code php.

Ensuite, le champ caché :
<input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>">
Pas besoin de le mettre en double, ça ne sert à rien dans le même formulaire.

Ensuite je renomme ton input qui confirme l'upload :
<input type="submit" name="uploader" value="Uploader"> 
C'est lui qui va déclencher l'action.

Donc le haut de ton script d'upload sera plutot :
f(isset($_POST['uploader']))
	{
		if(!empty($_FILES["fichier_choisi"]["name"])) 
                       {   
Et ensuit tu déplaces le fichier au bon endroit avec la commande move_uploaded_files de php :
if(move_uploaded_file($_FILES["fichier_choisi"]["tmp_name"],$chemin.'/'.$_FILES["fichier_choisi"]["name"]))
Je l'ai mise dans un if, pour pouvoir soit afficher une erreur si ça ne marche pas, soit renvoyer vers la bonne page si ça a marché.

Voila le code au complet pour cette partie la :
if(isset($_POST['uploader']))
	{
		if(!empty($_FILES["fichier_choisi"]["name"])) 
			{   
        		$chemin = $_POST['chemin']; //Récupéré dans le champ caché 
        		if(empty($chemin)){$chemin = './';} //Si il est vide, on est à la racine 
      				
      			if(move_uploaded_file($_FILES["fichier_choisi"]["tmp_name"],$chemin.'/'.$_FILES["fichier_choisi"]["name"]))
      				{
      					header("Location:test.php?chemin=".$chemin);  
      				}
      			else
      				{  
        				//Si on n'a rien uploadé 
        				header("Location:test.php?error=bigerror");  
    				}        
    		}  
		else   
    		{  
        		//Si on n'a rien uploadé 
        		header("Location:test.php?error=upload");  
    		}  
	}
Ensuite si tu ne veux afficher que les dossiers c'est simple, je te donne une piste, regarde du côté de l'affichage, la ligne de code :
if(is_dir($folder.$Fichier))
Mais note qui si tu caches les fichiers, l'utilisateur ne peut pas voir si son fichier est bien arrivé au bon endroit ... :roll:

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2008, 12:31

Sa marche parfaitement
<?php 
// ------------- Script création de dossier   
if(isset($_POST['creation']) && !empty($_POST['nom']))  
    {  
        //Si un nom de dossier est envoyé, on crée un dossier au bon endroit  
        $chemin = $_POST['chemin']; //Récupéré dans le champ caché
        if(empty($chemin)){$chemin = './';} //Si il est vide, on est à la racine
        mkdir($chemin.'/'.$_POST['nom'],0777);
        header("Location:test.php?chemin=".$chemin);          
    } 
elseif(isset($_POST['creation']) && empty($_POST['nom']))  
    { 
        //Si le nom du dossier est vide 
        header("Location:test.php?error=nomvide"); 
    } 

if(isset($_POST['uploader']))
    {
        if(!empty($_FILES["fichier_choisi"]["name"])) 
            {   
                $chemin = $_POST['chemin']; //Récupéré dans le champ caché 
                if(empty($chemin)){$chemin = '/';} //Si il est vide, on est à la racine 
                      
                  if(move_uploaded_file($_FILES["fichier_choisi"]["tmp_name"],$chemin.'/'.$_FILES["fichier_choisi"]["name"]))
                      {
                          header("Location:test.php?chemin=".$chemin);  
                      }
                  else
                      {  
                        //Si on n'a rien uploadé 
                        header("Location:test.php?error=bigerror");  
                    }        
            }  
        else   
            {  
                //Si on n'a rien uploadé 
                header("Location:test.php?error=upload");  
            }  
    } 
	
//Si on reçoit l'erreur de nom de dossier vide 
if(isset($_GET['error']) && $_GET['error'] == 'nomvide') 
   {
       echo 'Une erreur est survenue. Le nom du dossier à créer était vide'; 
   } 

// ----------- Ecriture de la liste des fichiers et dossiers

//Récupération du dossier courant
if(isset($_GET['chemin']) && !empty($_GET['chemin']))
    {
        $folder = $_GET['chemin'].'/';
    }
else
    {
        $folder = './'; //Si jamais il n'y a pas de GET, on commence à la racine
    } 

?>
<style type="text/css">
<!--
.Style2 {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, Helvetica, sans-serif;
}
.Style4 {font-size: 12px; font-weight: bold; font-family: Arial, Helvetica, sans-serif; color: #990000; }
.Style5 {
	color: #000000;
	font-style: italic;
}
-->
</style>
 


 <form name="formulaire_upload" enctype="multipart/form-data" method="post" action="test.php">
   <p>&nbsp;</p>
   <table width="686" height="137" border="0">
     <tr>
       <td width="340" height="120" bgcolor="#003399">  <input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>">
     <span class="Style2">Upload ce fichier :     </span><br />
     <input type="file" name="fichier_choisi">
     <br>
     
     <br />
     <input type="submit" name="uploader" value="Uploader"> </td>
       <td width="336" bgcolor="#990000"><span class="Style2">Création d'un dossier :</span><br /> 
         <input type="text" name="nom">
     <br />
     <br />   
     <input type="submit" name="creation" value="Créer">   
       </p></td>
     </tr>
   </table>
   </form>  

 <table width="690" height="175" border="0">
   <tr>
     <td width="342" height="171"> <input type="hidden" name="chemin" value="<?php echo $_GET['chemin'];?>"><span class="Style4">Contenu de<span class="Style5"> /teamclashtek<?php echo $_GET['chemin'];?> :</span></span><br />
     <?php
 $dossier = opendir($folder); 
while ($Fichier = readdir($dossier))
    { 
        if($Fichier != '.' && $Fichier != '..')
            {  
                //Si le fichier est un dossier, on mets un lien pour aller dedans
                if(is_dir($folder.$Fichier))
                    {
                        echo '<a href="test.php?chemin='.$folder.$Fichier.'">'.$Fichier.'</a><br>';
                    }
                //Si le fichier n'est pas un dossier, on l'affiche normalement
                else
                    {
                        echo $Fichier.'<br>';    
                    } 
            } 
    } 
closedir($dossier); 

?></td>
     <td width="338"> <p><span class="Style4">Dossier</span><br />
        <?php
 $dossier = opendir($folder); 
while ($Fichier = readdir($dossier))
    { 
        if($Fichier != '.' && $Fichier != '..')
            {  
                //Si le fichier est un dossier, on mets un lien pour aller dedans
                if(is_dir($folder.$Fichier))
                    {
                        echo '<a href="test.php?chemin='.$folder.$Fichier.'">'.$Fichier.'</a><br>';
                    }
                //Si le fichier n'est pas un dossier, on l'affiche normalement
                else
                    {
                        echo $Fichier.'<br>';    
                    } 
            } 
    } 
closedir($dossier); 

?>
     </p>
       </td>
   </tr>
 </table>
 <br /><br />
Je n'arrive pas à afficher seulement les dossiers dans la colonne "dossier" :/

Je ne sais pas où placer mon is_dir.. :/

http://wolfsite.fr/test/test.php

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2008, 12:34

PS : la colonne dossier doit pouvoir afficher tous les dossier et sousdossier et sousousousousoudossiers depuis la racine peux importe dans quel chemin on est. (en gros toujours afficher l'intégralité des dossier contenu depuis la racine)

Sa servira à naviguer facilement dans le serveur.