summaryrefslogtreecommitdiff
path: root/Database/dbmain.php
diff options
context:
space:
mode:
Diffstat (limited to 'Database/dbmain.php')
-rw-r--r--Database/dbmain.php143
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