Bonjour à tous,

Je me permet de reposter ici pour une aide !

j'ai suivit le tutoriel de Grafikart sur le "Système de membre" et je bloque sur l'affichage des données.

Voici ma BDD :

table: users
            numcarte(int(11))
            username(varchar(50))
            password(varchar(50))
            mail(varchar(75))

Ma vu "edit.ctp":

<h2>Editer mon profil !</h2>
 <?php
    echo $this->Form->create('User');
    echo $this->Form->input('numcarte', array('label'=>"Numéro de carte : "));
    echo $this->Form->input('username', array('label'=>"Login : "));
    echo $this->Form->end('Modifier'); ?>

Mon controleur

    function edit(){
        $user_numcarte = $this->Auth->user('numcarte');
        if(!$user_numcarte){
            $this->redirect('/');
            die();
        }
            $this->User->numcarte = $user_numcarte;
            $this->request->data = $this->User->read();

    }

Et je voudrais donc faire apparaitre les valeurs de ma BDD, mais le problème c'est que les champs son vide et donc aucune données n'apparait..
Merci d'avance !

14 réponses


bluuegaame
Auteur
Réponse acceptée

Bonjour @Lartak !

J'ai remit les 'id' et ça fonctionne parfaitement ! Merci beaucoup !

Lartak
Réponse acceptée

De rien, avec plaisir.

Bonjour.
Pour commencer, à quoi sert le champ numcarte dans ton formulaire, alors qu'à priori tu récupères la valeur via la session quoi qu'il arrive ?
Ensuite, si tu veux récupérer des données avec la méthode read, il te faut lui définir la valeur de la clé primaire, par exemple :

$this->User->id = $this->Auth->user('id');
$this->request->data = $this->User->read();

Ou alors :

$this->request->data = $this->User->read($this->Auth->user('id'));

Bonsoir,

Si tu veux, je dois faire un site ou lors de la connexion je visualise les données affilié au numéro de carte (numcarte) dans différente tables de ma BDD, une sorte de profil utilisateur, et je n'ai trouvé que ceci pour faire ce dont j'ai besoin.

Je viens d'essayer, et le code m'affiche toujours aucune valeurs.. :/
Si tu as une autre idée ou même façon d'afficher des données, de différentes tables je suis preneur !

Merci !!!!

Je viens d'essayer, et le code m'affiche toujours aucune valeurs.. :/

Est-ce que tu as au moins un champ id dans ta table users en base de données ?
Car dans la structure de la table que tu nous montre, le champ n'y figure pas, alors que c'est indispensable pour le composant Auth afin de pouvoir retrouver l'utilisateur dans la session.

Si tu veux, je dois faire un site ou lors de la connexion je visualise les données affilié au numéro de carte (numcarte)

En tant qu'utilisateur ou en tant qu'administrateur du site ?

Je n'ais pas d'id, car je l'ais remplacer par 'numcarte', c'est donc peut-être tout le problème ?
Car 'numcarte' est une clef primaire dans ma BDD

Il n'y à pas d'administrateur du site, juste des utilisateurs qui peuvent consulter les informations leurs concernants sur la BDD (avec plusieurs tables) grace à leur numéro de carte (numcarte) qui est unique et non nul.

Et le champ nommé numcarte, il est en autoincrement ou pas ?
Il est largement préférable d'utiliser un champ nommé id en autoincrement, car c'est ce champ là qu'utilises CakePHP pour le composant Auth et la session pour pouvoir identifier la session.

Non, tout est rentrer manuellement dans la BDD

Si j'utilise un id en autoincrement, mais que je garde mon numcarte (en plus) en clef primaire, c'est possible que ça fonctionne ?

Non, il faut que le champ id soit en clé primaire et en autoincrement, car il faut un champ qui soit défini et unique lors de la sauvegarde d'un nouvel enregistrement.
Donc comme si tu le dis, le champ nommé numcarte n'est rempli que manuellement et donc à mon avis seulement lors de la modification d'un enregistrement, ça ne pourra pas le faire, tu peux garder le champ numcarte si tu veux, mais il ne doit pas être en clé primaire.

D'accord je saisie le principe (enfin je crois ^^)

Je ne dois pas pouvoir modifier les données afficher, mais seulement les consultés, comme on consulte ses comptes, ou bien encore l'état d'un colis en distribution.
Je ferais le test demain matin avec tes précieuse indications, merci ! Je te dis quoi demain

Je n'ai jamais dit que tu ne devais pas modifier des données de la base de données, je te dit simplement que le composant Auth a besoin d'un champ nommé id et qui soit en autoincrement, car il lui faut un champ qui soit unique dans la table et qui soit défini automatiquement lors de la création d'un nouvel enregistrement.

D'accord, j'ai mal comprit alors ^^
J'ai saisie, j'essaie ça demain et je te dis ce qu'il en est

Bonsoir @Lartak,

Sais-tu comment afficher un contenu de plusieurs tables avec comme clef primaire 'id' ?

Merci d'avance

Bonjour.
Tout dépend pour commencer si tu as définies les relations entre les tables dans les modèles liées entre elles.