Page 1 sur 1

Problème d'ajout de liens pour la suppression de fichier ave

Posté : 04 déc. 2007, 16:45
par hugsgiver
Bonjour a tous :D,
Je sui débutant en php et je sui sur un petit problème depui deux ou trois jours, je vient donc vous demander de l'aide!
A mon avis, c'est juste un problème de syntaxe!!!:evilred:

Voila, j'ai un fichier qui affiche tout les fichier d'un repertoire"t/" avec en dessous, un lien direct vers le fichier afficher!
Pour cela, il n'y a pas de problème, cela fonctionne correctement!
Voici le contenue de ce fichier :
<?php


 
 
$dir_nom = 't/'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers
$direction_site = 'source/';

while($element = readdir($dir)) {
    if($element != '.' && $element != '..') {
        if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
        else {$dossier[] = $element;}
    }
}

closedir($dir);


if(!empty($fichier)){
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant

foreach($fichier as $lien)

  {
{
echo '</br>';
}
            include('t/'.$lien);
{
echo '</br>';
}
{
echo '<a href="t/'.($lien).'">'.$lien.'</a><br />';
}
{
echo '</br>';
}


        }


 }






?>

Sur ce fichier, je voudrais rajouter un fonction qui me permetterais de supimmer le fichier et ce, grace a un lien placé en dessous, pour cela, j'ai pensé a la fonction unlink!

J'ai donc essayé de la rajouter au script fonctionnant :
<?php


 
 
$dir_nom = 't/'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers
$direction_site = 'source/';

while($element = readdir($dir)) {
    if($element != '.' && $element != '..') {
        if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
        else {$dossier[] = $element;}
    }
}

closedir($dir);


if(!empty($fichier)){
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant

foreach($fichier as $lien)
$unlink= unlink('t/'.$lien);

  {
{
echo '</br>';
}
            include('t/'.$lien);
{
echo '</br>';
}
{
echo '<a href="t/'.($lien).'">'.$lien.'</a><br />';
}
{
echo '</br>';
}
{
echo '<a href="$unlink">'.'supprimer' . $lien.'</a><br />';
}
{
echo '</br></br>';
}

        }


 }






?>

Mas je reçoi un message d'erreur du genre permission denied et il n'y a que le dernier fichier du repertoir "t/" qui s'affiche!

Auriez vous une idée pour que le liens de suppression fonctionne et suprimme le fichier séléctionner?
merci de votre aide précieuses:yaisse2:

Posté : 04 déc. 2007, 17:59
par Ryle
Indente ton foreach, tu y verras déjà plus clair (et nous aussi). Par ailleurs, je doute que ton unlink soit bien placé, à moins que tu ne souhaites supprimer tous fichiers au fur et à mesure du parcours du tableau $fichier :)

Par ailleurs la variable $unlink qui est le résultat de ta suppression php devrait être en dehors de la chaine, et surtout n'a rien à faire dans un lien. Tu mélanges l'exécution de php qui se fait sur le serveur avec le résultat qui est présenté à l'utilisateur.

Ce qu'il te faut faire c'est :) :
- lister les fichiers du dossier (ça c'est bon)
- proposer un lien de suppression qui appellera ta page (ou une autre) en spécifiant le nom du fichier à supprimer ( "ta_page.php?supprimeLeFichier=".$lien)
- au début de ta page (ou dans ta page dédiée) vérifier si le paramètre $_GET['supprimeLeFichier'] a été spécifié dans l'url
- si c'est le cas, appeler la fonction unlink en lui spécifiant le chemin et le nom du fichier à supprimer. sinon, ne rien faire :)
- éventuellement réafficher la liste des fichiers pour montrer que celui-ci a bien été supprimé.

Ps : la balise html </br> n'existe pas. Au mieux c'est <br /> :)

re

Posté : 05 déc. 2007, 12:58
par hugsgiver
Merci beaucoup pour ta réponse!

Je crois que je n'ai pas tout compris, mais j'ai esayé comme ceci :
<?php

$dir_nom = 't/'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers
$direction_site = 'source/';

while($element = readdir($dir)) {
    if($element != '.' && $element != '..') {
        if (!is_dir($dir_nom.'/'.$element)) {
            $fichier[] = $element;
        }
        else {
            $dossier[] = $element;
        }
    }
}

closedir($dir);

unlink($_GET);
$_GET['supprimeLeFichier'];

if(!empty($fichier)){
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant

    foreach($fichier as $lien) {
        echo '</br>';
        include('t/'.$lien);
        echo '</br>';
        echo '<a href="t/'.($lien).'">'.$lien.'</a><br />';
        echo '</br>';
        echo '<a href="efface.php?supprimeLeFichier='.($lien).'">'.'supprimer' . $lien.'</a><br />';
        echo '</br></br>';
    }
}

?>
Les liens de supression s'affiche et sont clicable mais si je clic, rien n'est supprimé!

et il y a un message d'erreur sur la page!

voici se qui s'affiche :

Code : Tout sélectionner

Warning: unlink(Array): No such file or directory in d:\www\dechichulien.com\htdocs\download\efface.php on line 21 Fichier Index. Ne pas éditer ! admin.txt supprimeradmin.txt Fichier Index. Ne pas éditer ! after.txt supprimerafter.txt Fichier Index. Ne pas éditer ! dffd|| bas.txt supprimerbas.txt Fichier Index. Ne pas éditer ! || || before.txt supprimerbefore.txt commentaires.txt supprimercommentaires.txt Fichier Index. Ne pas éditer ! || fdffffd || dfdfdfdf conditions.txt supprimerconditions.txt

!!!!!!!

que dois-je faire?
merci beaucoup

ps: le "Fichier Index. Ne pas éditer !", c'est juste le contenue des pages

Posté : 05 déc. 2007, 13:47
par Ryle
J'ai édité ton message pour réindenter ton code (et supprimer toutes les accolades inutiles) et essayer d'y voir un peu plus clair :)

Quand tu cliques sur le lien supprimer, ton script va appeller la page "efface.php" en spécifiant le paramètre "supprimeLeFichier" avec une valeur égale à $lien :
echo '<a href="efface.php?supprimeLeFichier='.($lien).'">'.'supprimer' . $lien.'</a><br />'; 
Il te faut donc dans ta page "efface.php" récupérer la valeur du paramètre qui a été envoyé via l'url (donc via la méthode get) :
if (isSet($_GET['supprimeLeFichier'])) { // si le paramètre a été spécifi" dans l'url, 
  $leNomDuFichierASupprimer = $_GET['supprimeLeFichier']; // tu récupères sa valeur
  unlink($leNomDuFichierASupprimer);  // et tu supprime ce fichier et lui uniquement.
}
Ton unlink($_GET) génère une erreur puisque tu lui demande de supprimer un fichier et au lieu de lui donner le chemin du fichier à supprimer, tu lui passe le tableau $_GET qui contient toutes les variables de l'url, en argument... du coup, message d'erreur : No such file or directory (le fichier ou dossier spécifié n'existe pas)

C'est y plus clair ? :)

Regarde également la modification que j'ai apporté à ton foreach pour l'indenter et virer les accolades inutiles, ton code sera plus lisible et plus facile à comprendre :)

re

Posté : 05 déc. 2007, 14:06
par hugsgiver
Merci oui, c'est plus claire, mais la page "efface.php", c'est la meme page que l'autre!

j'ai donc modifier le code :

Code : Tout sélectionner

<?php $dir_nom = 't/'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.' --> ('point') $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant $fichier= array(); // on déclare le tableau contenant le nom des fichiers $dossier= array(); // on déclare le tableau contenant le nom des dossiers $direction_site = 't/'; while($element = readdir($dir)) { if($element != '.' && $element != '..') { if (!is_dir($dir_nom.'/'.$element)) { $fichier[] = $element; } else { $dossier[] = $element; } } } closedir($dir); unlink($_GET); $_GET['supprimeLeFichier']; if(!empty($fichier)){ sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant foreach($fichier as $lien) { echo '</br>'; include('t/'.$lien); echo '</br>'; echo '<a href="t/'.($lien).'">'.$lien.'</a><br />'; echo '</br>'; echo '<a href="efface.php?supprimeLeFichier='.($lien).'">'.'supprimer' . $lien.'</a><br />'; echo '</br></br>'; } } if (isSet($_GET['supprimeLeFichier'])) { // si le paramètre a été spécifi" dans l'url, $leNomDuFichierASupprimer = $_GET['supprimeLeFichier']; // tu récupères sa valeur unlink($leNomDuFichierASupprimer); // et tu supprime ce fichier et lui uniquement. } ?>

mais maintenant, il y a ceci qui s'affiche :


Warning: unlink(Array): No such file or directory in d:\www\dechichulien.com\htdocs\download\efface.php on line 22

Fichier Index. Ne pas éditer !
admin.txt

supprimeradmin.txt



Fichier Index. Ne pas éditer !
after.txt

supprimerafter.txt



Fichier Index. Ne pas éditer ! dffd||
bas.txt

supprimerbas.txt



Fichier Index. Ne pas éditer ! || ||
before.txt

supprimerbefore.txt



Fichier Index. Ne pas éditer ! || fdffffd || dfdfdfdf
conditions.txt

supprimerconditions.txt


et si je clic sur un lien de suppression, il y a ceci qui s'affiche :



Warning: unlink(Array): No such file or directory in d:\www\dechichulien.com\htdocs\download\efface.php on line 22

Fichier Index. Ne pas éditer !
admin.txt

supprimeradmin.txt



Fichier Index. Ne pas éditer !
after.txt

supprimerafter.txt



Fichier Index. Ne pas éditer ! dffd||
bas.txt

supprimerbas.txt



Fichier Index. Ne pas éditer ! || ||
before.txt

supprimerbefore.txt



Fichier Index. Ne pas éditer ! || fdffffd || dfdfdfdf
conditions.txt

supprimerconditions.txt



Warning: unlink(admin.txt): No such file or directory in d:\www\dechichulien.com\htdocs\download\efface.php on line 41
!!!

je sui complètement perdu, DZL de vous faire perdre votre temps, encor merci de votre aide :idea: :D