diff options
Diffstat (limited to 'Database/dbmain.php')
| -rw-r--r-- | Database/dbmain.php | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/Database/dbmain.php b/Database/dbmain.php new file mode 100644 index 0000000..43e39ef --- /dev/null +++ b/Database/dbmain.php @@ -0,0 +1,143 @@ +<?php +// **************************************************************************** +// Description: Partie commune des deux ensembles de méthodes +// pour la gestion de la BDD +// **************************************************************************** +// Utilisation de PDO: +// https://www.php.net/manual/fr/pdo.connections.php +// +// private: accessible uniquement dans la class +// protected: accesible depuis l'extérieur et donc via extend mais non modifiable +// public: accessible et modifiable depuis l'extérieur +// final: ne peut etre ré-écris (overload) +// +class DbMain { + // Salt pour chiffrement + private $salt = "cTKXHBoN3oxymlhNem2h"; + // Configuration du serveur MYSQL / MARIADB + private $conn; + private $host = "127.0.0.1"; + private $user = "root"; + private $pass = ""; + // Déclaration des tables + private $database = "ExoPhp"; + // UserAccount, infos du compte nécessaire à la connection + // Timestamp auto si non renseigné + private $createTableUserAccount = "userAccount ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + email VARCHAR(128) NOT NULL, + password VARCHAR(128) NOT NULL, + tokenAutoLogin VARCHAR(128), + inscriptionDate TIMESTAMP NOT NULL, + isUser BOOL NOT NULL, + isConsultant BOOL NOT NULL, + isAdmin BOOL NOT NULL + )"; + // Infos complémentaires des utilisateur, liée à userAccount par userId à id + private $createTableUserInfo = "userInfo ( + lastname VARCHAR(128) NOT NULL, + firstname VARCHAR(128) NOT NULL, + job varchar(128), + degree VARCHAR(128), + capability TEXT, + description TEXT, + phoneNumber VARCHAR(10), + adress VARCHAR(128), + zipCode VARCHAR(6), + city VARCHAR(128), + userId INT UNSIGNED PRIMARY KEY, + FOREIGN KEY (userId) + REFERENCES userAccount(id) + )"; + // Infos sur les missions effectuées, liée à userAccount par userId et consultantId à id + private $createTableMission = "mission ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + date TIMESTAMP NOT NULL, + subject VARCHAR(128), + note INT(1) UNSIGNED, + review TEXT, + userId INT UNSIGNED NOT NULL, + FOREIGN KEY (userId) + REFERENCES userAccount(id), + consultantId INT UNSIGNED NOT NULL, + FOREIGN KEY (consultantId) + REFERENCES userAccount(id) + )"; + + // Noms des tables + protected $tableUserAccount = "userAccount"; + protected $tableUserInfo = "userInfo"; + protected $tableMission = "mission"; + + // Création de la DB si elle n'existe pas + private function create_db() { + $reqInitDb = "CREATE DATABASE IF NOT EXISTS ".$this->database; + $res = $this->conn->prepare($reqInitDb); + $res->execute(); + } + + // Sélection de la DB + private function select_db() { + $reqSelectDb = "USE ".$this->database; + $res = $this->conn->prepare($reqSelectDb); + $res->execute(); + } + + // Création des tables si elles n'existent pas + private function create_table() { + $reqInitUserAccount = "CREATE TABLE IF NOT EXISTS ".$this->createTableUserAccount; + $res = $this->conn->prepare($reqInitUserAccount); + $res->execute(); + $reqInitUserInfo = "CREATE TABLE IF NOT EXISTS ".$this->createTableUserInfo; + $res = $this->conn->prepare($reqInitUserInfo); + $res->execute(); + $reqInitMission = "CREATE TABLE IF NOT EXISTS ".$this->createTableMission; + $res = $this->conn->prepare($reqInitMission); + $res->execute(); + } + + // Déclenche les méthodes pour créer la BDD + private function init() { + $this->create_db(); + $this->select_db(); + $this->create_table(); + } + + // Chiffre la data reçue + final public function crypt_pass($pass) { + $crypt = crypt($pass, $this->salt); + return $crypt; + } + + // Prépare la requète pour mitiger (se protéger) les injections SQL et + // initialise si nécessaire la BDD à chaque requète + final public function exec_cmd($req, $arg) { + $this->init(); + $res = $this->conn->prepare($req); + $res->execute($arg); + return $res; + } + + // Vérifie si l'email existe dans la table userAccount de la BDD + final public function check_exist_email($email) { + $reqCheckEmailExist = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE email = ?)"; + $data = $this->exec_cmd($reqCheckEmailExist, array($email))->fetchAll(PDO::FETCH_NUM); + // Retourne 1 si existe, sinon 0 + return $data[0][0]; + } + + // Vérifie si l'id est un consultant dans la table userAccount de la BDD + final public function check_exist_consultant($id) { + $reqCheckExistConsultant = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE id = ? AND isConsultant = '1')"; + $data = $this->exec_cmd($reqCheckExistConsultant, array($id))->fetchAll(PDO::FETCH_NUM); + // Retourne 1 si existe, sinon 0 + return $data[0][0]; + } + + // Fonction "auto", déclenchée à l'instanciation + final public function __construct() { + // Essaie de se connecter a la BDD + $this->conn = new PDO("mysql:host=".$this->host, $this->user, $this->pass); + } +} +?>
\ No newline at end of file |
