[RESOLU] Supprimer des images stockées en repertoire avec chemin en BDD

Eléphant du PHP | 133 Messages

05 mars 2021, 10:56

Bonjour
Je suis un grand novice mais je commence à arriver à certaines choses.

J'ai réussi à uploader une image, la stocker dans un répertoire, en faire une copie réduite, la stocker dans un autre répertoire, et les 2 chemins sont stockées en BDD MySQL.

Maintenant quand je supprime la ligne d'enregistrement BDD, j'aimerais au préalable supprimer les images. Comme je connais les chemins je pensais que cela été facile avec unlink mais mon code ne marche pas. Je suis que c'est possible mais comment? Et je compte ici sur votre aide eclairée.

Code : Tout sélectionner

//PREPARATION REQUETE suppression images associées $sql = 'SELECT Logo, Logo_Reduit FROM t_associations WHERE Id_Assos=:num LIMIT 1 '; // On prépare la requête $query = $db->prepare($sql); // On exécute la requête $query->execute(); require_once('../close.php'); $Logo['logo']; $LogoReduit['Logo_Reduit']; $ouverture = opendir("upload"); // Maintenant que le répertoire est ouvert, on le lit : $lecture = readdir($ouverture); unlink($Logo); closedir($ouverture); // On n'oublie pas de fermer ce qu'on a ouvert. ;-} $ouverture = opendir("reduction"); // Maintenant que le répertoire est ouvert, on le lit : $lecture = readdir($ouverture); unlink($LogoReduit); closedir($ouverture); // On n'oublie pas de fermer ce qu'on a ouvert. ;-}
Merci beaucoup

Mammouth du PHP | 2703 Messages

05 mars 2021, 11:47

il n'y a pas besoin d'ouvrir et fermer un repertoire pour pouvoir supprimer un fichier.

echo $Logo;
unlink($Logo);
si l'echo n'affiche pas ce qui est attendu, c'est que $Logo ne contient pas le chemin attendu, que la ligne :
$Logo['logo'];
ne fait pas le job.

Eléphant du PHP | 133 Messages

05 mars 2021, 16:01

D'accord mais pourquoi, il récupére le chemin dans la base la BDD

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

05 mars 2021, 17:33

Salutations !

En l'occurrence ton script exécute une requête sur la base de données, mais il n'en regarde pas le résultat (avec un fetch ou autre) et ne stocke par le résultat dans tes variables $Logo ou $LogoReduit.

Ceci ne sert à rien :
$Logo['logo'];
$LogoReduit['Logo_Reduit'];

Il faut récupérer les informations de ta requête et les mettre dans $Logo et $LogoReduit pour pouvoir ensuite utiliser ces variable dans ton unlink (et comme indiqué par or1, les opendir ou readdir sont inutile. Si tu demandes à php de supprimer un fichier, il va le supprimer, pas besoin de l'accompagner ou de lui tenir la porte ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 133 Messages

05 mars 2021, 21:32

Merci ma requête sert à récupérer les chemins de mes fichiers uploader.
Lorsque je vais supprimer la ligne dans la table je veux supprimer les deux images LOGO et LOGOREDUIT.

Et en tant que débutant, je rame encore sur ce point.
Un petit peu d'aide pour m'éclairer sur les fetch, car j'ai du mal avec.
Merci

Mammouth du PHP | 2703 Messages

05 mars 2021, 21:50

toujours lire l'aide et ses exemples :
https://www.php.net/manual/fr/pdostatement.fetch.php

Eléphant du PHP | 133 Messages

06 mars 2021, 00:30

Merci mais je l'ai lu et je rame quand même un peu

Avatar du membre
Mammouth du PHP | 1564 Messages

06 mars 2021, 19:40

Si tu fais des petits sites, commence avec le style procédural, l'orienté objet est plus complexe que le procédural:

https://www.php.net/manual/fr/mysqli-re ... -assoc.php

Eléphant du PHP | 133 Messages

07 mars 2021, 13:21

Merci pour le conseil et j'ai compris l'usage de fetchColumn();
Enfin, Ouf