PHP

Affichage d'une photo supprimée

Non Résolu

Bonjour a tous,

Voila je rencontre un petit problème avec mon code.


J'ai utiliser un système d'upload de photo pour que sur mon site les utilisateur change leurs photos de profile, donc la photo s'envoie elle recupere l'id de l'utilisateur et la renome ainsi avec l'extension jusque la tout vas bien, dans me code je fait pour quelle s'affiche ect tout fonctionne parfaitement.


Voila le code pour la page d'envoie de la photo + le morceaux d'html

avatar.php


<?php
require 'inc/functions.php';
logged_only();
   if(!empty($_POST['avatarpost'])){
                if(!empty($_FILES['avatar']['name'])){
                    $id_avatar = $_SESSION['auth']->id;
                    $tailleMax = 12097152;
                    $extensionValides = array('jpg', 'jpeg', 'gif', 'png');
                    if($_FILES['avatar']['size'] <= $tailleMax){
                        $extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
                        if(in_array($extensionUpload, $extensionValides)){
                            $chemin = "membres/avatars/".$id_avatar.".".$extensionUpload;
                            $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
                            if($resultat){
                                require_once 'inc/db.php';
                                $updateavatar = $pdo->prepare('UPDATE users SET avatar = :avatar, avatar_test = :id WHERE id = :id');
                                $updateavatar->execute(array(
                                    'avatar' => $id_avatar.".".$extensionUpload,
                                    'id' => $id_avatar
                                ));
                                header('Location: logbio.php');
                            }else{ $_SESSION['flash']['red2'] = "Erreur durant l'importation de votre photo"; }
                        }else{ $_SESSION['flash']['red2'] = "Votre photo de profil doit être au format jpg, jpeg, gif ou png."; }
                    }
                }else{ $_SESSION['flash']['red2'] = "Pas de photo selectionner."; }
            }

?>

                <form action="" method="post" enctype="multipart/form-data"><div class="file-data"><input type="file" name="avatar" class="upload-file button bg-highlight button-full shadow-huge round-small button-xs "><p class="upload-file-text">Charger ma photo de profil</p><input type="submit" name="avatarpost" class="upload-file button bg-highlight button-full shadow-huge round-small button-xs "><p class="upload-file-text">Mettre a jour</p></div><br></form>


Et voila le code de la page qui recupere affiche la photo avec le petit bout d'html

profile.php


<?php
include('bd/connexionDB.php'); 

    $id = (int) htmlentities(trim($_GET['id']));

    if(!is_int($id) || $id == 0 || $id == $_SESSION['id']){
        header('Location: profile.php?id='.$_SESSION['id']);
        exit;
    }
    $afficher_profil = $DB->query("SELECT * FROM users WHERE id = ?", array($id));

    $afficher_profil = $afficher_profil->fetch();

    if(!isset($afficher_profil['id'])){
        header('Location: utilisateurs.php');
        exit;
    }


?>

<img class="caption-bg" src="membres/avatars/<?= $afficher_profil['avatar'] ?>" style="width:100%; height:auto;" >


Mais quand l'utilisateur veux update sa photo de profile, si l'extention de sa photo (.jpg) est la meme que la précédente par exemple l'id 11 donc 11.jpg la photo vas changer mais pas le nom donc sur le serveur la photo change bien le nom reste le meme jusque la normal,


Mais au moment de l'afficher c'est toujours l'ancienne photo et non la nouvelle qui s'affiche, je ne comprend pas pourtant l'ancienne photo n'existe plus et la nouvelle est bien dans le serveur avec le bon nom je ne comprend pas si vous avez des idées, ou elle peut etre stocker pendant tout ce temp car sur tout les navigateur different, téléphone ect sa reste l'ancienne photo alors quelle n’existe plus... merci

1122 vues
09 mars 2020 à 16:04 (Édité)
Cette pub permet au site de vivre ...

15 commentaires

Re:


D'accord 😉 Tiens-nous au courant 😉

@clouder, ca marche je vais essayer de faire ca

@jerem971 non j'ai pas contacter, j'ai vu qu'en désactivant sa fonctionnais j'ai pas chercher plus loin...

Re:


@bykertix, est-ce que tu as également contacter l'assistance de LWS pour connaître l'origine du problème ? 🤔

@bykertix,


J'ai déjà rencontré ce problème aussi au tout début quand j'ai fait mon premier site web.

Le problème vient du cache de ton hébergeur.

Donc il faudrait que tu forces le cache à se vider tout le temps avec un fichier .htaccess mais le problème serait que tu vas perdre en rapidité de chargement de tes pages car les images sont gourmandes. Donc le mieux et que tu donnes un nouveau nom à ton image uploader.

Tu supprimes l'ancienne dans un premier temps et tu uploads la nouvelle.

@jerem971


Re


Je suis juste aller sur cPanel et j'ai decocher l'option cachewall je l'ai mis sur OFF


Mais sinon pour le code avatar j'ai fait un copier coller mais impossible de le faire fonctionner comme si le navigateur voyais pas le php dans le code, pourtant meme nom dans la bdd et meme nom de fichier dans le FTP


<?php
    session_start(); // Pour récupèrer nos données dans les variables : $_SESSION   
    include('bd/connexionDB.php'); // Pour faire la connexion à notre base de données
 
    if(!empty($_POST)){
        extract($_POST); // On extrait toutes les informations
        $valid = true;
 
        if (isset($_POST['avatar'])){   // On se positionne sur le bon formulaire
            if (isset($_FILES['file']) and !empty($_FILES['file']['name'])) { // On vérifie qu'il y a bien un fichier
 
                $filename = $_FILES['file']['tmp_name']; // On récupère le nom du fichier
                list($width_orig, $height_orig) = getimagesize($filename); // On récupère la taille de notre fichier (l'image)
 
                if($width_orig >= 500 && $height_orig >= 500 && $width_orig <= 6000 && $height_orig <= 6000){ // On vérifie que la taille de l'image et correcte
 
                    $ListeExtension = array('jpg' => 'image/jpeg', 'jpeg'=>'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif');
                    $ListeExtensionIE = array('jpg' => 'image/pjpg', 'jpeg'=>'image/pjpeg');
                    $tailleMax = 5242880; // Taille maximum 5 Mo
                    // 2mo  = 2097152
                    // 3mo  = 3145728
                    // 4mo  = 4194304
                    // 5mo  = 5242880
                    // 7mo  = 7340032
                    // 10mo = 10485760
                    // 12mo = 12582912
                    $extensionsValides = array('jpg','jpeg'); // Format accepté
 
                    if ($_FILES['file']['size'] <= $tailleMax){ // Si le fichier et bien de taille inférieur ou égal à 5 Mo
 
                        $extensionUpload = strtolower(substr(strrchr($_FILES['file']['name'], '.'), 1)); // Prend l'extension après le point, soit "jpg, jpeg ou png"
 
                        if (in_array($extensionUpload, $extensionsValides)){ // Vérifie que l'extension est correct
 
                            $dossier = "public/avatars/" . $_SESSION['id'] . "/"; // On se place dans le dossier de la personne 
 
                            if (!is_dir($dossier)){ // Si le nom de dossier n'existe pas alors on le crée
                                mkdir($dossier);
                            }else{
                                if(file_exists("public/avatars/". $_SESSION['id'] . "/" . $_SESSION['avatar']) && isset($_SESSION['avatar'])){
                                    unlink("public/avatars/". $_SESSION['id'] . "/" . $_SESSION['avatar']);
                                }
                            }
 
                            $nom = md5(uniqid(rand(), true)); // Permet de générer un nom unique à la photo
                            $chemin = "public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload; // Chemin pour placer la photo
                            $resultat = move_uploaded_file($_FILES['file']['tmp_name'], $chemin); // On fini par mettre la photo dans le dossier
 
                            if ($resultat){ // Si on a le résultat alors on va comprésser l'image
 
                                if (is_readable("public/avatars/" . $_SESSION['id'] . "/" .$nom . "." . $extensionUpload)) {
                                    $verif_ext = getimagesize("public/avatars/" . $_SESSION['id'] . "/" .$nom . "." . $extensionUpload);
 
                                    // Vérification des extensions avec la liste des extensions autorisés
                                    if($verif_ext['mime'] == $ListeExtension[$extensionUpload]  || $verif_ext['mime'] == $ListeExtensionIE[$extensionUpload]){              
                                        // J'enregistre le chemin de l'image dans filename
                                        $filename = "public/avatars/" . $_SESSION['id'] . "/" .$nom . "." . $extensionUpload;
 
                                        // Vérification des extensions que je souhaite prendre
                                        if($extensionUpload == 'jpg' || $extensionUpload == 'jpeg' || $extensionUpload == "pjpg" || $extensionUpload == 'pjpeg'){       
                                            $image2 = imagecreatefromjpeg($filename);
                                        }
 
                                        // Définition de la largeur et de la hauteur maximale
                                        $width2 = 720;
                                        $height2 = 720;
 
                                        list($width_orig, $height_orig) = getimagesize($filename);
 
                                        // Redimensionnement
                                        $image_p2 = imagecreatetruecolor($width2, $height2);
                                        imagealphablending($image_p2, false);
                                        imagesavealpha($image_p2, true);
 
                                        // Cacul des nouvelles dimensions
                                        $point2 = 0;
                                        $ratio = null;
                                        if($width_orig <= $height_orig){
                                            $ratio = $width2 / $width_orig;
                                        }else if($width_orig > $height_orig){
                                            $ratio = $height2 / $height_orig;
                                        }
 
                                        $width2 = ($width_orig * $ratio) + 1;
                                        $height2 = ($height_orig * $ratio) + 1; 
 
                                        imagecopyresampled($image_p2, $image2, 0, 0, $point2, 0, $width2, $height2, $width_orig, $height_orig);
                                        imagedestroy($image2);
 
                                        if($extensionUpload == 'jpg' || $extensionUpload == 'jpeg' || $extensionUpload == "pjpg" || $extensionUpload == 'pjpeg'){
 
                                            // Content type
                                            header('Content-Type: image/jpeg'); // Important !!
 
                                            $exif = exif_read_data($filename);
                                            if(!empty($exif['Orientation'])) {
                                                switch($exif['Orientation']) { 
                                                    case 8:
                                                        $image_p2 = imagerotate($image_p2,90,0);
                                                    break;
                                                    case 3:
                                                        $image_p2 = imagerotate($image_p2,180,0);
 
                                                    break;
                                                    case 6:
                                                        $image_p2 = imagerotate($image_p2,-90,0);
 
                                                    break;
                                                }
                                            }
                                            // Affichage
                                            imagejpeg($image_p2, "public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload, 75);
                                            imagedestroy($image_p2);
                                        }
 
                                        $DB->insert("UPDATE utilisateur SET avatar = ? WHERE  id = ?", 
                                            array(($nom.".".$extensionUpload), $_SESSION['id']));
 
                                        $_SESSION['avatar'] = ($nom.".".$extensionUpload); // On met à jour l'avatar
 
                                        $_SESSION['flash']['success'] = "Nouvel avatar enregistré !";
                                        header('Location: profil'); // Pour la redirection
                                        exit;
                                    }else{
                                        $_SESSION['flash']['warning'] = "Le type MIME de l'image n'est pas bon";
                                    }
                                } 
                            }else
                                $_SESSION['flash']['error'] = "Erreur lors de l'importation de votre photo.";
 
                        }else
                            $_SESSION['flash']['warning'] = "Votre photo doit être au format jpg.";
 
                    }else
                        $_SESSION['flash']['warning'] = "Votre photo de profil ne doit pas dépasser 5 Mo !";
                }else
                    $_SESSION['flash']['warning'] = "Dimension de l'image minimum 400 x 400 et maximum 6000 x 6000 !";
            }else
                $_SESSION['flash']['warning'] = "Veuillez mettre une image !";       
        }
    }
?>
<!doctype html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>


<body>
   <div class="container">
   <div class="row"> 
      <div class="col-sm-0 col-md-2 col-lg-1"></div>
      <div class="col-sm-12 col-md-8 col-lg-10"> 
         <form method="post" enctype="multipart/form-data">
            <label for="file" style="margin-bottom: 0; margin-top: 5px; display: inline-flex">
               <input id="file" type="file" name="file" class="hide-upload" required/>
               <i class="fa fa-plus image-plus"></i>
               <input type="submit" name="avatar" value="Envoyer">
            </label>
         </form>
      </div>
   </div>
</div>


<div>
   <?php
      if(file_exists("public/avatars/". $_SESSION['id'] . "/" . $_SESSION['avatar']) && isset($_SESSION['avatar'])){
   ?>
      <img src="<?= "public/avatars/". $_SESSION['id'] . "/" . $_SESSION['avatar']; ?>" width="120" style="width: 100%"/>
 
   <?php
      }else{
   ?>
      <img src="public/avatars/defaults/default.png" width="120" style="width: 100%"/>
   <?php
      }
   ?>
</div>
</body>

Cela vient peut-être du cache de ton naviguateur ou de ton PC

Re:


Peux-tu me/nous montrer les modifications que tu as effectué ? 🤔

Re:

Non aucune erreur même dans les logs, j'ai reussi a désactiver ce probleme de cache en désactivant le cachewall de cPanel, ensuite j'ai essayer d’intégrer le système d'image de profile de l'article que tu m'as envoyer mais impossible de le faire fonctionné 🤔 aucune erreur rien meme pas la redirection du php dans le code bizarre... comme si y'avaus aucun php dans le code

Re:


Impossible...

PHP est un langage côté serveur et ton site est hébergé actuellement chez LWS comme tu me l'as dit...

Tu n'as aucune erreur d'affichée ? 🤔

Alors je suis aller voir l'article je suis aller meme le tester mais j'ai un soucis j'ai l'impression qu'il ne lis le php j'ai ecrit exactement le meme code mais le php n'ai pas lu 🙄

Cette pub permet au site de vivre ...
1
2