J'essai de créer un nouveau mdp et il me retourne cette erreur : "call to a member function save() on a non-object L.14"
function add(){
$this->layout = 'admin';
$data=array();
$data'User']'username']='blabla';
$data'User']'password']='blabla';
$this->User->save($data); <= ligne 14
}
Je ne vois pas ou est le problème ><
Merci d'avance de votre aide
Si je ne me trompe pas il faut faire un create avant le save:
public function add() {
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The User has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The license could not be saved. Please, try again.'));
}
}
}
Salut
Ton modèle est-il bien chargé ? sinon utilise
$this->loadModel('tonmodele');
Sinon ça bloque peut être au niveau de mot de passe... regarde du coté du hash.
Marius89 : le truc c'est qu'avec cette fonction je créer un utilisateur avec les id et mdp blabla en allant sur la page add.
Or dans la fonction que tu ma donné ce n'est pas le cas ?
Elsenthil : j'ai déjà pu crée un utilisateur de cette manière ! Seulement j'ai repris complètement le code j'ai juste refait toute la partie graphique pour un autre site donc j'ai besoin d'avoir un autre mdp... Mais la ça ne fonctionne plus...
Salut
J'ai testé ton code avec le nom de mes champs bien sûr et ça marche bien, alors le problème vient sans doute de ton modèle ou de ta vue. tu peux poster la partie concernée pour qu'on voit ce qui peut bloquer ton script ? Mais je maintiens que ce genre d'erreur vient sans doute du modèle.
Dans ton exemple tu remplis 2 champs : username et password est ce que t'es sûr de ne pas avoir oublié un champs requis dans ton modèle ? Essaye de désactiver les règles de validation de User dans ton modèle pour voir si ça passe.
voici mon model
<?php
class User extends AppModel {
var $name="User";
function beforeSave($options = array()){
$this->data$this->name]'password']=Security::hash($this->data$this->name]'password'],null,true);
return true;
}
}
?>
mais je n'ai pas de vue associé ? dans le tuto c'était juste en tappant /add que ça créait le MDP
Pour commencer, dans ton controller, il ne faut pas mettre
$data'User']'username']
mais
$this->request->data'User']'username']
(par exemple)
Ensuite, remplaces
$this->name]
par
$this->alias]
dans le beforeSave de ton model.
Pour la fonction add, il te faut forcément la vue associée pour créer le nouvel utilisateur, sauf si le formulaire se trouve dans une autre vue, mais dans ce cas là, je ne vois pas l'intérêt de désigner un layout dans l'action add.
Encore mieux, si tu veux faire ta fonction un minimum correctement, fais comme ceci par exemple :
public function add(){
$this->layout = 'admin';
if ($this->request->is('post') && !empty($this->request->data)) {
$this->User->create($this->request->data);
if($this->User->save()) {
$this->Session->setFlash("L'utilisateur a bien été ajouté"); // À adapter à ton système bien sûr
}
}
return $this->redirect(array('action' => 'index')); // par exemple
}
Donc je créée une vue comme pour le login avec un champ username et password ?
Pour ajouter un utilisateur c'est mieux. :)
Tu crées la vue add.ctp, tu y met ton formulaire et puis voilà.
Sinon tu crées ton formulaire dans une autre vue et tu spécifies l'action add dans le create du helper Form.
Ça dépend ce que tu veux, sinon tu peux faire les deux aussi, l'un empêche pas l'autre.
Tu adaptes le code de l'action selon ton choix.
Alors j'ai enlever la redirection parce que ça faisait un gros bines par contre j'ai une FATAL ERROR
Error: Call to a member function create() on a non-object
File: C:\wamp\www\YOANN2\app\Controller\UsersController.php
Line: 21
voila mon controller :
<?php
class UsersController extends AppController {
public $uses = array('Post');
var $name = "Users";
/*function admin_add(){
$data=array();
$this->request->data'User']'username']='***';
$this->request->data'User']'password']='***';
$this->User->save($data);
}*/
public function add(){
if ($this->request->is('post') && !empty($this->request->data)) {
$this->User->create($this->request->data);
if($this->User->save()) {
$this->Session->setFlash("L'utilisateur a bien été ajouté"); // À adapter à ton système bien sûr
}
}
}
function login() {
if($this->request->is('post')){
if($this->Auth->login()){
return $this->redirect($this->Auth->redirect());
}else{
$this->Session->setFlash("Votre login ou votre mot de passe ne correspond pas");
}
}
}
function admin_logout(){
$this->Auth->logout();
$this->Session->setFlash("Vous êtes maintenant déconnecté","notif");
$this->redirect('/');
}
}
?>