host = $host; $this->dbname = $dbname; $this->username = $username; $this->password = $password; // password: Qt358nUdyeTxLDM8 $this->pdo = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password); } /* retourne une instance de la classe */ public static function getInstance(){ return new DataBase("localhost", "sid", "php", "Qt358nUdyeTxLDM8"); } /*********************************************/ /*** création d'un utilisateur dans la bdd ***/ /*********************************************/ public function creerUtilisateur($username, $prenom, $nom, $email, $password, $droits){ $getLastId = $this->pdo->query('SELECT max(`id_utilisateur`) as `id` FROM `utilisateurs`'); $lastId = (int) $getLastId->fetch()['id']; // on applique une normalisation $prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule $nom = strtoupper($nom); // nom en majuscules $email = strtolower($email); // email en minuscules $password = sha1($password); // on hash le password $req = $this->pdo->prepare("INSERT INTO `utilisateurs`(`id_utilisateur`, `pseudo`, `prenom`, `nom`, `email`, `password`, `droits`) VALUES(default, :pseudo, :prenom, :nom, :email, :password, :droits)"); $req->execute(array( ':pseudo' => $username, ':prenom' => $prenom , ':nom' => $nom , ':email' => $email , ':password' => $password, ':droits' => $droits )); $added = (int) $this->pdo->lastInsertId(); if( $added > $lastId ) // si on a bien ajouté un entrée return 'success'; else return 'error'; } /****************************************/ /*** création d'un groupe dans la bdd ***/ /****************************************/ public function creerGroupe($nom){ $getLastId = $this->pdo->query('SELECT max(`id_groupe`) as `id` FROM `groupes`'); $lastId = (int) $getLastId->fetch()['id']; // on applique une normalisation $nom = strtoupper($nom); // nom en majuscules $req = $this->pdo->prepare("INSERT INTO `groupes`(`id_groupe`, `nom`) VALUES(default, :nom)"); $req->execute(array( ':nom' => $nom )); // echo var_dump( $this->pdo->errorInfo() ).'
'; $added = (int) $this->pdo->lastInsertId(); if( $added > $lastId ) // si on a bien ajouté un entrée return 'success'; else return 'error'; } /******************************************************/ /*** ajout d'un utilisateur à un groupe dans la bdd ***/ /******************************************************/ public function ajouterEtudiantGroupe($etudiant, $groupe){ // on cherche un utilisateur avec ce pseudo $getEtudiantUID = $this->pdo->prepare("SELECT `id_utilisateur` FROM `utilisateurs` WHERE `pseudo` = :username"); $getEtudiantUID->execute(array( ':username' => $etudiant )); // si on trouve, on le définit, sinon on retourne "unknown_user" if( $etudiantUID = $getEtudiantUID->fetch()['id_utilisateur'] ) $etudiantUID = (int) $etudiantUID; else return 'unknown_user'; echo '[1]'; // on cherche un groupe avec ce nom $getGroupeUID = $this->pdo->prepare("SELECT `id_groupe` FROM `groupes` WHERE `nom` = :nom"); $getGroupeUID->execute(array( ':nom' => $groupe )); // si on trouve, on le définit, sinon on retourne "unknown_group" if( $groupeUID = $getGroupeUID->fetch()['id_groupe'] ) $groupeUID = (int) $groupeUID; else return 'unknown_group'; echo '[2]'; // si on a l'UID utilisateur & l'UID groupe => on créé l'association $asso = $this->pdo->prepare("INSERT INTO `association_utilisateur_groupe`(`id_utilisateur`, `id_groupe`) VALUES( (SELECT `id_utilisateur` FROM `utilisateurs` WHERE `id_utilisateur` = :utilisateur), (SELECT `id_groupe` FROM `groupes` WHERE `id_groupe` = :groupe) )"); $asso->execute(array( ':utilisateur' => $etudiantUID, ':groupe' => $groupeUID )); echo '[3]'; return 'success'; } /******************************************************/ /*** retourne la liste des utilisateurs d'un groupe ***/ /******************************************************/ public function listeEtudiantsGroupe($groupe){ // on cherche un groupe avec ce nom $getGroupeUID = $this->pdo->prepare("SELECT `id_groupe` FROM `groupes` WHERE `nom` = :nom"); $getGroupeUID->execute(array( ':nom' => $groupe )); // si on trouve pas le groupe, on retourne "unknown_group" if( !($groupeUID = $getGroupeUID->fetch()['id_groupe']) ) return 'unknown_group'; // si le groupe existe => on créé récupère ses utilisateurs $asso = $this->pdo->prepare("SELECT `u`.`pseudo`, `u`.`prenom`, `u`.`nom`, `u`.`email`, `u`.`droits` ". "FROM `utilisateurs` as `u`, `groupes` as `g`, `association_utilisateur_groupe` as `asso` ". "WHERE `u`.`id_utilisateur` = `asso`.`id_utilisateur` ". "AND `g`.`id_groupe` = `asso`.`id_groupe` ". "AND `g`.`nom` = :groupe ". "ORDER BY `u`.`prenom`, `u`.`nom`"); $asso->execute(array( ':groupe' => $groupe )); $userlist = $asso->fetchAll(); // on supprime les doublons des entrées (indice numérique) for( $j = 0 ; $j < count($userlist) ; $j++ ) // pour tout les utilisateurs foreach($userlist[$j] as $col => $val) // pour toutes les entrées if( is_int($col) ) // si l'indice est un entier unset( $userlist[$j][$col] ); // on le supprime return $userlist; // on retourne le liste d'utilisateurs } /******************************************************/ /*** retourne la liste des utilisateurs des groupes ***/ /******************************************************/ public function listeEtudiantsTousGroupes(){ $grouplist = array(); // contiendra tout les groupes // on cherche tout les groupes $getGroupesUID = $this->pdo->query("SELECT `id_groupe`, `nom` FROM `groupes` ORDER BY `nom`"); // on parcourt tous les groupes while( $groupeUID = $getGroupesUID->fetch() ){ $groupe = new stdClass(); $groupe->nom = $groupeUID['nom']; // attribut "nom" ajouté au groupe $groupe->userlist = $this->listeEtudiantsGroupe($groupe->nom); // on charge la liste des utilisateurs de ce groupe array_push($grouplist, $groupe); // on l'ajoute au résultat } return $grouplist; // sinon on retourne le tableau } /***********************************************/ /*** retourne le nom du groupe d'un étudiant ***/ /***********************************************/ public function getGroupeEtudiant($etudiant){ $grouplist = array(); // contiendra tout les groupes // on cherche le groupe associé $getNomGroupe = $this->pdo->prepare("SELECT `g`.`nom` ". "FROM `utilisateurs` as `u`, `groupes` as `g`, `association_utilisateur_groupe` as `asso` ". "WHERE `u`.`id_utilisateur` = `asso`.`id_utilisateur` ". "AND `g`.`id_groupe` = `asso`.`id_groupe` ". "AND `u`.`pseudo` = :etudiant ". "ORDER BY `g`.`nom`"); $getNomGroupe->execute(array( ':etudiant' => $etudiant )); // si on a un résultat if( $nomGroupe = $getNomGroupe->fetch()['nom'] ) return $nomGroupe; else return 'error'; } /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ public function deplacerEtudiant($nomEtudiant,$nouveauGroupe) { // !!! Réfléchir à la gestion des AS, LP etc.. // pas bon car la on ne sait même pas quels groupes seront définis dans la base de donnée // il faut donc pas vérifier les groupes en dur (c'est salasse) // ensuite on ne retourne jamais un texte, mais un code d'erreur 'success' ou 'error' fin sinon y'a trop de cas // particuliers à gérer au niveau de la réponse // // exemple: // [1] si l'utilisateur n'existe pas "unknown_user" // [2] si le groupe n'existe pas "unknown_group" // [3] si l'utilisateur n'est déjà dans un groupe (donc l'association n'existe pas) ça veut dire qu'on doit faire un // INSERT INTO au lieu d'un UPDATE, donc il faut aussi retourner une erreur ou bien faire une condition pour gérer ce cas (comme tu veux) // // ducoup si je résume: // [1] dans manager/groups.php ajoute un @case au @switch du genre "move" // [2] toujours dans manager/groups.php vérifie l'intégrité des variables comme c'est déjà fait // [3] ensuite tu peux écrire manager/database.php en vérifiant tout les cas (ceux que j'ai cité ou oublié) // // Inspire toi de ce qui a déjà été fait au dessus et essaie de if(isset($nouveauGroupe) && is_string($nouveauGroupe) && $nouveauGroupe == 'A' || 'B' || 'C' || 'D' || 'E' || 'F') return 'L\'étudiant a été déplacé'; else return 'L\'étudiant n\'a pas pu être déplacé'; } } ?>