Bonjour à tous !

Je suis en BTS Système Numérique option Informatique et Réseaux (SNIR), et je dois réaliser un site web avec le framework CakePHP 2.5.5 avec comme serveur web Wampp et ainsi PHPmyadmin.

Le but de mon site est assez simple :

Crée un site de consultation de compte pour une cantine avec connexion et profils utilisateurs.

En voici la Base de Données : http://img15.hostingpics.net/pics/852721BDD.png

Le principe est simple :
1) Je rentre manuellement les données dans les tables "Eleves" et "Professeurs".
2) Je dois m'inscrire sur le site en créant un login (:username) et mot de passe (:password)
3) Je dois sélectionner par l'intermédiaire de cases à cocher si je cherche un Eleve ou un Personnels
4) Je dois également indiquer l'adresse mail (et avec une requête vérifier si dans la table selectionner au dessus elle est existante, et si oui remplir la case 'Eleves_id_eleves' ou 'Personnelles_id_personelles' avec l'id à laquelle appartient d'adresse en question) et stocker le tout dans la table Users
5) Une fois effectué le compte est inscrit
6) Et il peut à présent se connecté avec les identifiants qu'il à crée juste avant
7) Quand il se connecte il arrive sur une page de profil ou toute les informations propre à lui même de la table Eleves/Professeurs sont afficher

Rien de très compliquer hein ^^'

Ce qu'ai déjà fait :

Fonction d'inscription au site dans le controller :

function signup(){
        $user_id = $this->Auth->user('id');
        if(!$user_id){
            if($this->request->is('post')){
                $d = $this->request->data;
                $d['User']['id'] = null;
                    if(!empty($d['User']['password'])){
                        $d['User']['password'] = Security::hash($d['User']['password'], null, true);
                    }
                if($this->User->save($d, true, array('username', 'password'))){
                    $this->Session->setFlash("Votre compte à bien été crée");
                }
                else{
                    $this->Session->setFlash("Problème liée à la création du compte");
                    debug();
                }
            }
        }
        else{
        $this->redirect('edit');
            die();
        }
    }

Fichier .ctp d'inscription :

<div id="signup">
<h2>S'enregistrer</h2>
<br>
<div id="sidenfifier">
<p>Pour pouvoir s'enregistrer, veuillez-vous munir de votre numéro de carte, saisir un nom utilisateur (Login) ainsi qu'un mot de passe.<br><br>
L'adresse email de l'ENT se compose de prénom.nom@ent-lycee.fr | L'adresse email académique se compose de prénom.nom@ac-reims.fr<br></p>
<?php echo $this->Form->create('User'); ?>
    <?php echo $this->Form->input('username', array('label'=> "Login : ")); ?>
    <?php echo $this->Form->input('password', array('label'=> "Mot de passe :")); ?>
    <?php echo $this->Form->input('Eleves_id_eleves', array('label'=> "identifiant :")); ?><br>
<?php echo $this->Form->end('Enregistrer'); ?>
</div></div>

Et je ne sais pas si ça peut servir, mais voici mon modèle :

<?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éjà prit !'
            )
        ),

        'password' => array(
                'rule' => 'notEmpty',
                'message' => 'Entrer un mot de passe !',
                'allowEmpty' => false
        ),

        'mail' => array(
            'rule' => 'IsUnique',
                'message' => 'Cette email existe déjà !'
            )
    );
} ?>

Le problème que je rencontre :

Je ne sait pas comment faire la partie N°3 et N°4
J'ai regardé la vidéo de Grafikart sur les associations, je ne vois pas comment dire à CakePHP que mes tables sont relier, et donc d'effectuer les requêtes que j'ai besoin avec le mail et les id_eleves/personnels

Si vous pouvez m'aidé, ou si vous avez des tutos, des conseils, ou bien tout autre chose je suis preneur ! :)

(Je ne demande pas une répoonse de code toute faite, mais des indications, ou bien des bouts de code pour avancer..)

Un GRAND MERCI d'avance à celui qui m'aidera à avancer !

5 réponses


Est-ce que ta table doit absolument être comme ça ? Car je vois deux soucis assez flagrant :

  • Tu ne respectes pas les conventions de CakePHP pour les liaisons
  • Tu as des données liées à l'utilisateur qui se retrouve dans tes autres tables (nom, prenom, mail) et qui se "répètent"

Sinon, tu as besoin de liaison "hasOne" : https://book.cakephp.org/2.0/fr/models/associations-linking-models-together.html#hasone
Tu galères à faire tes liaisons de modèles car tu ne respectes pas les conventions de CakePHP, tes champs doivent se nommer respectivement : eleve_id et personnel_id. De plus, met le nom de tes tables en minuscules, sinon, tu vas devoir tout déclarer dans tes modèles.

Pour le problème du 3, met des inputs de type "radio"
Pour le problème du 4, met les champs "nom", "prenom" et "mail" dans ta table users, ce qui règlera ton problème :)

Avec ça, tu devrais déjà mieux t'en sortir.

Bonjour Karely,

Tout d'abord merci de ta réponse !

En ce qui concerne la BDD elle est disons "temporaire" (Mon client change tout le temps la BDD)
Pour les liaisons que tu as citer, tu as raison et je vais de suite changer cela ! Merci !

Pour le problème 3 j'en prends notes, je vais essayer cela !
Le problème 4 à été résolu autrement, je n'ais plus besoin de l'inscription (2), je rentre directement les mots de passe depuis la BDD, et donc je ne gère que la connexion qui fonctionne très bien :)

Pour les liaisons j'ai regarder la vidéo de grafikart et j'ai noter que $hasOne serait mon outil principal

Du au changement de la fonction du site je remet ici les "étapes" et donc les fonctions du sites

1) Je rentre manuellement les données utilisateurs dans les différentes tables des informations utilisateurs
2) Pour la connexion, j'ai un compte djà crée (avec des identifiants préalablement rentrer et donné à chaque utilisateurs)
3) Je dois sélectionner par l'intermédiaire de cases à cocher si je cherche un Eleve ou un Personnels
4) Une fois selectionner je me connecte et voit les informations relative au compte

Merci beaucoup de ton aide !
Cordialement, Bluuegaame

Personnellement, j'aurais créé une seule table...

Caractéristiques :

  • Role : DEFAULT 'STUDENT'
  • Balance : DEFAULT 0
  • Classroom : DEFAULT NULL
  • Regime : DEFAULT NULL

Comme ça, c'est directement plus modulable. Imagine que demain, il te demande d'ajouter une colonne "sexe" pour les élèves et les membres du personnel... Tu rajoutes encore une colonne dans chaque table, avec une seule table, tu modifies dans une seule table

Bonsoir.
Soit tu te moques de nous ou alors tu t'y perds totalement dans tes explications, car tu commences par dire :

Je suis en BTS Système Numérique option Informatique et Réseaux (SNIR), et je dois réaliser un site web avec le framework CakePHP 2.5.5 avec comme serveur web Wampp et ainsi PHPmyadmin.

Ce qui ne peut nous faire que penser que c'est une demande au niveau scolaire, sauf que plus tard tu dis :

En ce qui concerne la BDD elle est disons "temporaire" (Mon client change tout le temps la BDD)

Depuis quand vous considérez le personnel du corps enseignant comme des clients et non comme des formateurs ?
Surtout qu'étant donné que ça m'étonnerait beaucoup que ce soit pour l'un ou pour l'autre, qu'ils te forcent à utiliser une aussi ancienne version de Framework, concernant la V3, la première Release Candidate est sortie il y a plus de 2 ans maintenant (02/01/2015) et pour la V2 le framework en est à la V2.9 ce qui est quand même loin de la V2.5 alors que la première Release Candidate de la V2.6 est sortie il y a plus de 2 ans également (08/11/2014)

Bonsoir !

Merci @Kareylo pour ton aide je vais faire ainsi !

Bonsoir Lartak !

Je ne me perds pas du tout dans mes explications. Je suis bel et bien en BTS SNIR, et mon projet (suivit avec cahier des charges) est un projet semi-professionnels. Je m'explique, début janvier les étudiants qui sont dans ma sections sont regroupés par groupe de trois et il nous ait confier un projet professionnels (en accord avec l'académie). Il y a un projet de micro-crèche, un autre de roue de vieillissement du bois, et le mien qui la gestion de self-service.
Ce projet de gestion de self-service est l'amélioration du système actuelle présent dans mon lycée.
Le sujet à été préparer par mes professeurs est soumit à un conseil qui a lieu au rectorat qui valide les projets. Dans le sujet et les outils à ma disposition la version de CakePHP ma été donné par le corps enseignant.
Mon client n'est pas comme les deux autres projets qui professionnels qui attendent depuis quelque temps déjà la finition du projet.
Le mien est l'équipe de restauration ainsi que la personne qui gère l'intendance, ils sont la pour juger comme dans les autres projets MAIS il ne sera jamais appliquer aux quotidien.
Et pour veiller au bon déroulement et l'avancement du projet l'équipe enseignant ainsi que les personnes cités au dessus se réunissent pour juger d'une part la partie communication avec le client et la bonne "vente" du projet a des personnes qui ne sont pas dans l'univers informatique, et d'autre part pour juger, critiquer et aiguiller les choix et les codes que l'ont fait.
Voilà j'espère avoir répondu à ton post comme il se doit, et si tu as d'autre incohérences que j'aurais mal exprimer je suis là pour y répondre
Bonne soirée, Bluuegaame