Ajout de connexion à la bdd + script SQL + page projets en cours de reflexion

This commit is contained in:
Esteban
2026-05-29 09:15:19 +02:00
parent 1d1eea4968
commit caf9bded6d
8 changed files with 136 additions and 6 deletions
+30
View File
@@ -0,0 +1,30 @@
<?php
// J'héberge un serveur de base de donnée sur un serveur
// Pour éviter que les identifiants soient lisible sur Gitea je vais appeller un fichier qui n'est pas dans le projet
// EXEMPLE de a quoi ressemble idConnection :
// define('DB_HOST', 'adresse_ip');
// define('DB_PORT', port);
// define('DB_NAME', 'portfolio');
// define('DB_USER', 'srv_portfolio');
// define('DB_PASS', 'mdp');
// On importe le fichier avec les IDs
require_once('../../idConnection.php');
// Connexion à la base grâce à l'API PDO
// Définitions des identifiants de connexion grâce au fichier idConnection
$dsn = 'mysql:host='. DB_HOST . ';port=' . DB_PORT . ';dbname=' . DB_NAME;
$user = DB_USER ;
$pass = DB_PASS ;
try {
// TENTATIVE de connexion
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
// SI erreur, RENVOIE erreur
die("Erreur de connexion à la base de donnée portfolio :".$e->getMessage());
}
+28
View File
@@ -0,0 +1,28 @@
-- On créer la base de donnée si elle n'existe déjà aps
CREATE DATABASE IF NOT EXISTS portfolio
-- On créer un utilisateur avec un mot de passe fort qui est à changer après execution dus script (voir bitwarden)
CREATE USER 'srv_portfolio'@'localhost' IDENTIFIED BY 'mdp';
-- On met les droits au compte sur la base portfolio à l'utilisateur
GRANT ALL ON portfolio.* TO 'srv_portfolio'@'localhost';
-- On actualise les permissions
FLUSH PRIVILEGES;
-- Création de la table user :
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL, -- Je laisse ici de la place pour prévoir un futur hashage et sallage
role ENUM('admin', 'user') NOT NULL DEFAULT 'user',
created_at DATETIME NULL DEFAULT NULL,
last_login DATETIME NULL DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE INDEX idx_username (username)
);
-- Compte de test
INSERT INTO users (username, password, role)
VALUES ('admin', 'admin', 'admin');
+4 -1
View File
@@ -4,6 +4,9 @@
// Rappel des différentes pages : Acceuil, Projets, Contact // Rappel des différentes pages : Acceuil, Projets, Contact
// Rappel des boutons : Connexion, (Si le temps) Panneau Administrateur (Seulement si l'utilisateur est admin) // Rappel des boutons : Connexion, (Si le temps) Panneau Administrateur (Seulement si l'utilisateur est admin)
// Ajout ici d'un démarrage de session : header étant dans toutes les pages
session_start();
?> ?>
@@ -20,7 +23,7 @@
<nav> <nav>
<a href="./../index.php">Accueil</a> <a href="./../index.php">Accueil</a>
<a href="./projets.php">Projets</a> <a href="./projects.php">Projets</a>
<a href="./contact.php">Contact</a> <a href="./contact.php">Contact</a>
<a href="./login.php">Connexion</a> <a href="./login.php">Connexion</a>
<!-- Fonctionnalité future changement de thème dark / light et panneau admin --> <!-- Fonctionnalité future changement de thème dark / light et panneau admin -->
-3
View File
@@ -1,3 +0,0 @@
<?php
// Verification de l'utilisateur
+59
View File
@@ -0,0 +1,59 @@
<?php
// Verification de l'utilisateur voir si ces ids sont bon ou pas
// On démarre une session au cas où le script soit exécuté directement par URL
session_start();
// Ajout de connexion a la bdd
require_once('./../database/databaseConnection.php');
// La requête doit être un POST sinon on l'a refuse
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: ./../pages/login.php');
exit;
}
// On récupère les champs envoyé par le post et on les nettoie
$username = trim($_POST['id'] ?? '');
$password = trim($_POST['passwd'] ?? '');
// Si les champs sont vides on renvoie vers Login.php : Prévoir dans le futur une erreur
if (empty($username) || empty($password)) {
header('Location: ./../pages/login.php');
exit;
}
// On regarde si l'utilisateur est dans la base de donnée sinon ça ne sert a rien de traiter
try {
$stmt = $dbh->prepare('SELECT id, username, password, role FROM users WHERE username = :username LIMIT 1');
$stmt->execute([':username' => $username]);
$user = $stmt->fetch();
} catch (PDOException $e) {
error_log('Erreur sql dans la requête : ' . $e->getMessage());
header('Location: ./../pages/login.php');
exit;
}
// On regarde si le mdp correspond à celui en bdd
if (!$user || $user['password'] !== $password) {
header('Location: ./../pages/login.php');
exit;
}
// Si la connexion est ok, on entregistre l'utilisateur dans $_SESSION
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['role'] = $user['role'];
// Date de connexion mise à jour
try {
$stmt = $dbh->prepare('UPDATE users SET last_login = NOW() WHERE id = :id');
$stmt->execute([':id' => $user['id']]);
} catch (PDOException $e) {
error_log('Le serveur WEB ne peut pas modifier la date de dernière connexion : ' . $e->getMessage());
}
//Redirection vers home.php puisque que l'utilisateur est forcément connecté
header('Location: ./../pages/home.php');
+3 -1
View File
@@ -5,7 +5,9 @@
// Note : Pour lancer un serveur local PHP Depuis VsCode : 'php -v' pour vérifier que php est bien installé et 'php -S localhost:8000' pour lancer le serveur // Note : Pour lancer un serveur local PHP Depuis VsCode : 'php -v' pour vérifier que php est bien installé et 'php -S localhost:8000' pour lancer le serveur
// Le header n'y étant pas je rajoute ici un démarrage de session
session_start();
// Redirection de l'utilisateur vers une page Home lorsqu'il arrive sur index.php // Redirection de l'utilisateur vers une page Home lorsqu'il arrive sur index.php
header('location: ./pages/home.php'); header('location: ./pages/home.php');
?> ?>
+1 -1
View File
@@ -16,7 +16,7 @@ require_once('./../elements/header.php');
<div class="login-card"> <div class="login-card">
<!-- Formulaire de connexion --> <!-- Formulaire de connexion -->
<form method="GET" action="../fonctions/checkLogin.php"> <form method="POST" action="../functions/checkLogin.php">
<p>Connexion</p> <p>Connexion</p>
+11
View File
@@ -0,0 +1,11 @@
<?php
// Page affichant les différents projets personnels / scolaires / professionnels
// On pourrait également rajouter des tags comme "En cours" ou même "En reflexion"...
// On ajoute le header
require_once('../elements/header.php');
// Dans le principe il me faudrait des cases avec des images carrousel du projet un titre et une description
// Si l'utilisateur est admin, il pourra créer de nouveaux projets