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'éxiste plus... merci

2 réponses


Lartak
Réponse acceptée

Bonjour.

C'est une histoire de cache du navigateur étant donné que le nom de l'image est le même.
Pour résoudre le problème, tu peux par exemple faire :

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

Ce qui donnera par exemple : membres/avatars/18.jpg?=1583766866.

bykertix
Auteur

Le fait que tu me parle du cache ma fait tilt, finalement c'est le cache du serveur je suis heberger chez LWS et donc sur cpanel j'ai desactiver le cachewall