Je suis débutant en PHP j'ai essayé de créer un espace profil etc .
J'ai mis en place un système Upload image pr les photos profils users , le prob c'est que quand un utilisateur upload une nouvelle image profil elle est pas affiché tout de suite il faut se deconnecter et se connecter pour la voir ça c'est sur Firefox et sur Chrome il faut vider les caches et se qui fait qu'on se deconnecte après il faut se reconnecter pr voir le changement de l'avatar ?

10 réponses


Salut,

généralement c'est lié à la gestin de la session.
Quand tu mets à jour ton image il faut que tu mettes à jour la session de l'utilisateur avec le nom de la nouvelle photo.

Bonjour,
Il faudrait aussi savoir si l'avatar porte toujours le même nom ou si tu mets à jours la BDD et que tu ne fais pas d'actualisation de la variable contenant le nom de l'avatar

havikoro
Auteur

@Carouge10 oui j'ai une variable que j'ai appelé $avatar .
elle prend une valeur par défaut $avatar=defaut_avatar.png.
et si le user upload une image elle prend la valeur $avatar= $_SESSION['auth']['avatar'].
et sur la base de donnée la valeur de colonne avatar =ID.extension
voila un peu ce que j'ai fait.

d'accord,
on peut voir le code de l'upload ?

havikoro
Auteur
<?php 
if (isset($_POST['valider'])) {
                if (isset($_FILES['avatars']) AND !empty($_FILES['avatars']['name'])) {

                  $tailleMax=2097152;
                  $extensionsValides=array('jpg','jpeg','gif','png');
                  if ($_FILES['avatars']['size'] <=$tailleMax) {
                    $extensionUpload=strtolower(substr(strrchr($_FILES['avatars']['name'], '.'), 1));
                    if (in_array($extensionUpload,$extensionsValides)) {
                      $chemin="membres/avatars/".$_SESSION['auth']['id'].".".$extensionUpload;
                      $resultat=move_uploaded_file($_FILES['avatars']['tmp_name'], $chemin);
                      if ($resultat) {
                         include_once'db.php';
                        $updateavatar=$bdd->prepare('UPDATE users SET avatars= :avatars WHERE id=:id');
                        $updateavatar->execute(array('avatars' => $_SESSION['auth']['id'].".".$extensionUpload,'id'=>$_SESSION['auth']['id']));
                        $alert='<div class="alert alert-success" role="alert">Photo a bien été changé actualiser pour voir</div>';
                      } else {  $alert='<div class="alert alert-danger" role="alert">Problème lors du transfert</div>';}
                    } else {  $alert='<div class="alert alert-danger" role="alert">Format de photo invalide</div>';}
                  } else { $alert='<div class="alert alert-danger" role="alert">La taille dépasse 2Mo</div>';}

                }else {$alert='<div class="centrer flash container-sm alert alert-success" role="alert">Votre photo profil est à jour</div>';}
} 
?>
havikoro
Auteur

Et ça c'est le code ou l'avatar est affiché à coté du formulaire

                      <form style="margin-left: 40px;margin-bottom: -30px;" action="" method="POST" enctype="multipart/form-data">  
                        <?php if ($_SESSION['auth']['avatars']) { $avatar=$_SESSION['auth']['avatars']; } else { $avatar="avatar_default.png";}?> 
                          <img style="margin: 10px;"src="membres/avatars/<?= $avatar; ?><?php echo "?".rand();?>" class="avatar align-self-center mr-3" alt="...">
                          <input style="margin: 10px;" class="hiden form-control-file" type="file" name="avatars">
                           <input style="margin: 10px;" name="valider" type="submit" value="valider" class="btn btn-primary py-2 px-4 text-white">
                      </form>

Voilà, tu ne remets pas à jour l'avatar en session
il faut refaire un $_SESSION['auth']['avatars] = .... juste après le "execute"

havikoro
Auteur

ah ouai je vais voir ça merci bcp

@Carouge10 je ne comprends pas bien stp concernant refaire la mise a jour en session $_SESSION['auth']['avatars']=.... ?

lors de la connexion, tu affectes bien les différents éléments de l'utilisateur dans $_SESSION['auth'].
Et bien comme la tu modifies l'avatar en BDD, il faut aussi faire la mise à jour dans la SESSION