1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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);
}
}
?>
|