Hello :D
Le formulaire d'envoie de photo de profil me pose quelques souci :/

<?php
require_once 'inc/functions.php';
require_once 'inc/db.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 = $dn->prepare('UPDATE users SET avatar = :avatar WHERE id = :id');
            $updateavatar->execute(array(
               'avatar' => $_SESSION['id'].".".$extensionUpload,
               'id' => $_SESSION['id']
               ));
            header('Location: account.php');
         } else {
            $msg = "Erreur durant limportation 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";
   }
}
?>

La photo de profil s'envoie correctement dans le fichier "membres/avatars/" mais sans nom.. Elle aparrais donc pour tous les autres membres étans donné quelle est enregistré sous le nom ".jpg"

J'aimerais pouvoir l'enregistrer sous l'ID correspondante a l'utilisateur connecté et la ce n'est pas le cas, j'ai chercher partout, même la fonction rename() ne fonctionne pas..

Et non seulement elle est enregistré sans nom mais en plus elle n'est pas affiché dans la base de donnée, et quand ont sur "Changer ma photo de profil" ont est redirigé vers une page "La page ne fonctionne pas"...

Si vous désiré un autre bout de code n'hésitez pas :/

6 réponses


Lartak
Réponse acceptée

Voici mon script pour le formulaire

Tu ne réponds pas à ma question, surtout que là tu montres une fonction que tu n'utilises à aucun moment dans le script précédent.
De plus que dans le post précédent tu utilises l'index id de la variable $_SESSION pour le nom de l'avatar, alors que dans la fonction que tu montres dans le second post tu utilises la fonction time() de PHP et dans cette même fonction (move_avatar), je ne vois pas à quoi peut servir la dernière ligne étant donné que tu fais un return juste avant.
Ma question était plutôt simple, c'était fais-tu un session_start() pour pouvoir utiliser la variable $_SESSION ?
Et si oui, son index id est-il bien défini ?

Voila mon script a toi de l'adapter.

Par contre enregistré sous le nom en ID.jpg n'est pas une bonne idée moi j'ai fait ça $save_name = md5($_SERVER['REMOTE_ADDR']).'.'.$extension;

if(isset($_POST['avatar'])){

    //on initialise l'id
    $profil_id = intval($_SESSION['auth']->id);

    $avatar = $_FILES['avatar'];

    //on définie le nom de l'image
    $avatar_name = $avatar['name'];

    //on definie l'extension
    $extension = strtolower(substr($avatar_name, -3));

    //toutes les extensions n'on pas que 3 caractères 
    //$extension = strtolower(substr(strrchr($avatar_name, '.'),1));

    //on renome l'image avant envoie avace l'id de l'utilisateur
    $save_name = md5($_SERVER['REMOTE_ADDR']).'.'.$extension;

    //taille du fichier envoyez
    $pdsfile = filesize($_FILES['avatar']['tmp_name']);

    //1go en octets 1048576
    $max_size = 819200;

    //on definie l'extension autoriser
    $ext_autorize = ['png', 'jpg'];

    checkCsrf();//on vérifie tout de meme les failles csrf
    if(in_array($extension, $ext_autorize)){

        //on verifie si le poid depasse pas 1go
        if($pdsfile > $max_size){

            $error = errors('le fichier est trop volumineux');

        }else{

            move_uploaded_file($avatar['tmp_name'], 'views/img/avatars/'.$save_name);   

            $db->prepare("UPDATE users SET avatar = ? WHERE id = ?")->execute([$save_name, $profil_id]);

            $_SESSION['auth']->avatar = $save_name;
            setFlash('<strong>Super !</strong> Votre avatar a bien étais modifier/ajouter <strong>Bien jouer :)</strong>');
            redirect('account'); 

        }

    }else{

        $error = errors('le fichier n\'est pas valide PNG ou JPG');

    }

}

Bonsoir.
Est-ce que tu démarre la session dans ton fichier de traitement ou dans un des fichiers qui y sont inclu ?

Voici mon script pour le formulaire :

<form method="POST" enctype="multipart/form-data" action="upload.php">
<p>
<input type="file" name="avatar"></br>
<input type="submit" value="Changer ma photo de profil">
</p>
</form>

Et upload.php c'est le tout premier script que j'ai envoyé :/
Ma function move_avatar

function move_avatar($avatar){
    $extension_upload = strtolower(substr(  strrchr($avatar['name'], '.')  ,1));
    $name = time();
    $nomavatar = str_replace(' ','',$name).".".$extension_upload;
    $name = "membres/avatars/".str_replace(' ','',$name).".".$extension_upload;
    move_uploaded_file($avatar['tmp_name'],$name);
    return $nomavatar;
    $nomavatar=(!empty($_FILES['avatar']['size']))?move_avatar($_FILES['avatar']):'';
}

Merci pour vos réponse rapide !

Voici mon session_start :

<?php
if(session_status() == PHP_SESSION_NONE){
   session_start();
}
?>   

Il est présent dans le header.php, donc sur toutes les pages

Si tu ne veux pas être aidé, autant le dire de suite, car tu réponds encore à moitié.
Sans compter que tu dis que ton fichier header.php est présent sur toutes tes pages, mais à mon avis tu ne l'inclues qu'au niveau du front-end et non systématiquement dans le back-end.
Si par exemple il est inclu dans la page qui contient le formulaire, mais qu'il ne l'est pas au niveau de ton fichier upload.php (soit la page de traitement), tu perds l'accès à la variable de session et par conséquent tu ne recevra que des valeurs vides concernant la session.