supprimer photos en php a partir d'un lien de la bdd

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 nov. 2011, 18:08

Sérieux lit bien le tuto que j'ai mis tu syntaxe SQL n'est pas correct la !

c'est exactement ce que tu a mis dans le delete.


@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 nov. 2011, 22:45

Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

29 nov. 2011, 10:22

merci pour tes réponses mais je crois que pour moi le bout du tunel est encore long... :cry:
regarde j'ai écrit ca:
      //requête SQL:
$sql1 = "SELECT image 
               FROM memoire 
			      WHERE image = 1";
$req1 = mysql_query($sql1); 	
if (!$req1) {
   echo "Impossible d'exécuter la requête ($sql1) dans la base : " . mysql_error();
   exit;
}
while($data = mysql_fetch_assoc($req1))
		  unlink($data['image']);
il n'y a pas d'erreur mais ne m'efface pas l'image dans le dossier

Eléphanteau du PHP | 20 Messages

29 nov. 2011, 17:13

j'ai fais ca toujours pareil...
      //requête SQL:
$sql1 = "SELECT * FROM `pieces`.`memoire` WHERE `memoire`.`image` = 123";
$result = mysql_query($sql1, $cnx);
while($row = mysql_fetch_row($result))
 unlink($row['image']);
m'en sortirais jamais... #-o

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 nov. 2011, 18:24

On va faire simple est ce que tu comprend ce que tu fait ?


mysql_fetch_row va te donner un tableau qui est indexé numériquement, donc pas de $row['image']
<?php
$sql1 = "SELECT image 
                FROM memoire 
                               WHERE image = 1";
$req1 = mysql_query($sql1);     
if (!$req1) {
    echo "Impossible d'exécuter la requête ($sql1) dans la base : " . mysql_error();
    exit;
}
while($data = mysql_fetch_assoc($req1))
                   unlink($data['image']);
?>
ceci devrait fonctionner.

je pense que tu n'a pas un rapport d'erreur adéquat au développement. Celui ci devrait être E_ALL | E_STRICT (tu peux le voir dans un phpinfo section error_reporting).

poru le modifier, en haut du fichier ajoute : error_reporting(E_ALL_|E_STRICT);

tu devrais ainsi voir tous les messages d'erreurs.

les `sotn inutiles elles permettent de protéger les chaps quand tu utilise un mot réservé (par exemple nommer un champ de table select ou from) ceci étant plus qu'a proscrire a virer :)

select image from memoire where image=123;

la ça sert a rien de selectionner tu a déja ce que tu veux :) (a savoir le 123).

a partir de ta requete delete je dirais simplement
select image from memoire where ID = 123.

test ceci avec phpmyadmin (ou une autre console MySQL).

après suivant la construction de ta table tu n'a peut être pas besoin du while.
si tu a une seule image (ce que je suppose) pour ID = 123 tu n'a pas besoin de while :)

et utilise file_exists pour être certain que le fichier existe avant de le supprimer.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

29 nov. 2011, 21:27

merci pour ta reponse mais ca ne supprime toujours pas l'image dans le dossier :(
j'ai mis ca:
  error_reporting(E_ALL_|E_STRICT);
    
	  //requête SQL:
$sql1 = "SELECT image
                FROM memoire
                               WHERE image = 1";
$req1 = mysql_query($sql1);    
if (!$req1) {
    echo "Impossible d'exécuter la requête ($sql1) dans la base : " . mysql_error();
    exit;
}
$data = mysql_fetch_assoc($req1);
if (file_exists($data['image'])) 
                   unlink($data['image']);
j'ai une erreur ligne 35 qui corresspond a cette ligne:
error_reporting(E_ALL_|E_STRICT);
qui dit:
! ) Notice: Use of undefined constant E_ALL_ - assumed 'E_ALL_' in J:\wamp\www\pieces_detachees\memoires\suppression_memoire\suppression2.php on line 35
Call Stack
# Time Memory Function Location
1 0.0022 680792 {main}( ) ..\suppression2.php:0
La suppression à été correctement effectuée
voila je comprends le code que tu as mis mais je comprends pas pourquoi il n'arrive pas a supprimer l'imag dans le dossier.
pourtant le lien enregistré dans la bdd est correct puisque l'image apparait sur le site...
je te met le chemin qui est enregistré dans la bdd:
/pieces_detachees/memoires/images_uploader/123azeretyLighthouse.jpg
donc elle s'affiche bien quand je veux la faire afficher avec se code:
$resultat =  mysql_query("SELECT * FROM memoire ORDER BY ref");
					if(!$resultat){
die("erreur de requete: " . mysql_error() );
}
$total = mysql_num_rows($resultat);
// si on a récupéré un résultat on l'affiche.
if($total) {

    while($row = mysql_fetch_array($resultat))

echo '<td class="td"><img src="'.$row["image"].'" style="padding: 4 4 4 4px width= "50" height="40";" alt:"image"></a></td>';	

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 nov. 2011, 23:35

pour le message d'erreur c'est parce que j'ai mis un _ de trop c'est E_ALL pas E_ALL_ ;)

tu a "/pieces_detachees/memoires/images_uploader/123azeretyLighthouse.jpg" dans la table.

c'est bien web parce que cela indique le chemin du fichier depuis la racine du site. Mais c'est vu depuis le client, donc avec http://tonsiteatoi.com.
Or quand tu utilise cela dans le système de fichier, c'est pas du tout pareil. le / représente la racine du systeme. et je ne pense pas que ton site soit à la racine.

Donc deux solutions :
- Trouver le chemin complet du script et l'ajouter devant
- Si ton script est dans le répertoire qui contient "/pieces_detachees/memoires/images_uploader/123azeretyLighthouse.jpg" tu peux ajouter un . devant et donc avoir "./pieces_detachees/memoires/images_uploader/123azeretyLighthouse.jpg" et la ça devrait être mieux.

Va falloir gérer correctement le chemin d'accès a ton image.
Tu peux afficher __FILE__ pour avoir le chemin exact du fichier => echo __FILE__;

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

30 nov. 2011, 00:36

merci pour ta reponse je test ca je te tiens au courant

Eléphanteau du PHP | 20 Messages

30 nov. 2011, 00:41

j'ai mis le lien complet ou se trouve l'image
unlink("J:/wamp/www/pieces_detachees/memoires/images_uploader/samsung ddr2Jellyfish.jpg");
mais il ne l'efface pas
j'ai rectifier l'erreur du E_ALL mais me donne pas de message d'erreur :(

Eléphanteau du PHP | 20 Messages

30 nov. 2011, 00:44

apres avoir mis echo __FILE__;

il m'a écrit ca:

J:\wamp\www\pieces_detachees\memoires\suppression_memoire\suppression2.phpLa suppression à été correctement effectuée

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 nov. 2011, 10:40

oui sous windows le séparateur de répertoire c'est le \ pas le / :)

après je pense que ne pas être emmerdé quand tu metteras ton site enligne tu devrais utiliser ../ en début afin d'utiliser un chemin relatif c'est beaucoup plus simple

unlink('../'.$data['image']);

le tout c'est de savoir où tu te trouve dans le système de fichier et où se trouve le fichier à supprimer.

Après partir de la base du système de fichier est généralement le plus simple te pour cela on récupère le chemin complet à la racine du site, et on se trimballe une constante (ou astuce équivalente).


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

30 nov. 2011, 17:09

merci pour ta réponse mais rien y fait l'image est toujours la...
  error_reporting(E_ALL|E_STRICT);
    
	  //requête SQL:
$sql1 = "SELECT image
                FROM memoire
                               WHERE image = 1";
$req1 = mysql_query($sql1);    
if (!$req1) {
    echo "Impossible d'exécuter la requête ($sql1) dans la base : " . mysql_error();
    exit;
}
$data = mysql_fetch_assoc($req1);
if (file_exists($data['image'])) 
                   unlink('../'.$data['image']);
				   echo __FILE__;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 nov. 2011, 20:10

Le ../ faut aussi le mettre dans le file_exists ^^

apprend a debuguer, ajoute des echo un peu partout pour suivre le cheminement du script ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 20 Messages

30 nov. 2011, 23:22

ca me marque ce message d'erreur:
Warning: unlink(../) [function.unlink]: Permission denied in J:\wamp\www\pieces_detachees\memoires\suppression_memoire\suppression2.php on line 48
Call Stack
# Time Memory Function Location
1 0.0017 681280 {main}( ) ..\suppression2.php:0
2 0.0040 690576 unlink ( ) ..\suppression2.php:48
J:\wamp\www\pieces_detachees\memoires\suppression_memoire\suppression2.phpLa suppression à été correctement effectuée
d'apres ce que je peux voir et comprendre ca me dis que je n'ai pas la permission d'acces au dossier...
faudrait il que je rajoute un code pour donner la permission malgres que ce soit sur mon pc en local?
merci pour ton aide et ta patience surtout
je débute dans le php et je n'ai pas vraiment tout assimilé car je pratique pas assez...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 déc. 2011, 14:51

heu juste unlink('../'); ? la c'est normal que ça mette le brin, tu ne va pas supprimer ton répertoire parent.

soit $data['image'] est vide, soit pas ajouté ? => unlink('..'.$data['image']);

Il faut que appréhende bien le chemin que doit parcourir le script pour trouver le fichier ;)

@+
Il en faut peu pour être heureux ......