Ajouter un avatar à votre utilisateur

Par Clouder le 29 Apr 2019 (Édité) 7 +99

Mettre un avatar à un utilisateur


Les étapes

La première étape consiste à concevoir notre formulaire pour l'envoi de l'image sur notre serveur et du nom de l'image dans notre base de données.

<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>

Ensuite, il faut récupèrer notre image et la traiter :

<?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 !";       
        }
    }
?>

Pour finir, maintenant que tout y est nous allons afficher l'avatar de notre utilisateur :

<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>
Cette pub permet au site de vivre ...

7 commentaires

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !

Hello @Kam3leoN, @raphael-2228 et @JulienD,


Créez vos topics sur le présent forum, vous obtiendrez beaucoup plus facilement de l'aide ! 😉

Bonjour pb au niveau du

<?php

   if(file_exists("public/avatars/". $_SESSION['id'] . "/" . $_SESSION['avatar']) && isset($_SESSION['avatar'])){

  ?>

svp merci

Salut Le script ne fonctionne pas alors que j'ai aucune erreur pour il y'aurai t-il quelqu'un qui pourrait m'aider .

Kam3leoN, 

Tu as une erreur ? 

Le script chez moi ne fonctionne pas est-ce que quelqu'un pourrait m'aider car la je me perd un peu dans mon apprentissage à PHP.
Normal que je n'arrive pas a récupérer les images en jpg ?
Cette pub permet au site de vivre ...