Ajouter un avatar à votre utilisateur

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 ...
Voir d'autres articles
Créer son site
Afficher son article
PHP
Commentaires
SQL
Le langage SQL
Cette pub permet au site de vivre ...