2021-05-28 10:56:04 +02:00

178 lines
6.6 KiB
PHP

<?php
/* * ***************************************************************************
* accesBDD.php
* Regroupement de toutes les fonctions d'accès à la base de données
* ************************************************************************** */
define("DEBUG_SQL", "debug-sql"); // nom du fichier de log
define("TYPE_LOG", 0); // utilisation du fichier de log standard
//define("TYPE_LOG", 3); // utilisation du fichier de log défini dans DEBUG_SQL
//unlink(DEBUG_SQL); // suppression fichier log
/**
* Connexion persistante au serveur
* @return \PDO Connexion
*/
function connexion() {
// Définition des variables de connexion
$user = "admin";
$pass = "minda";
$dsn = 'mysql:host=localhost;dbname=bdgsb'; //Data Source Name
// Connexion
try {
$dbh = new PDO($dsn, $user, $pass, array(
PDO::ATTR_PERSISTENT => true, // Connexion persistante
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
} catch (PDOException $e) {
erreurSQL($e->getMessage(), "Pb connexion", $dbh);
}
return $dbh;
}
/**
* Ajout de l'utilisateur dont les données sont passée en paramètre
* @param type $dbh chaine de connexion
* @param type $nom nom du nouvel utilisateur
* @param type $prenom prenom du nouvel utilisateur
* @param type $mail courriel du nouvel utilisateur
* @param type $login login, qui devra être unique
* @param type $mdp mot de passe
*/
function ajouterUtilisateur($dbh, $nom, $prenom, $mail, $login, $mdp) {
$ajout = false;
if (!existLogin($dbh, $login)) {
//echo("<br>mdpChiffre : " . $mdpChiffre);
$mdpChiffre = password_hash($mdp, PASSWORD_DEFAULT); //************ Chiffrement
$sql = "INSERT INTO utilisateur VALUES (NULL, '$nom', '$prenom', '$mail', '$login', '$mdpChiffre');";
$resultat = $dbh->exec($sql);
if ($resultat === false) {
erreurSQL("Pb lors de l ajout d un utilisateur.", $sql, $dbh);
}
$ajout = true;
}
return $ajout;
}
/**
* Recherche si le login existe déjà
* @param type $dbh Connexion
* @param type $login pseudo à vérifier
* @return type booléen, true si le login existe
*/
function existLogin($dbh, $login) {
$sql = "SELECT COUNT(*) FROM utilisateur WHERE login = '$login';";
$resultat = $dbh->query($sql); // Execution de la requete
if ($resultat === false) {
erreurSQL("Pb lors de la recherche du login.", $sql, $dbh);
}
$count = $resultat->fetchColumn(); // Retourne la valeur de la 1ère col de la ligne suivante (param 0 par défaut)
return ($count > 0);
}
/** afficherErreurSQL :
* Ajout message d'erreur dans le fichier log, fin de l'application
* @param $message : message a afficher
* @param $req : requete executee
* @param $dbh : connexion PDO
*/
function erreurSQL($message, $req, $dbh) {
error_log("\n***Erreur SQL*** " . date('Y-m-d H-i-s') . "\tAdresse IP : " . getIp(), TYPE_LOG, DEBUG_SQL);
error_log("\n\tMessage: " . $message, TYPE_LOG, DEBUG_SQL);
error_log("\n\tRequete: " . $req, TYPE_LOG, DEBUG_SQL);
if ($dbh) {
//$erreur = print_r($dbh->errorInfo(), true);
$erreur = $dbh->errorInfo()[2];
error_log("\n\tErreur: " . $erreur, TYPE_LOG, DEBUG_SQL);
}
//echo("Taille log : " . stat(DEBUG_SQL)[7]);
//echo(" - Date dernière modif : " . date("d m Y H:i:s.", filemtime(DEBUG_SQL)));
if (isset($_SESSION)) {
session_unset();
session_destroy();
}
die("<p id='erreur1'>Désolé, site actuellement indisponible </p>");
}
/**
* Controle de l'utilisateur, mot de passe non chiffré
* @param type $dbh
* @param type $pseudo
* @param type $mdp
* @return type utilisateur trouvé ou false sinon;
*/
function rechercherUtilisateur($dbh, $login, $mdp) {
$sql = "SELECT * FROM utilisateur WHERE login = '$login' AND mdp = '$mdp';";
$resultat = $dbh->query($sql); // Execution de la requete
if ($resultat === false) {
erreurSQL("Pb lors de la recherche de l utilisateur.", $sql, $dbh);
}
return $resultat->fetch();
}
/**
* Recherche de tous les clients
* @param type $dbh
* @return type jeu d'enregistrements
*/
function rechercherLesClients($dbh) {
$sql = "SELECT * FROM client ORDER BY codePostal;";
$resultat = $dbh->query($sql); // Execution de la requete
if ($resultat === false) {
erreurSQL("Pb lors de la recherche des clients.", $sql, $dbh);
}
return $resultat;
}
/**
* Controle de l'utilisateur, mot de passe chiffré
* @param type $dbh
* @param type $login
* @param type $mdp
* @return type false si le contrôle a échoué, l'utilisateur sinon
*/
function controlerUtilisateur($dbh, $login, $mdp) {
$sql = "SELECT * FROM utilisateur WHERE login = '$login';";
$resultat = $dbh->query($sql); // Execution de la requete
if ($resultat === false) {
erreurSQL("Pb lors de la recherche de l utilisateur.", $sql, $dbh);
}
$user = $resultat->fetch();
$hash = $user ? $user["mdp"] : " ";
return password_verify($mdp, $hash) ? $user : false;
}
/**
* Récupération adresse IP du client
* @return type
*/
function getIp() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function rechercherLesVisitesDuCommercial($dbh, $id) {
$sql = "SELECT idVisite, praNom, praPrenom, praVille, date, heure, remarque FROM visite INNER JOIN praticien ON visite.praNum= praticien.praNum ORDER BY date, heure";
$resultat = $dbh->query($sql); // Execution de la requete
if ($resultat === false) {
erreurSQL("Pb lors de la recherche des visites.", $sql, $dbh);
}
return $resultat;
}
function rechercherLesComptesRendusDuCommercial($dbh, $idVisite){
$sql = "SELECT idCompteRendu, praNom, praPrenom, visite.date, visite.heure, remarque, compteRendu FROM comptesRendus INNER JOIN visite ON visite.idVisite= comptesRendus.idVisite NATURAL JOIN praticien WHERE visite.idVisite = $idVisite";
$resultat = $dbh->query($sql); // Execution de la requete
if ($resultat === false) {
erreurSQL("Pb lors de la recherche des comptes rendus.", $sql, $dbh);
}
return $resultat;
}