Avatar par defaut

natarss

natarss Le 5 août 2016 à 05:49 (Édité le 25 janvier 2019 à 17:52)

Bonjour,
j'ai suivie le tuto de primFx : Ajouter une photo de profil / avatar (celui-ci, https://www.youtube.com/watch?v=lDZLZAdr1is),
je voudrais rajouter une photo de profil/avatar par default (comme sur Facebook).
Comment faire ?
J'ai regardé sur internet, mais rien de qui marche.
Merci d'avance.
Bonne journée.
natarss

natarss Le 5 août 2016 à 05:54

Code : 
if(isset($_SESSION['id'])) 
{
   $requser = $bdd->prepare("SELECT * FROM users WHERE id = ?");
   $requser->execute(array($_SESSION['id']));
   $user = $requser->fetch();
   $imagedefault = "images/logo.png";
      
      if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name']))
   {
      $tailleMax = 11111111111111111111111111111104; //ne faite pas attention à cette ligne
      $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 = "menbre/avatar/".$_SESSION['id'].".".$extensionUpload;
            $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
            if($resultat)
            {
               $updateavatar = $bdd->prepare('UPDATE users 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 = "Il y a eu une erreure durant l'importation du fichier";
                  
            }
         }
         else
         {
            $msg = "Votre profile doit etre au format jpg jpeg gif png";
         }
      }
      else
      {
         $msg = "votre profle ne doit pas depasse 2Mo";
      }   
   }

TheFlameflo

TheFlameflo Le 5 août 2016 à 06:04

Salut !

Premièrement, je te conseille de ne pas ajouter un avatar par défaut ou avec un chemin (j'ai pas suivi le tuto, désolé) directement dans la base de données.

Pourquoi ?

Car, si tu changes l'avatar par défaut, il faudra changer tous ceux qui ne sont pas définis et ça prend de la place en trop pour rien.

Je te conseille donc de faire le test suivant lorsque tu tentes d'afficher l'avatar d'un membre : si l'avatar existe à quelque part, tu l'affiches, s'il n'existe pas, tu affiches l'avatar par défaut.

Si tu as d'autres questions où que je n'ai pas été clair, n'hésite pas à poser plus de questions ! 😀

Bonne chance pour la suite ! 😀
TheOldNoob

TheOldNoob Le 5 août 2016 à 08:41 (Édité le 5 août 2016 à 08:43)

Salut l'ami,

bon, déjà, c'est un code pour édité une photo et non ajouter une photo, donc dans le principe celui qui va utilisé se code n'aura pas besoin d'avoir un avatar par défaut.

Ensuite, généralement on utilise l'avatar par défaut lors de la création d'un profil, car si l'utilisateur n'a pas de photo a mettre ou si ça le soul d'aller chercher une photo dans son pc, alors on va lui dire de prendre la photo par défaut.

Je te met le code que j'utilise pour importer une image, avec la possibilité d'y mettre un avatar par défaut.

TRES IMPORTANT, se code ne fonctionne que si dans ton répertoire img/ tu a une image qui s'appel link-default.jpg
ATTENTION, $folder, défini le chemin relatif du dossier ou se trouve MES images, donc a toi de changer en fonction du nom et de l'emplacement de TON fichier image 😉
$dirlink = "link-default.jpg";
$folder = 'img/'; // création de la variable indiquant le chemin du répertoire destination pour les fichiers uploadés (important  : le slash à la fin de la chaine de caractère).
$maxSize = 1000000 * 5; // 5Mo

if(!empty($_FILES) && isset($_FILES['picture'])) {

    if ($_FILES['picture']['error'] == UPLOAD_ERR_OK AND $_FILES['picture']['size'] <= $maxSize) {

        $nomFichier = $_FILES['picture']['name']; // récupère le nom de mon fichier au sein de la superglobale $_FILES (tableau multi-dimentionnel)
        $tmpFichier = $_FILES['picture']['tmp_name']; // Stockage temporaire du fichier au sein de la superglobale $_FILES (tableau multi-dimentionnel)
        
        $file = new finfo(); // Classe FileInfo
        $mimeType = $file->file($_FILES['picture']['tmp_name'], FILEINFO_MIME_TYPE); // Retourne le VRAI mimeType

        $mimTypeOK = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif'); // Attention, image n'indique pas le répertoire, mais le typemime !

        if (in_array($mimeType, $mimTypeOK)) { // in_array() permet de tester si la valeur de $mimeType est contenue dans le tableau $mimTypeOK
                    

            $newFileName = explode('.', $nomFichier);
            $fileExtension = end($newFileName); // Récupère la dernière entrée du tableau (créé avec explode) soit l'extension du fichier

            // nom du fichier link au format : crea-id-timestamp.jpg
            $finalFileName = 'crea-'.time().'.'.$fileExtension; // Le nom du fichier sera donc crea-id-timestamp.jpg (time() retourne un timestamp à la seconde)


                if(move_uploaded_file($tmpFichier, $folder.$finalFileName)) { // move_uploaded_file()  retourne un booleen (true si le fichier a été envoyé et false si il y a une erreur)
                    // Ici je suis sûr que mon image est au bon endroit
                    $dirlink = $finalFileName;
                    
                }
                else {
                    // Permet d'assigner un link par défaut
                    $dirlink = "link-default.jpg";
                }
        } // if (in_array($mimeType, $mimTypeOK))

        else {
            $error[] = 'Ce type de fichier est interdit, mime type incorrect !';
        } 


    } // end if ($_FILES['picture']['error'] == UPLOAD_ERR_OK AND $_FILES['picture']['size'] <= $maxSize)
    else {
        $error[] = 'Merci de choisir un fichier image (uniquement au format jpg) à uploader et ne dépassant pas 5Mo !';
    }
} // end if (!empty($_FILES) AND isset($_FILES['picture'])

else {
    // Permet d'assigner l link par défaut si la crea n'en a aucun
    $dirlink = "link-default.jpg";
}
Dwardower

Dwardower Le 5 août 2016 à 09:56

quand tu créer ta table, tu assigne à avatar une valeur par défaut
natarss

natarss Le 5 août 2016 à 10:17

Hey!
Merci à vous deux pour vos réponse.
J'ai utiliser le code de TheHoldNoob, il marche très bien.
Le seul problème est que  je n'arrive pas à afficher la photo que l'utilisateur à éditer ainsi que celle par Default.
Comment faire ?
Merci d'avance.
Bonne journée. 
:)
natarss

natarss Le 5 août 2016 à 10:49

Salut Dwardower,
Merci de ta réponse.
Comment tu ferais ? 
TheOldNoob

TheOldNoob Le 5 août 2016 à 10:54

Avant tout, est-ce que lors de la création d'un profil ou l'upload de l'avatar, cela créer bien une nouvelle photo dans ton dossier image?
Si oui,
Est-ce que dans ton code pour afficher la photo tu va la chercher dans le bon repertoire?
natarss

natarss Le 5 août 2016 à 10:58

TheHoldNoob, oui à chaque Upload, je me retrouve bien avec ma photo dans le répertoire img/ qui est renomer.
 
TheOldNoob

TheOldNoob Le 5 août 2016 à 11:23

Et donc, quand tu demande l'affichage de l'avatar, tu va bien le chercher dans le bon dossier? (affiche nous ton code affichage et ton code upload)
natarss

natarss Le 5 août 2016 à 11:44

Justement c'est l'affichage que je n'arrive pas...
Upload c'est ok!
Dwardower

Dwardower Le 6 août 2016 à 09:09 (Édité le 6 août 2016 à 09:19)

Quand tu créer ta table tu lui rajoute une valeur par défaut comme ceci
`avatar` varchar(255) NOT NULL DEFAULT 'default.jpg',
Si tu veux supprimer l'ancienne image de profil lors de l'upload d'une nouvelle image de profil, n'oublie pas de mettre un
if($truc['avatar'] != 'default.jpg')
La valeur par défaut signifie que si sql voit que tu n'as pas définit 'avatar' dans ton insert, alors il va remplacer la valeur NULL par la valeur par défaut (Null = rien ou cas ou 😉)

Image de la manip dans phpmyadmin
https://yip-social.fr/Capture.PNG
natarss

natarss Le 8 août 2016 à 08:45

Super Dwardower, sa marche.
Merci beaucoup!
Nobodief

Nobodief Le 8 août 2016 à 13:17 (Édité le 8 août 2016 à 13:20)

PhpMyAdmin qui permet de gérer les données mysql, te met une jolie fonction qui se nomme "Valeur par défaut", tu peux grâce à ce paramètre inclure du contenu sur ta table automatiquement si jamais il n'est pas rempli lors de la requête d'insertion.

Ensuite lorsque tu développe ta fonction d'avatar si jamais il y à un soucis sévère tu fait une requête d'update pour rétablir l'avatar par défaut, si jamais des modifications ont eu lieu où que le chemin présente des soucis.
Jimmy

Jimmy Le 9 août 2016 à 23:52 (Édité le 9 août 2016 à 23:57)

if($photodeprofils = "0.png"){
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, photodeprofils) VALUES(?, ?, ?, ?) ");
$insertmbr->execute(array($pseudo, $mail, $mdp, $photodeprofils));                                   
}
Et là dans le dossier où tu range les photo de profil tu met ton image par défaut et tu la nomme 0.png ou un autre nom ;-)
TheOldNoob

TheOldNoob Le 10 août 2016 à 11:23

Se code est valable que si lors de l'inscrpition l'utilisateur ne peu pas uploadé de photo, hors, il doit avoir la possibilité d'ajouter son avatar lors de la création ou plus tard.
Kam3leoN

Kam3leoN Le 27 décembre 2018 à 22:38 (Édité le 27 décembre 2018 à 22:40)

Bonjour à tous,

désolé pour le déterrage mais comme je reste bloqué à ce stade autant que cela serve à d'autres personne dans la même galère 😀
J'utilise le code de TheOldNoob et il fonctionne très très bien le seul problème est que je n'arrive pas à insérer l'avatar créer dans ma bdd une fois celui-ci générer
Quelqu'un pourrait-il me venir en aide ?
// UPLOAD AVATAR
$dirlink = "anonymous.png";
$folder = 'assets/avatars/'; // création de la variable indiquant le chemin du répertoire destination pour les fichiers uploadés (important  : le slash à la fin de la chaine de caractère).
$maxSize = 1000000 * 2; // 5Mo
if(!empty($_FILES) && isset($_FILES['avatar'])) {
    if ($_FILES['avatar']['error'] == UPLOAD_ERR_OK AND $_FILES['avatar']['size'] <= $maxSize) {
        $nomFichier = $_FILES['avatar']['name']; // récupère le nom de mon fichier au sein de la superglobale $_FILES (tableau multi-dimentionnel)
        $tmpFichier = $_FILES['avatar']['tmp_name']; // Stockage temporaire du fichier au sein de la superglobale $_FILES (tableau multi-dimentionnel)
        $file = new finfo(); // Classe FileInfo
        $mimeType = $file->file($_FILES['avatar']['tmp_name'], FILEINFO_MIME_TYPE); // Retourne le VRAI mimeType
        $mimTypeOK = array('image/jpeg','image/jpg','image/png','image/gif'); // Attention, image n'indique pas le répertoire, mais le typemime !
        if (in_array($mimeType, $mimTypeOK)) { // in_array() permet de tester si la valeur de $mimeType est contenue dans le tableau $mimTypeOK
            $newFileName = explode('.', $nomFichier);
            $fileExtension = end($newFileName); // Récupère la dernière entrée du tableau (créé avec explode) soit l'extension du fichier
            // nom du fichier link au format : crea-id-timestamp.jpg
            $finalFileName = 'crea-'.time().'.'.$fileExtension; // Le nom du fichier sera donc crea-id-timestamp.jpg (time() retourne un timestamp à la seconde)
                if(move_uploaded_file($tmpFichier, $folder.$finalFileName)) { // move_uploaded_file()  retourne un booleen (true si le fichier a été envoyé et false si il y a une erreur)
                    // Ici je suis sûr que mon image est au bon endroit
                    $dirlink = $finalFileName;
                }
                else {
                    // Permet d'assigner un link par défaut
                    $dirlink = "anonymous.png";
                }
        } // if (in_array($mimeType, $mimTypeOK))
        else {
            $error[] = 'Ce type de fichier est interdit, mime type incorrect !';
        } 
    } // end if ($_FILES['avatar']['error'] == UPLOAD_ERR_OK AND $_FILES['avatar']['size'] <= $maxSize)
    else {
        $error[] = 'Merci de choisir un fichier image (uniquement au format jpg) à uploader et ne dépassant pas 5Mo !';
    }
} // end if (!empty($_FILES) AND isset($_FILES['avatar'])
else {
    // Permet d'assigner l link par défaut si la crea n'en a aucun
    $dirlink = "anonymous.png";
}
// FIN UPLOAD AVATAR
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte