Bonjour,

Je m'excuse de vous déranger.
J'ai une question par rapport au tutoriel du système de membres avec CakePHP.

Lors de l'édition d'un compte, on peut modifier le Prénom, Nom et le mot de passe.
Dans la base de données et la table « users », j'ai rajouté un champs « psn » (Compte Playstation Network).

J'aimerais qu'on puisse modifier ce champs lors de l'édition du compte.
Mais cela ne marche pas.
Ma question est comment rajouter d'autres champs, finalement.

Code « edit.ctp » (View) :

<?php echo $this->Form->create('User'); ?>
                   <?php echo $this->Form->input('firstname',array('label'=>"Prénom", 'placeholder'=>"Votre Prénom")); ?>
                   <?php echo $this->Form->input('lastname',array('label'=>"Nom", 'placeholder'=>"Votre Nom")); ?>
                   <?php echo $this->Form->input('pass1',array('label'=>"Mot de passe", 'placeholder'=>"Votre Mot de passe")); ?>
                   <?php echo $this->Form->input('pass2',array('label'=>"Confirmer le mot de passe", 'placeholder'=>"Confirmation")); ?>
                    <?php echo $this->Form->input('psn',array('label'=>"PSN", 'placeholder'=>"Nom d'utilisateur Playstation Network")); ?>
                                        <?php echo $this->Form->input('test',array('label'=>"test",
                <?php
                    $options = array(
                        'label' => 'Valider',
                        'value' => 'Send',
                        'id' => 'profil'
                    );
                ?>
                <?php echo $this->Form->end($options); ?>

Code « UsersController » :

function 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']'pass1'])) {
                if($d'User']'pass1'] == $d'User']'pass2']) {
                    $d'User']'password'] = Security::hash($d'User']'pass1'],null,true); 
                }
                else {
                    $passError = true;  
                }
            }
            if($this->User->save($d,true,array('firstname','lastname','password','psn'))) {
                $this->Session->setFlash("Votre profil 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'] = ''; 
    }

Code « User.php » (Model) :

<?php
class User extends AppModel{

    public $validate = array(
        'username' => array(
            array(
                'rule' => 'alphanumeric',
                'required' => true,
                'allowEmpty' => false, 
                'message' => "Votre pseudo n'est pas valide"
            ),
            array(
                'rule' => 'isUnique',
                'message' => 'Ce pseudo est déja pris'
            )
        ),
        'mail' => array(
            array(
                'rule' => 'email',
                'required' => true,
                'allowEmpty' => false, 
                'message' => "Votre email n'est pas valide"
            ),
            array(
                'rule' => 'isUnique',
                'message' => 'Cet email est déjà pris'
            )
        ),
        'password' => array(
            'rule' => 'notEmpty',
            'message' => "Vous devez entrer un mot de passe",
            'allowEmpty' => false
        ),
        'psn' => 'psn'
    );
}

Debug :

\app\View\Elements\debug.ctp (line 12)
array(
    'Config' => array(
        'userAgent' => 'e353ac1e6f2bd155ad80c58b8bc491d9',
        'time' => (int) 1361378161,
        'countdown' => (int) 10
    ),
    'Auth' => array(
        'User' => array(
            'id' => '5',
            'username' => 'test',
            'mail' => 'test@hotmail.fr',
            'created' => '2013-02-18 16:31:58',
            'lastlogin' => '2013-02-20 11:44:50',
            'active' => '1',
            'firstname' => 'Adrien',
            'lastname' => 'Boisson',
            'psn' => ''
        )
    ),
    'Message' => array()
)

Merci d'avance de votre aide ! =)

Amicalement,
DexX

2 réponses


DexX
Auteur

UP Please ;)

C'est sans doute ta validation sur le champ psn qui pose problème. En effet elle ne veut rien dire. Ça peut peut être bloquer la sauvegarde du champ.

Supprime cette validation dans un premier temps. Si le problème est résolu, on verra ensuite comment le sécuriser.