2009-04-13 4 views
0

J'utilise cakePHP et je veux ajouter une colonne Prénom et Nom dans la table Utilisateurs, mais lorsque je passe les valeurs firstname & lastname les colonnes sont toujours vides, alors que les champs par défaut sont bien remplis.Puis-je avoir des champs supplémentaires sur la table des utilisateurs dans CakePHP et toujours utiliser les méthodes d'authentification intégrées?

Est-il possible de faire cela ou dois-je avoir une deuxième table pour stocker ces valeurs?

Code de mise à jour:

Formulaire d'inscription

 <?php 
    $session->flash('register'); 
    echo $form->create('User', array('action' => 'register/')); 
    echo '<h3>Register</h3>'; 
    echo $form->input('firstname', array('label'=>'First Name')); 
    echo $form->input('lastname', array('label'=>'Last Name')); 
    echo $form->input('username'); 
    echo $form->input('email'); 
    echo '<input class="submitimg" type="image" src="' . $basepath . 'img/btn_submit.gif" alt="Submit" />'; 
    echo $form->end(); 
    ?> 

d'action registre user_controller.php

function register() { 
    if (!empty($this->data)) { 

     $password = $this->str_makerand(8,10); 
     $this->data['User']['password'] = $this->Auth->password($password); 

     $this->User->create(); 
     $result = $this->User->save($this->data); 

     if ($result) { 
      $this->Session->setFlash('Registration complete, an email will be sent with your password', 'default', array(), 'register'); 
      $this->sendNewUserMail($this->data['User']['username'], $this->data['User']['email'], $password); 
     } else {    
      $this->Session->setFlash('That username or email address is already taken, please try again', 'default', array(), 'register'); 
     }   
    } 
    $this->redirect(array('controller' => 'properties', 'action' => 'index')); 
} 

table utilisateurs MySQL:

CREATE TABLE users (
    id int(11) NOT NULL AUTO_INCREMENT, 
    username char(50) DEFAULT NULL, 
    firstname varchar(100) NOT NULL, 
    lastname varchar(100) NOT NULL, 
    password char(50) DEFAULT NULL, 
    email varchar(100) NOT NULL, 
    created datetime NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY email (email), 
    UNIQUE KEY username (username) 
) 

Merci pour votre aide

Répondre

2

Vous pouvez certainement avoir des champs supplémentaires sur votre table d'utilisateurs. Le composant Auth autorisera simplement contre vos champs de nom d'utilisateur et mot de passe dans cette table. En fait, si vous lisez les attributs du composant Auth, vous constaterez que vous pouvez définir les champs que Cake utilisera comme champs user/pass.

On dirait que votre problème est un bug. S'il vous plaît poster un code et un schéma de base de données et je vais jeter un oeil pour vous aider plus loin.

0

Dans des cas comme ceux-ci, il est recommandé d'avoir une table séparée liée à la table utilisateur qui inclut toutes les informations supplémentaires que vous souhaitez conserver.

0

Ceci est ma table d'utilisateurs:

CREATE TABLE `cake_users` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `username` varchar(100) default NULL, 
    `password` varchar(100) default NULL, 
    `email` varchar(150) default NULL, 
    `firstname` varchar(60) default NULL, 
    `lastname` varchar(60) default NULL, 
    `priv` int(4) default '0', 
    PRIMARY KEY (`id`) 
); 

Je n'ai pas l'enregistrement public utilisateur, mais je peux créer des utilisateurs avec les champs supplémentaires. C'est le code que j'utilise dans le contrôleur:

function admin_add() { 
    if (!empty($this->data)) { 
     $this->User->create(); 
     $this->set('password',$this->Auth->password($this->data['User']['password'])); 
     if ($this->User->save($this->data)) { 
      $this->Session->setFlash(__('The User has been saved', true)); 
      $this->redirect(array('action'=>'index')); 
     } else { 
      $this->Session->setFlash(__('The User could not be saved. Please, try again.', true)); 
     } 
    } 
} 
0

Des champs supplémentaires sont, bien sûr, possibles et normaux. Il y a probablement un bug caché quelque part dans votre code.

Avez-vous essayé de déboguer/sortir $this->data après un post? Vos valeurs prénom/nom sont-elles affichées dans le tableau? Avez-vous une liste blanche de colonne/liste noire dans votre modèle qui empêche l'enregistrement de ces champs? Comment les champs de saisie apparaissent-ils dans le HTML de sortie? Ils sont censés être nommés data[User][firstname] et s'ils ne le sont pas, quelque chose est terriblement mauvais ..

Questions connexes