TUTO PHP - Ajouter une photo de profil / avatar

PrimFX PrimFX Le 5 avril 2015

Je vous ai déjà montré dans une mini-série de 3 épisodes comment créer un espace membre sur votre site internet. Je vous propose donc aujourd'hui de voir comment y ajouter un petit système de gestion d'avatars ;-)

  • Code du traitement de l'avatar en PHP :
<?php
if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {
   $tailleMax = 2097152;
   $extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
   if($_FILES['avatar']['size'] <= $tailleMax) {
      $extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
      if(in_array($extensionUpload, $extensionsValides)) {
         $chemin = "membres/avatars/".$_SESSION['id'].".".$extensionUpload;
         $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
         if($resultat) {
            $updateavatar = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
            $updateavatar->execute(array(
               'avatar' => $_SESSION['id'].".".$extensionUpload,
               'id' => $_SESSION['id']
               ));
            header('Location: profil.php?id='.$_SESSION['id']);
         } else {
            $msg = "Erreur durant l'importation de votre photo de profil";
         }
      } else {
         $msg = "Votre photo de profil doit être au format jpg, jpeg, gif ou png";
      }
   } else {
      $msg = "Votre photo de profil ne doit pas dépasser 2Mo";
   }
}
?>

A propos de l'auteur

PrimFX
PrimFX

Salut tout le monde ! Je m'appelle Boris, j'ai 20 ans et je suis passionné d'informatique et de technologie. Je partage cette passion à travers mes vidéos sur YouTube et les articles de ce site internet. J'ai également co-fondé en 2019 l'entreprise de services informatique Single Quote et je suis en parallèle étudiant (en informatique bien sur) :-)

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 31

  • themonkeyd Le 21 mai, à 16:03 | Répondre

    Merci Beaucoup @PrimeFX
    ça me fais un plus en mes connaissances en php.
    Grâce à toi, malgré que j'ai eu des bugs, j'ai quand même pris mon temps pour étudier et m'adapter.
    Harrison, Yaoundé - Cameroun

  • Cirilla33 Le 9 avril, à 19:10 | Répondre

    Bonjour primfx,

    j'ai un problème vers la fin de ton tuto.
    C'est le moment où tu mets cette ligne de code :

    <img scr="membres/avatar/<?php echo $userinfo['avatar']; ?> width="150">
    <?php


    Moi perso j'ai pas mis de "s" à avatar. Quand je vais ensuite sélectionner mon image et que je fais mise à jour profil, dans ma base
    de donnée il y'a bien 1.jpg en avatar mais quand je suis sur profil.php, ben l'image ne s'affiche pas.
    Pourrais-tu m'aider stp ?
    Merci.

  • Acanthe Le 23 octobre, à 12:48 | Répondre

    excellent !! Et cela fonctionne parfaitement.
    Grand merci

  • hermanno Le 6 septembre, à 13:41 | Répondre

    @primfx
    j'ai un problemme au niveau de la fonction moove_uploaded_files
    en fait tout est OK de mon coté, mon script verifie toutes les conditions, mai n'arrive pas à deplacer mon image
    donc, il n'y a rian dans la base de donnée, ni dans mon dossier avatars.
    php me renvois une erreur au niveau de la fonction que j'ai cité ci-dessus...
    j'ai eu beau verrifier mon code, je trouve rien!
    je démralise grave...
    :-( :-( :-(

  • alcantara Le 16 avril, à 01:24 | Répondre

    boris j'ecris ce commentaire depuis la RDC laisse moi te dire que il n'y a pas meilleur que toi ,tu m'a beaucoup appris et je vous remercie, je vous encourage de continuer avec votre boulot

  • flodereims Le 11 mars, à 16:18 | Répondre

    Salut PrimFx ! 
    Merci pour les tutos c'est génial ! 
    Cependant, je n'arrive pas à intégrer l'avatar dans mon header.php (donc dans mon menu) pour qu'il apparaisse partout.... 
    Je peux l'intégrer partout dans la page editerprofil ou il y a mon code, mais quand je place dans mon header.php ça:
    [code]<img src="/wp-content/themes/amandine/membres/avatars/<?php echo $userinfo['avatar']; ?>" width="150">[/code]Il ne m'affiche pas la photo, et dans la console j'ai le message suivant:
    GET http://mescreations02.apps-1and1.net/wp-content/themes/amandine/membres/avatars/ 403 (Forbidden)
    Mais je ne sais pas comment résoudre cela..... 
    Peux tu m'aider stp ?
    (sachant que je bosse pas en local)

  • Impact22 Le 29 novembre, à 02:05 | Répondre

    Bonjour,
    J' ai un probleme avec la bdd, lorsque je cree la colonne "avatar" dans la table "membres", je ne peux plus inscrire de nouveau compte utilisateur. Si j'enleve la 5° colonne (celle de "avatar") je peu a nouveau inscrire de nouveau comptes dans la bdd. 
    Lorsque un compte est deja créé et que je rajoute la colonne "avatar", je peu ajouter le "fichier.jpg" sur le compte mais je ne peux toujours pas rajouter de compte.
    Merci de votre aide.
    Et bravo pour tes tutos.

  • Pierredu16500 Le 8 septembre, à 17:10 | Répondre

    @ekios Salut, merci tu m'as sauvé la vie ! Effectivement, il suffit de faire un petit: sudo chmod 777 chemindudossierdelavatar
    Merci ! :)

  • ahgtfds Le 19 juillet, à 14:08 | Répondre

    <?php
    session_start();

    $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');

    if(isset($_SESSION['id'])) {
    $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();

    if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {
    $tailleMax = 2097152;
    $extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
    if($_FILES['avatar']['size'] <= $tailleMax) {
    $extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
    if(in_array($extensionUpload, $extensionsValides)) {
    $chemin = "membres/avatars/".$_SESSION['id'].".".$extensionUpload;
    $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
    if($resultat) {
    $updateavatar = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
    $updateavatar->execute(array(
    'avatar' => $_SESSION['id'].".".$extensionUpload,
    'id' => $_SESSION['id']
    ));
    header('Location: profil.php?id='.$_SESSION['id']);
    } else {
    $msg = "Erreur durant l'importation de votre photo de profil";
    }
    } else {
    $msg = "Votre photo de profil doit être au format jpg, jpeg, gif ou png";
    }
    } else {
    $msg = "Votre photo de profil ne doit pas dépasser 2Mo";
    }
    }

    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
    $newpseudo = htmlspecialchars($_POST['newpseudo']);
    $insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?");
    $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
    header('Location: profil.php?id='.$_SESSION['id']);
    }

    if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail']) {
    $newmail = htmlspecialchars($_POST['newmail']);
    $insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?");
    $insertmail->execute(array($newmail, $_SESSION['id']));
    header('Location: profil.php?id='.$_SESSION['id']);
    }

    if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2'])) {
    $mdp1 = sha1($_POST['newmdp1']);
    $mdp2 = sha1($_POST['newmdp2']);
    if($mdp1 == $mdp2) {
    $insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id = ?");
    $insertmdp->execute(array($mdp1, $_SESSION['id']));
    header('Location: profil.php?id='.$_SESSION['id']);
    }
    else
    {
    $msg = "Vos deux mdp ne correspondent pas !";
    }
    }
    ?>

  • ahgtfds Le 19 juillet, à 14:08 | Répondre

    <?php
    session_start();

    $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');

    if(isset($_SESSION['id'])) {
    $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();

    if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {
    $tailleMax = 2097152;
    $extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
    if($_FILES['avatar']['size'] <= $tailleMax) {
    $extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
    if(in_array($extensionUpload, $extensionsValides)) {
    $chemin = "membres/avatars/".$_SESSION['id'].".".$extensionUpload;
    $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
    if($resultat) {
    $updateavatar = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
    $updateavatar->execute(array(
    'avatar' => $_SESSION['id'].".".$extensionUpload,
    'id' => $_SESSION['id']
    ));
    header('Location: profil.php?id='.$_SESSION['id']);
    } else {
    $msg = "Erreur durant l'importation de votre photo de profil";
    }
    } else {
    $msg = "Votre photo de profil doit être au format jpg, jpeg, gif ou png";
    }
    } else {
    $msg = "Votre photo de profil ne doit pas dépasser 2Mo";
    }
    }

    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
    $newpseudo = htmlspecialchars($_POST['newpseudo']);
    $insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?");
    $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
    header('Location: profil.php?id='.$_SESSION['id']);
    }

    if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail']) {
    $newmail = htmlspecialchars($_POST['newmail']);
    $insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?");
    $insertmail->execute(array($newmail, $_SESSION['id']));
    header('Location: profil.php?id='.$_SESSION['id']);
    }

    if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2'])) {
    $mdp1 = sha1($_POST['newmdp1']);
    $mdp2 = sha1($_POST['newmdp2']);
    if($mdp1 == $mdp2) {
    $insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id = ?");
    $insertmdp->execute(array($mdp1, $_SESSION['id']));
    header('Location: profil.php?id='.$_SESSION['id']);
    }
    else
    {
    $msg = "Vos deux mdp ne correspondent pas !";
    }
    }
    ?>

  • wail Le 6 avril, à 19:44 | Répondre

    @keenutt66 je sais que ça fait un moment que vous avez posté votre message ;au fait j'ai la meme erreur que vous si vous pourriez m'aider !

  • Lauraguinness Le 4 février, à 16:04 | Répondre

    Bonjour à tous ! 

    Même problème que keenutt66... 
    Tout est ok dans le code,  le chemin est nickel, l'image s'inscrit bien dans le dossier avatar et pourtant elle ne s'affiche pas sur ma page... 
    Je désespère ! ;( 

    Merci de votre aide... 

  • zartaj12345 Le 26 janvier, à 02:43 | Répondre

    @keenutt66
    Salut
    Pour moi tout est nikel...
    partage tes lien peut être on peut t'aider!!!

  • keenutt66 Le 18 janvier, à 05:45 | Répondre

    Bonjour ,
    L'image ne s'affiche pas, j ai bien vérifié le lien src , regardé mes lignes de code et rien , pas de message d'erreur , d' ou cela pourrait il venir , merci de votre aide ou d'une piste .
    Merci pour votre aide

  • nerdya Le 3 janvier, à 15:58 | Répondre

    Bonjour j'ai un problème mes avatars s'affiche dans mon dossier mais pas dans ma base de donné . cela est il embêtant ou non? merci de votre aide.

  • eclipse242 Le 4 décembre, à 16:52 | Répondre

    vu que j'ai changé d'environnement de travaille j'ai assez galéré et finalement j'ai réussi. Merci pour ce tuto et pour ton esprit de partage c'est super

  • bilaldu60 Le 31 juillet, à 01:37 | Répondre

    Bon et bien tout est ok,mais quel galére quand on est débutant et qu'on a pas le code source.
    Merci encore a primefx pour cet excellent tuto

  • bilaldu60 Le 31 juillet, à 01:19 | Répondre

    @FireWin
    C'etait bien ça.J'ai enlever tous les "s" que tu avais mis au bout de "avatar" sauf dans la ligne:
    $chemin = "membres/avatars/".$_SESSION['id'].".".$extensionUpload;
    Car le dossier que j'ai creé pour stocker les avatars des membres s'appelle bien: membres/avatars/
    J'usque la tous va bien,ça enregistre bien l'image dans le dossier et ma base de donné et bien mis à jour.
    Il me reste plus qu'a afficher la photos dans "profil.php".
    J'y retourne

  • bilaldu60 Le 30 juillet, à 22:38 | Répondre

    @FireWin
    Salut
    Je suis nul en PHP et comme il n'y a pas le code source je tape en méme temp que je regarde la video.Malgres un grand nombre de "pause" et de retour en arriere(en regardant la video)j'arrivais a une page blanche(sans doute une accolade que je zapais ou autre)
    Comme je m'en sortais pas j'ai copié le code que tu as mis dans ton commentaire et j'avais le méme probleme que toi.
    je vois que tu mest souvent "avatars" pour "avatar"
    Je ne pourais tester que dans 1 h ou 2 et je reposterai si c'est la solution.

  • Preyor Le 30 juin, à 22:11 | Répondre

    @PrimFX pourrais-tu mettre le code ?

  • ViXo Le 6 mai, à 17:40 | Répondre

    PrimFX tu peux mettre le code de ce tuto stp car mon image s'enregistre pas et j'arrive pas à trouvé l'erreur

  • niluca Le 21 avril, à 17:59 | Répondre

    PrimFX est ce que tu pourrais mettre le code s'il te plait
    car il me dit une erreur et j’arrive pas a la trouver

  • FireWin Le 15 avril, à 11:18 | Répondre

    Bonjour, j'ai rencontré un problème, l'image ne s'enregistre pas dans ma base de donnée :
    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['id'].".".$extensionUpload;
    $resulat = move_uploaded_file($_FILES['avatars']['tmp_name'], $chemin);
    if($resulat)
    {
    $updateavatars = $bdd->prepare('UPDATE membres SET avatars = :avatars WHERE id = :id');
    $updateavatars->execute(array(
    'avatars' => $_SESSION['id'].".".$extensionUpload,
    'id' => $_SESSION['id']
    ));
    header('Location: profil.php?id='.$_SESSION['id']);
    }
    else
    {
    $msg = "Erreur durant l'importation de votre photo de profil.";
    }
    }
    else
    {
    $msg = "Votre photo de profil doit être au format jpg, jpeg, gif ou png.";
    }
    }
    else
    {
    $msg = "Votre photo de profil ne doit pas dépasser 2Mo.";
    }
    }

  • ViXo Le 9 avril, à 11:55 | Répondre

    @c24 As-tu pensé à mettre le enctype="multipart/form-data" dans le <form> :
    <form method="POST" action="" enctype="multipart/form-data">
    # Le formulaire
    </form>

  • Nobodief Le 14 mars, à 00:44 | Répondre

    Vous pouvez également faire un raccourci lorsque vous enregistrez l'avatar sur la base de données, comme nous avons spécifier dans la variable $chemin l'adresse du dossier et le nom de l'image, au lieu de refaire une grande ligne il aurais été plus simple de mettre 'avatar' => $chemin.

    Très bon tutoriel, j'apprend beaucoup avec toi, continue.

  • Ranster Le 23 février, à 17:50 | Répondre

    Bravo ! Et merci !

  • c24 Le 15 février, à 15:33 | Répondre

    Salut PrimFX,
    je viens vers toi car j'ai un problème j'ai suivi ton tuto à la lettre j'ai vérifier 10 fois ce qu'il cloché et je n'ai pas de message d 'erreur et pourtant ma photo quand je fais parcourir et éditer mon profil ne me l'affiche ni sur mon profil ni dans ma base donnée.
    Quel et la solution ? stp merci d'avance

  • dream09 Le 25 janvier, à 20:16 | Répondre

    Bonjour, j'ai hésité à poster un commentaire car lors que j'uploadé mon image, j'avais le message d'erreur comme quoi il y avait une erreur du côté serveur car je n avais pas pensais a changer les droits sur le dossier d'upload. Voilà, si cela peut en aider certains...
    Très bon tuto sinon, continue ainsi, mais si tu pouvais à l'avenir uploader le code source s'il te plaît :D Merci !

  • ekios Le 10 janvier, à 18:13 | Répondre

    @PrimFX Bonjour, merci de ta réponse
    Néanmoins j'ai déjà résolu mon problème sur le forum de Openclassroom ^^ Il s'agisait d'une simple erreur de majuscule à la ligne 7 (Avatar).

    Très beau tuto au passage, je vais continuer à te suivre :)

  • PrimFX Le 10 janvier, à 16:46 | Répondre

    @ekios Salut ! Peux-tu me dire à quelle est la ligne indiquée dans l'erreur ? Enfin l'erreur c'est une erreur PHP dans le code (qui s'affiche dans un genre de bloc orange) ou bien ça t'affiche un de tes messages d'erreur dans une variable $msg ? :p

  • ekios Le 6 janvier, à 01:51 | Répondre

    Bonjour PrimFX,
    Alors voila j'ai fais ton tuto à la lettre cependant il me dit sort le format invalide.
    Voila l'image du code (pour éviter de surcharger le commentaire :p
    Si tu pouvais m'aider, merci !
    http://puu.sh/ml4oT/1e798dd328.png