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 à 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
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
));