Partage
  • Partager sur Facebook
  • Partager sur Twitter

Laravel - Problème de suppression d'images

Sujet résolu
    19 janvier 2020 à 14:24:05

    Bonjour à tous,

    Malgré les divers documentations, je ne parviens pas à supprimer de ma base de données des images.

    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Storage;
    use Image;
    use DB;
    use Validator;
    use Redirect;
    
    
    public function removeImagePost(Request $request)
    {
        $userConnected = \Auth::id();
        if(isset($request['path_image']) && !empty($request['path_image']) && isset($userConnected) && $userConnected != NULL){
            // CHECK USER AND PATH
            $imageRequest = $request['path_image'];
            $imageExists = DB::table('users_images')
            ->where('user_id', '=', $userConnected)
            ->where('path_image', '=', $imageRequest)
            ->exists();
            if(!is_null($imageExists)){
                // INITIALIZE PATH FOR 4 PICTURES
                $imageNameSmall = basename($imageRequest);
                $imageNameMedium = str_replace('_small_', '_medium_', $imageNameSmall);
                $imageNameLarge = str_replace('_small_', '_large_', $imageNameSmall);
                $imageNameOriginal = str_replace('_small_', '_', $imageNameSmall);
                // REMOVE IT
                $requestRemoveImages = Storage::delete(
                    ['/users_images/'. $userConnected . '/mini/' . $imageNameSmall,
                    '/profile_images/'. $userConnected . '/mini/' . $imageNameMedium,
                    '/profile_images/'. $userConnected . '/mini/' . $imageNameLarge,
                    '/profile_images/'. $userConnected . '/' . $imageNameOriginal]
                );
                return response()->json([
                    'success' => true,
                    'requestRemoveImages' => $requestRemoveImages
                ]);    
            }
            else{
                return response()->json([
                    'success' => false
                ]);    
            }
        }
    }


    Les paths des images sont bonnes et pourtant ma requête Ajax me déclare que ma variable $requestRemoveImages (la requête) est à False.

    Merci :)

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2020 à 22:20:09

      Salut Max,

      J'ai lu ton code, et j'ai du mal à comprendre la question. Tu dis que tu souhaites supprimer de ta base de donnée le path des images mais tu ne le fait pas dans le code. La fonction Storage::delete efface les images sur le filesystem. Donc, dans ta table users_images, l'image sera toujours présente.

      Il te manque cela :

       DB::table('users_images')
              ->where('user_id', '=', $userConnected)
              ->where('path_image', '=', $imageRequest)->delete();


      Encore un truc, a la ligne 21, tu testes si la valeur de $imageExists est NULL. Cette variable est défini avec la fonction exists() de la facade DB. La fonction existe retourne une valeur booléenne TRUE ou FALSE. Tu n'aura jamais de valeur à NULL.

      Donc, tu passeras toujours dans la partie qui exécute la suppression.

      -
      Edité par DanielThalmann 21 janvier 2020 à 22:52:52

      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2020 à 22:40:18

        Salut Daniel,

        Merci pour ta réponse :)

        Hé bien, pour ce qui est de la suppression tu as tout à fait raison, c'est parce que je procède par étape.

        En ce qui concerne le exists(), j'ai encore du mal à saisir malgré la documentation.

        J'ai ajouté cela en début de fichier mais ça ne fonctionne pas ...

        namespace Illuminate\Validation\Rules;
        use DatabaseRule;
        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2020 à 23:00:27

          Salut Max,

          Il ne faut pas ajouter le namespace. Tu en as déjà un pour ton fichier. Il 'sagit de :

          namespace App\Http\Controllers;

          Et le DatabaseRule ne sert a rien dans ton cas.

          Je te conseille de lire la doc sur les namespaces pour comprendre à quoi ils servent -> https://www.php.net/manual/fr/language.namespaces.rationale.php.

          Pour le Exist(), as-tu lu cette partie de doc ? https://laravel.com/docs/5.8/queries#aggregates



          • Partager sur Facebook
          • Partager sur Twitter
            21 janvier 2020 à 23:57:51

            Merci pour la doc, c'est toujours bon de se redocumenter :)

            D'ailleurs oui j'essaie de me baser sur cette deuxième documentation depuis un moment mais le résultat n'est pas là.

            Tu verrais la requête exists de quelle façon ?

            Car cela ne fonctionne pas :

            $imageRequest = $request['path_image'];
            $imageExists = DB::table('users_images')
            ->where('user_id', $userConnected)
            ->where('path_image', $imageRequest)
            ->exists();
            if($imageExists != false){

            -
            Edité par MaxQC 21 janvier 2020 à 23:58:21

            • Partager sur Facebook
            • Partager sur Twitter
              22 janvier 2020 à 20:50:08

              Sur ce coup, je ne comprend pas pourquoi cela ne fonctionne pas.

              Je dirais que ton code est juste.

              Es-tu sûr que tu as les bonnes données dans les variables $useConnected et $imageRequest ?

              avec la fonction dd();(https://laravel.com/docs/6.x/helpers#method-dd) tu peux rapidement voir ce qu'il y a dedans.

              • Partager sur Facebook
              • Partager sur Twitter
                23 janvier 2020 à 14:04:20

                J'ai pu vérifier et oui les deux variables sont correctes mais pour autant ça ne fonctionne pas ...

                Je vais devenir dingue ahah :D

                • Partager sur Facebook
                • Partager sur Twitter
                  26 janvier 2020 à 1:56:48

                  Problème réglé...

                  Il venait du fait que Storage amène vers "storage/app" alors que mes images ne sont pas dans un repertoire "app".

                  Un grand merci Daniel pour ton aide :)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Laravel - Problème de suppression d'images

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown