178 lines
6.6 KiB
PHP
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;
|
|
}
|
|
|