Lister et supprimer fichier avec php

Résolu
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010 - 3 févr. 2010 à 08:05
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010 - 5 févr. 2010 à 19:08
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

tious82 Messages postés 21 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 30 août 2010
5 févr. 2010 à 10:18
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
3
cs_bumbo Messages postés 26 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 10 février 2010
3 févr. 2010 à 08:18
Salut,

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






Tious
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
3 févr. 2010 à 18:37
Désolé, mais sa ne fonctionne pas !
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
3 févr. 2010 à 20:16
J'ai essayer plusieurs petit morceaux de code que j'ai vue sur le net mais tjrs rien !!!!
0

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

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 févr. 2010 à 08:45
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.
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
4 févr. 2010 à 09:34
À 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.
0
tious82 Messages postés 21 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 30 août 2010
4 févr. 2010 à 10:00
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
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
4 févr. 2010 à 10:16
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 ....
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
4 févr. 2010 à 10:19
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 !!
0
tious82 Messages postés 21 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 30 août 2010
4 févr. 2010 à 10:43
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
0
tious82 Messages postés 21 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 30 août 2010
4 févr. 2010 à 10:46
Oups!!

Et petite modification du code de morganb12: 


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

Tious
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 févr. 2010 à 12:39
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é.
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
4 févr. 2010 à 18:57
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 févr. 2010 à 19:09
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']);
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
4 févr. 2010 à 19:25
Autant pour moi, je suis pas encore au top en php. Merci mais non sa ne fonctionne pas !
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 févr. 2010 à 20:35
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 -
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
4 févr. 2010 à 21:42
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 !
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
5 févr. 2010 à 08:12
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 ....
0
tious82 Messages postés 21 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 30 août 2010
5 févr. 2010 à 08:17
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
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
5 févr. 2010 à 08:29
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 ....
0