Récupération id pour l'upload de fichier

Par cafreunion, il y a 11 ans


Bonjour,
j'aissye de mettre en place un espace membre pour mon siteen local pour le momment.
Je voudrais faire des upload de fichierpour la mise a jour du profil, par contre j'arrive pas récupérer l'id du membre connecté, ci-dessous un copie des débug que j'ai ($_SESSION et de l'envoi de mon formulaire d'upload

 app\Controller\UsersController.php (line 203) Array ( [Config] => Array ( [userAgent] => 365b9c4fac8ad1e5930c4ca4cae6f872 [time] => 1429462795 [countdown] => 10 ) [Auth] => Array ( [User] => Array ( [id] => 1 [username] => Stephane [mail] => test@test.fr [role] => membre [active] => 1 [firstname] => [lastname] => [content] => <p><em><span style="text-decoration: underline;"><strong>Test de la mise &agrave; jour d'un profit</strong></span></em></p> [created] => 2015-04-15 23:36:26 [lastlogin] => 0000-00-00 00:00:00 ) ) [Message] => Array ( ) ) app\Controller\UsersController.php (line 204) Array ( [Avatar] => Array ( [name] => test [prive] => 1 [id] => [avatar] => Array ( [name] => téléchargement (1).jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\phpF1CB.tmp [error] => 0 [size] => 12127 ) ) )

Ci-dessous une copie de mon userController.php

<?php class UsersController extends AppController{ public $components = array('RequestHandler'); public function beforeFilter(){ parent::beforeFilter(); if(role != 'admin'){ $this->layout = 'membre'; }else{ $this->layout = 'admin'; } } function admin_index(){ $d['users'] = $this->Paginate('User'); $this->set($d); } function admin_edit($id = null){ if($this->request->is('post') || $this->request->is('put')){ $d = $this->request->data['User']; if($d['password'] != $d['passwordconfirm']){ $this->Session->setflash("Les mots de passes ne correspondent pas ","notif",array('type'=>'error')); }else{ if(empty($d['password'])) unset($d['password']); if($this->User->save($d)){ $this->Session->setflash("L'utilisateur a bien été enregistré ",'notif'); } } }elseif($id){ $this->User->id = $id; $this->request->data = $this->User->read('username,role,id'); } $d = array(); $d['roles'] = array( 'admin' => 'admin', 'user' => 'membre' ); $this->set($d); } function admin_delete($id){ $this->User->delete($id); $this->Session->setflash("l'utilisateur a bien été supprimé ","notif"); $this->redirect($this->referer()); } function signup(){ if($this->request->is('post')){ $d = $this->request->data; $d['User']['id'] = null; if(!empty($d['User']['password'])){ $d['User']['password'] = $d['User']['password']; } if($this->User->save($d,true,array('username','password','mail','role'))){ $link =array('controller'=>'users','action'=>'activate',$this->User->id,'-'.md5($d['User']['password'])); App::uses('CakeEmail','Network/Email'); $mail = new CakeEmail(); $mail->from('noreply@localhost.com') ->to($d['User']['mail']) ->subject('Test::Inscription') ->emailFormat('html') ->template('signup') ->viewVars(array('username'=>$d['User']['username'],'link'=>$link)) ->send(); $this->Session->setFlash("Votre compte a bien été créé",'notif'); $this->request->data = array(); }else{ $this->Session->setFlash("Merci de corriger les erreurs",'notif',array('type' =>'error')); } } } public function login(){ if ($this->Auth->user('id')); if ($this->Auth->login()){ //$this->User->saveField('lastlogin',date('Y-m-d H:i:s')); $this->Session->setFlash('Vous vous êtes bien connecté',"notif"); $this->redirect('/'); }else{ $this->Session->setFlash('Erreur de mot de passe ou de pseudo',"notif", array('type'=>'error')); } } function subscribe(){ if(!$this->Auth->user('id')){ throw new NotfoundException(); } if(!empty($this->request->data)){ $duration = $this->request->data['duration']; $uid = $this->Auth->user('id'); if(Configure:: read('Site.prices,$duration')){ $price = number_format(Configure:: read('Site.prices,$duration'),2); $this->LoadModel('Transaction'); $url = $this->Transaction->requestPaypal($price,"Compte premium $duration mois","action=subscribe&uid=$uid&duration=$duration"); if($url){ $this->redirect($url); } } } } function logout(){ $this->Auth->logout(); //$this->Session->destroy(); $this->redirect('/'); } function password(){ if(!empty($this->request->params['named']['token'])){ $token = $this->request->params['named']['token']; $token = explode('-',$token); $user = $this->User->find('first',array( 'conditions' =>array('id' =>$token[0],'MD5(User.password)'=>$token[1], 'active' => 1) )); if($user){ $this->User->id =$user['User']['id']; $password = substr(MD5(uniqid(rand(),true)),0,8); $this->User->saveField('password',Securty::hash($password,null,true)); $this->Session->setFlash("Votre mot de passe a bien été reinitialisé, voici votre nouveau mot de passe : $password",'notif'); }else{ $this->Session->setFlash("Le lien n'est pas valide",'notif', array('type'=>'error')); } } if($this->request->is('post')){ $v = current($this->request->data); $user = $this->User->find('first',array( 'conditions' => array('mail'=>$v['mail'],'active'=>1) )); if(empty($users)){ $this->Session->setFlash('Aucun utilisateur ne correspond à ce mail','notif', array('type'=>'error')); }else{ App::uses('CakeEmail','Network/Email'); $link =array('controller'=>'users','action'=>'password','token',$user['user']['id'],'-'.md5($user['User']['password'])); $mail = new CakeEmail(); $mail ->from('noreply@localhost.com') ->to($user['User']['mail']) ->subject('Test::Mot de passe oublié ?') ->emailFormat('html') ->template('mdp') ->viewVars(array('username'=>$user['User']['username'],'link'=>$link)) ->send(); } } } function activate($token){ $token = explode('-',$token); $user = $this->User->find('first',array( 'conditions' =>array('id' =>$token[0],'MD5(User.password)'=>$token[1], 'active' => 0) )); If(!empty($user)){ $this->User->id = $user['User']['id']; $this->User->saveField('active',1); $this->Session->setFlash("Votre compte a bien été activé",'notif'); $this->Auth->login($user['User']); }else{ $this->Session->setFlash("Ce lien d'activation n'est pas valide",'notif',array('type'=>'error')); } $this->redirect('/'); die(); } function membre_edit(){ $user_id = $this->Auth->user('id'); if(!$user_id){ $this->redirect('/'); die(); } $this->User->id = $user_id; $passError = false; if($this->request->is('put') || $this->request->is('post')){ $d = $this->request->data; $d['User']['id'] = $user_id; if(!empty($d['User']['pass'])){ if($d['User']['pass1'] == $d['User']['pass2']){ $d['User']['password'] = $d['User']['pass1']; }else{ $passError = true; } } if($this->User->save($d,true,array('firstname','lastname','password'))){ $this->Session->setFlash("Votre profit a bien été édité",'notif'); }else{ $this->Session->setFlash("Impossible de sauvegarder",'notif',array('type'=>'error')); } if($passError){ $this->User->validationErrors['pass2'] = array('les mots de passe ne correspondent pas'); }else{ $this->request->data = $this->User->read(); } $this->request->data['User']['pass1'] = $this->request->data['User']['pass2'] = ''; } } function membre_avatar(){ $user_id = $this->Auth->user('id'); $this->User->id = $user_id; if($this->request->is('post')){ $data = $this->request->data; debug($_SESSION); debug($data);die(); // Création du dossier image $dir = IMAGES.'Membre'.'/'.$user_id; if(!file_exists($dir)) mkdir($dir,0777); // création du sous dossier image $dir .= DS.'photo'; if(!file_exists($dir)) mkdir($dir,0777); $f = explode('.',$data['avatar']['name']); $ext = '.'.end($f); $filename = Inflector::slug(implode('.',array_slice($f,0,-1)),'-'); // sauvegarde en base de données $success = $this->Avatar->save(array( 'name' => $data['Avatar']['file']['name'], 'url' => 'Membre'.'/'.$user_id.'/'.'photo'.'/'.$filename.$ext, 'user_id' => $user_id )); debug($success);die(); } } function admin_login(){ $this->redirect(array('action'=>'login','admin'=>false)); } function membre_index(){ } function membre_message(){ } } ?>

c'est la fonction suivant qui me pose soucis : function membre_avatar

je vous remercie de votre aide

Cafreunion

1 réponse

FactureHero.com, il y a 11 ans

Normalement tu récupère l'iD avec $this->Auth->user('id') .
Maintenant si je regarde ton debug je vois un champs ID vide mais dans ta fonction membre_avatar, tu appelles le champs "user_id" et pas "id" :

$success = $this->Avatar->save(array( 'name' => $data['Avatar']['file']['name'], 'url' => 'Membre'.'/'.$user_id.'/'.'photo'.'/'.$filename.$ext, 'user_id' => $user_id // ici ));

Si c'est cette erreur (à tester), alors ça devrait se résoudre si tu changes ça comme ça :

$success = $this->Avatar->save(array( 'name' => $data['Avatar']['file']['name'], 'url' => 'Membre'.'/'.$user_id.'/'.'photo'.'/'.$filename.$ext, 'id' => $user_id // nomme ici ton champs id au lieu de user_id ));