Lister et supprimer fichier avec php

[Résolu]
Signaler
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010
-
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010
-
Hello à tous. Avec mon petit morceau de code j'ai reussi à lister les fichier d'un dossier, à afficher le résultat sous forme de liste avec lien pour voir le fichier et lien pour supprimer le fichier. Mais impossible de faire fonctionner la suppr. Pourquoi mon lien ne fonctionne pas ????

<?php
$dirname = 'dossier/';
$dir = opendir($dirname);

while($file = readdir($dir)) {
if($file != '.' && $file != '..' && !is_dir($dirname.$file))
{
echo '[suppr.php ] ['.$dirname.$file.' '.$file.']

';
}
}

closedir($dir);
?>

Premiere page liste et affiche les liens

<?php
umask(0000);
chmod(fichier,0777);
unlink($file);
header("Location: page.php");
?>

Seconde page doit supprimer le fichier selctionner avec le lien !!!! Mais non rien

Merci à tous !!!

22 réponses

Messages postés
21
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
30 août 2010

Oui effectivement, j'ai été un peu vite.

Pour résumer:

Page 1:

<?php 
$dirname = 'upload/'; 
$dir = opendir($dirname); 

while($file = readdir($dir)) { 
if($file != '.' && $file != '..' && !is_dir($dirname.$file)) 
{ 
echo '[suppr.php?file='.$file.' ] ['.$dirname.$file.' '.$file.']

'; 
} 
} 

closedir($dir); 
?> 


Page 2:


<?php
$dirname = 'upload/';

if (!empty($_GET['file'])){

if (file_exists($dirname . $_GET['file']))
unlink($dirname . $_GET['file']);

if (file_exists($dirname . 'min/' . $_GET['file']))	
unlink($dirname . 'min/' . $_GET['file']);
}

header("Location: upload.php");
?>


J'ai testé chez moi, ce code fontionne

Tious
Messages postés
26
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
10 février 2010

Salut,

Dans le lien vers la page de suppression, tu as oublié de définir le fichier a supprimer






Tious
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Désolé, mais sa ne fonctionne pas !
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

J'ai essayer plusieurs petit morceaux de code que j'ai vue sur le net mais tjrs rien !!!!
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

<?php
umask(0000);
chmod(fichier,0777);
unlink($file);
header("Location: page.php");
?>

umask => useless
chmod => fichier n'est pas une constante définie et doit donc générer une erreur. De plus, a moins qu'il soit possible d'avoir des fichiers dont apache soit le propriétaire mais ne dispose pas des droits en écriture dessu, c'est useless.
unlink => $file non défini

Bref, un exemple simple :
<?php
if (!empty($_GET['file']) && file_exists($_GET['file']))
  unlink($file);
header("Location: page.php");
?>

Attention, il te faut obligatoirement ajouter certaines protections afin qu'il ne soit possible de supprimer que les fichiers que tu veux.

Bien entendu ceci ne te dispense pas de prendre en compte ce que t'as dit bunbo sur ton oubli de spécification du fichier dans le lien.
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

À mon grand désespoire rien ne fonctionne, même avec vos conseils, et en suivant vos ligne de code, sa ne fonctionne pas !! Pourtant j'ai copier ce que vous m'avez dis mais non rien.
Messages postés
21
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
30 août 2010

Salut,

Est-ce que tu as un message d'erreur?

Peux-tu nous donner le nouveau code que tu as maintenant après les modifications que tu as apporté qu'on puisse voir ce que ca donne?


Tious
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Pour le fichier qui liste avec les liens : (index.php)

<?php 
$dirname = 'dossier/'; 
$dir = opendir($dirname); 

while($file = readdir($dir)) { 
if($file != '.' && $file != '..' && !is_dir($dirname.$file)) 
{ 
echo '[suppr.php?file=$dirname.$file ] ['.$dirname.$file.' '.$file.']

'; 
} 
} 

closedir($dir); 
?>


Pour le fichier de suppr : (suppr.php)

<?php
if (!empty($_GET['file']) && file_exists($_GET['file']))
  unlink($file);
header("Location: upload.php");
?>


Mais non je n'est pas de message d'erreur simplement rien ne bouge sur ma liste !!! Pas cool
Un message d'erreur m'aurais bien aidé, pour au moin savoir ou je dois chercher ....
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Désolé si je reponds pas durant quelques heures mais je par dormir, je viens au Canada, Québec, Montréal et il est ici 4h17 du mat, j'ai déjà bien trainé pour ce soir, merci à tous pour votre aide, je dois finir mon projet, mais même en restant ici jusqu' à tard dans la nuit, je n'est pas trouver !!
Messages postés
21
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
30 août 2010

Ok, t'a un problème dans le lien que je t'ai donné au début ( au fait c'est moi qui t'ai laissé la première réponse sous le pseudo de "bumbo" mais j'ai changé car c'est un peu ringard...)

En fait je ne savais pas que:
[suppr.php?file=$dirname.$file 


donne comme lien:
suppr.php?file=$dirname.$file
En fait les variables php ne sont pas interprétée et son affichées tel quel.

J'ai l'habitude de travailler avec des simples quotes dans mon html et dans ce cas ça fonctionne. C'est bizarre...
donc il te faut remplacer ma ligne par:

] 


Et là normalement il n'y a pas de raison que ca ne marche pas.

Et petite modification du code de morganb12:

<?php
if (!empty($_GET['file']) && file_exists($_GET['file']))
  unlink($_GET['file']);
header("Location: upload.php");
?>




Tious
Messages postés
21
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
30 août 2010

Oups!!

Et petite modification du code de morganb12: 


Je voulais dire TychoBrahe bien sur... ;-)

Tious
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

J'ai l'habitude de travailler avec des simples quotes dans mon html

Tu ne devrais pas, c'est une hérésie.

En gros la ligne est la suivante :
echo '[suppr.php?file=' . $dirname . $file . ' ] [' . $dirname . $file . ' ' . $file . ']

';


Et petite modification du code de morganb12 TychoBrahe

Oops oui, petite étourderie de ma part désolé.
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Un vrai travail de pro pour vous mais pour moi un vrai travail d'apprenti php. Bref merci à tous pour votre aide vraimement cool les boys, une derniere petite question avant de fermer ce post !

<?php
if (!empty($_GET['file']) && file_exists($_GET['file']))
  unlink($_GET['file']);
header("Location: upload.php");
?>


Ce code me permet de bien suppr le fichier transmis dans l'url mais au passage je voudrais suppr son frere jumo qui porte le meme nom mais un dossier plus loin ....

unlink(min/$_GET['file']);

Mais non c'est pas sa, j'aurai essayer.

Ps : vous avez devinez que l'on parle du traitement de photo et de leur miniature
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Depuis quand on met des chaînes de caractères comme ça direct dans du php ? Il faut utiliser des quotes (simples ou doubles) et concaténer :
unlink('min/' . $_GET['file']);
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Autant pour moi, je suis pas encore au top en php. Merci mais non sa ne fonctionne pas !
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

... je passe vite fait dans le coin.
J'ai un gros doute sur le fait que l'affichage des erreurs soit activé chez toi ...
ça : "unlink(min/$_GET['file']); " logiquement ça devrait générer une erreu.

Ajoute donc au tout début de ton code ces lignes :
ini_set('display_errors', 1);
error_reporting(-1);




Cordialement,


Kohntark -
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Le probleme est que mon premier chemin est juste donc la page ne donne aucune erreur, normale .... mais mon second chemin ne fonctionne pas donc la suppr ne se fais pas correctement !
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Non, je n'arrive tjours pas à suppr le ficher dans le dossier min et en meme temps le ficher dans mon dossier principal.

Encore une longue journée devant moi ....
Messages postés
21
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
30 août 2010

Salut,

N'oublis pas que dans ta variable $_GET['file'] tu as le nom du fichier a supprimer + le dossier dans lequel le fichier se trouve

donc si ton fichier s'appelle toto.jpg et que ton dossier s'appelle 'dossier', ta variable $_GET['file'] = dossier\toto.jpg.

Es-tu sur que ta miniature ai le chemin "min\dossier\toto.jpg" ?

Si ce n'est pas le cas, il y a deux solutions:
- Soit tu déplace des miniatures dans un dossier qui a le chemin ci-dessus
- Soit tu ne transmet que le nom du fichier a supprimer et le code de la page suppr.php sera:

<?php
if (!empty($_GET['file']) && file_exists($_GET['file']))
  $dirname = 'dossier/';
 
  unlink($dirname . $_GET['file']);
  unlink($dirname . 'min/' . $_GET['file']);

header("Location: upload.php");
?>


Le problème dans ce cas là, c'est que si un jour tu change de dossier, il ne faudra pas oublier de le changer dans les deux pages....



Tious
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Il y a un dossier upload avec a l'intérieur les photos, et dans ce dossier upload il y a un dossier min avec les miniatures.
Les photos et miniatures on les même nom. Mais ne sont pas dans les même dossier.
Moi je voudrais juste supprimer les deux, photos et min en même temps. Visiblement php me fait du mal ....