[RESOLU] Suppression d'un enregistrement en fonction d'un fichier

Eléphanteau du PHP | 13 Messages

21 mars 2022, 14:58


Bonjour, Je m'explique :

le but est de supprimer l'enregistrement si le fichier est supprimer.

Rien ne se passe, même pas de message d'erreur ou de succès.

Besoin d'aide, merci d'avance & bonne après-midi.
class/imageManager.php

class imageManager {

    private $db;
 
    public function __construct($db) {

        $this->setDb($db);
    }

    public function setDb(PDO $dbh) {

        return $this->db = $dbh;
    }
     
    public function deleteImageData($filename) {

        $filename = $_GET['filename'];

        try {

            $sql = 'DELETE FROM images WHERE filename = :filename';

            $stmnt = $this->db->prepare($sql);

            $stmnt->bindParam(':filename', $filename);

            $stmnt->execute();

            $count = $stmnt->rowCount();
 
            return $count;
        }
        catch(PDOException $e) {

            echo 'Une erreur est survenue lors de la suppression des données dans la base.<br>
            Message d\'erreur : ' . $e->getMessage();
        }
    }

    public function deleteFileImage($filename) {

        // Suppression des fichiers : images et vignettes

        $path_images = IMAGE_DIR_PATH . $filename;
        $path_thumbs = THUMB_DIR_PATH . $filename;

        if(file_exists($path_images)) {

            if(!unlink($path_images)) {

                $msg_error[] = 'Une erreur est survenue lors de la supression du fichier image.';
            }
        }
        else {

            $msg_error[] = 'Le fichier image n\'existe pas.';
        }

        if(file_exists($path_thumbs)) {

            if(!unlink($path_thumbs)) {

                $msg_error[] = 'Une erreur est survenue lors de la supression du fichier vignette.';
            }
        }
        else {

            $msg_error[] = 'Le fichier vignette n\'existe pas.';
        }

        if(isset($msg_error)) {
        
            $msg_error = implode (' ', $msg_error);
        
            return $msg_error;
        }
        else {
        
            return true;
        }
    }
}

process/process-delete-image.php

if(isset($_GET['filename'])) {

    $filename = $_GET['filename'];

    $manager = new imageManager($db);
    $deleteImageData = $manager->deleteImageData($filename);

    if(true === $deleteImageData) {

        $manager->deleteFileImage($filename);

        $msg_success = 'Le fichier a bien été supprimé.';
    }
    else {

        $msg_error = $deleteImageData;
    }
}

admin/delete-image.php

require('../include/inc-connexion.php');
require('../include/inc-config.php');
require('../class/imageManager.php');
require('../process/process-delete-image.php');


<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Suppression d'image</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div id="wrapper">
        <h1>suppression d'image</h1>


if(isset($msg_error)) echo $msg_error 
if(isset($msg_success)) echo $msg_success 


</div>
</body>
</html>

Eléphanteau du PHP | 44 Messages

23 mars 2022, 12:32

    public function deleteFileImage($filename) {

        // Suppression des fichiers : images et vignettes

        $path_images = IMAGE_DIR_PATH . $filename;
        $path_thumbs = THUMB_DIR_PATH . $filename;

        if(file_exists($path_images)) {

            if(!unlink($path_images)) {

                $msg_error[] = 'Une erreur est survenue lors de la supression du fichier image.';
            }
        }
        else {

            $msg_error[] = 'Le fichier image n\'existe pas.';
        }

        if(file_exists($path_thumbs)) {

            if(!unlink($path_thumbs)) {

                $msg_error[] = 'Une erreur est survenue lors de la supression du fichier vignette.';
            }
        }
        else {

            $msg_error[] = 'Le fichier vignette n\'existe pas.';
        }

        if(isset($msg_error)) {
        
            $msg_error = implode (' ', $msg_error);
        
            return $msg_error;
        }
        else {
        
            return true;
        }
    }
}

Bonjour, j'avoue ne pas comprendre ta fonction, si tu cherches à supprimer une image/fichier, pourquoi mets-tu !unlink?? :?
Un unlink tout court serait plus approprié non?
Avec switch case derrière pour les erreurs et ça devrait rouler je pense :)
L'illogisme n'est que la logique des autres!

Eléphanteau du PHP | 13 Messages

23 mars 2022, 15:27

Bonjour Guillaume, ça ne fonctionne toujours pas.

ynx
Eléphant du PHP | 443 Messages

23 mars 2022, 19:06

Bonjour,

Il y a bien un paramètre filename dans l'URL lors de l'appel de delete-image.php ?
Ajoute des echo dans ton code pour vérifier que celui-ci est bien exécuté.

Si rien ne se passe ou rien ne s'affiche, tu dois surement avoir une erreur dans ton code. Pense à vérifier le journal d'erreur de PHP : tutoriels/page-blanche-script-php-comme ... 73178.html

Mammouth du PHP | 2215 Messages

23 mars 2022, 20:09

et quand cela fonctionnera, penser à corriger cette monstruosité :
public function deleteImageData($filename) {

$filename = $_GET['filename'];

Eléphanteau du PHP | 13 Messages

24 mars 2022, 12:08

Bonjour, ça y est ça marche.

Mais petit soucis, c'est ce message qui s'affichent -> $message = 'L\'enregistrement et le fichier n\'ont pas bien été supprimer';

require('../include/inc-connexion.php');
require('../include/inc-config.php');
require('../class/imageManager.php');

if(isset($_GET['filename'])) {

    $filename = $_GET['filename'];

    $manager = new imageManager($db);

    $deleteImageData = $manager->deleteImageData($filename);
    $deleteFileImage = $manager->deleteFileImage($filename);

    if(true === $deleteImageData AND true === $deleteFileImage) {

        $msg_success = 'L\'enregistrement et le fichier ont bien été supprimer';
    }
    else {

        $message = 'L\'enregistrement et le fichier n\'ont pas bien été supprimer';
    }
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9350 Messages

24 mars 2022, 12:19

Vérifie les conditions de ton if et la valeur des variables avec var_dump() pour comprendre pourquoi ce message s'affiche
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

24 mars 2022, 17:52

Merci bien, j'ai enfin compris. Bonne soirée.