ajout projet cms elyes
This commit is contained in:
11
cms_simplifie/inc/config.php
Normal file
11
cms_simplifie/inc/config.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
$env = fn($k, $d=null) => getenv($k) !== false ? getenv($k) : $d;
|
||||
define('DB_HOST', $env('DB_HOST', 'localhost'));
|
||||
define('DB_NAME', $env('DB_NAME', 'cms_simplifie'));
|
||||
define('DB_USER', $env('DB_USER', 'root'));
|
||||
define('DB_PASS', $env('DB_PASS', ''));
|
||||
|
||||
define('BASE_URL', '');
|
||||
define('APP_NAME', 'CMS Simplifié');
|
||||
date_default_timezone_set('Europe/Paris');
|
||||
|
||||
12
cms_simplifie/inc/db.php
Normal file
12
cms_simplifie/inc/db.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/config.php';
|
||||
try {
|
||||
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [
|
||||
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC
|
||||
]);
|
||||
} catch(PDOException $e) {
|
||||
http_response_code(500);
|
||||
echo "<h1>Erreur DB</h1><p>".htmlspecialchars($e->getMessage())."</p>";
|
||||
exit;
|
||||
}
|
||||
9
cms_simplifie/inc/footer.php
Normal file
9
cms_simplifie/inc/footer.php
Normal file
@@ -0,0 +1,9 @@
|
||||
</main>
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<p>© <?= date('Y') ?> <?= e(APP_NAME) ?> — <a href="https://www.basilis-digitale.com" target="_blank" rel="noopener noreferrer">
|
||||
Développé par Elyes Atoui</a></p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
45
cms_simplifie/inc/functions.php
Normal file
45
cms_simplifie/inc/functions.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
// Démarre la session si elle n'est pas déjà active
|
||||
if (session_status() === PHP_SESSION_NONE) { session_start(); }
|
||||
|
||||
// Vrai si un utilisateur est connecté
|
||||
function is_logged_in(): bool { return !empty($_SESSION['user_id']); }
|
||||
|
||||
// Renvoie l'ID de l'utilisateur connecté (ou null)
|
||||
function current_user_id(): ?int { return $_SESSION['user_id'] ?? null; }
|
||||
|
||||
// Renvoie le login/pseudo de l'utilisateur (ou null)
|
||||
function current_user_login(): ?string { return $_SESSION['login'] ?? null; }
|
||||
|
||||
// Renvoie le rôle courant (par défaut 'user')
|
||||
function current_user_role(): string { return $_SESSION['role'] ?? 'user'; }
|
||||
|
||||
// Vrai si l'utilisateur courant est admin
|
||||
function is_admin(): bool { return current_user_role() === 'admin'; }
|
||||
|
||||
// Protège une page : redirige vers /admin/login.php si non connecté
|
||||
function require_login(): void { if (!is_logged_in()) { header('Location: /admin/login.php'); exit; } }
|
||||
|
||||
// Échappe le HTML pour éviter les attaque xss
|
||||
function e(?string $s): string { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
|
||||
|
||||
// Retourne un extrait limité à 150 caractères
|
||||
function excerpt(string $c, int $l=150): string { $c=strip_tags($c); return mb_strlen($c)<= $l? $c: mb_substr($c,0,$l).'…'; }
|
||||
|
||||
// Génère/récupère le jeton CSRF stocké en session
|
||||
function csrf_token(): string { if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token']=bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; }
|
||||
|
||||
// Champ caché à insérer dans les formulaires avec le jeton CSRF
|
||||
function csrf_input(): string { return '<input type="hidden" name="csrf" value="'.e(csrf_token()).'">'; }
|
||||
|
||||
// Vérifie le jeton CSRF sur les requêtes POST, sinon bloque avec 400
|
||||
function verify_csrf(): void {
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$t = $_POST['csrf'] ?? '';
|
||||
if (!$t || !hash_equals($_SESSION['csrf_token'] ?? '', $t)) {
|
||||
http_response_code(400);
|
||||
echo "<h1>Requête invalide</h1><p>Jeton CSRF manquant ou invalide.</p>";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
28
cms_simplifie/inc/header.php
Normal file
28
cms_simplifie/inc/header.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/functions.php';
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title><?= e(APP_NAME) ?></title>
|
||||
<link rel="stylesheet" href="/assets/css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container">
|
||||
<h1 class="logo"><a href="/public/index.php"><?= e(APP_NAME) ?></a></h1>
|
||||
<nav>
|
||||
<a href="/public/index.php">Accueil</a>
|
||||
<?php if (is_logged_in()): ?>
|
||||
<a href="/admin/dashboard.php">Mon espace</a>
|
||||
<a href="/admin/logout.php">Déconnexion (<?= e(current_user_login()) ?>)</a>
|
||||
<?php else: ?>
|
||||
<a href="/admin/login.php">Connexion</a>
|
||||
<a href="/admin/register.php">Inscription</a>
|
||||
<?php endif; ?>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main class="container">
|
||||
Reference in New Issue
Block a user