commit 1a5e01566382f7541d0bfad5aeff894ccf9770ef Author: yanishimidi Date: Sun Nov 2 22:39:12 2025 +0100 Nouvelle version complète (remplacement total) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..fae641e Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba4f2e9 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ + CMS Simplifié + + Présentation + +Ce mini-projet a été réalisé dans le cadre du module Développement Web (BTS CIEL – 2ᵉ année). +Il s'agit d'un mini système de gestion de contenu** qui permet de gérer des articles de manière simple. + +Le site est organisé en deux parties : +- Zone publique*: les visiteurs peuvent consulter les articles sans se connecter. +- Zone administration: un administrateur peut se connecter pour ajouter, modifier ou supprimer des articles. + +L’objectif principal est de pratiquer le développement web dynamique avec PHP pur et MySQL, en mettant en œuvre toutes les étapes du cycle CRUD (Create, Read, Update, Delete), la gestion des sessions et la sécurisation des données. diff --git a/dump.sql b/dump.sql new file mode 100644 index 0000000..b476a87 --- /dev/null +++ b/dump.sql @@ -0,0 +1,23 @@ +CREATE DATABASE IF NOT EXISTS cms_simplifie CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +USE cms_simplifie; + +CREATE TABLE IF NOT EXISTS utilisateur ( + id INT AUTO_INCREMENT PRIMARY KEY, + login VARCHAR(50) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL +); + +INSERT INTO utilisateur (login, password) VALUES +('admin', '$2y$10$kD5oX7ZbC0mC6h/0qTz7ue1v5HPxqj8k3y3m5ZtQ7lY9UeH8tFjQG'); + +CREATE TABLE IF NOT EXISTS articles ( + id INT AUTO_INCREMENT PRIMARY KEY, + titre VARCHAR(255) NOT NULL, + contenu TEXT NOT NULL, + date_creation DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +INSERT INTO articles (titre, contenu) VALUES +('Premier article', 'Ceci est le contenu du premier article de test.'), +('Deuxième article', 'Contenu du deuxième article pour tester le CMS.'), +('Troisième article', 'Encore un exemple d’article pour remplir la base.'); diff --git a/includes/.DS_Store b/includes/.DS_Store new file mode 100644 index 0000000..6df7713 Binary files /dev/null and b/includes/.DS_Store differ diff --git a/includes/db.php b/includes/db.php new file mode 100644 index 0000000..08404a4 --- /dev/null +++ b/includes/db.php @@ -0,0 +1,18 @@ + PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, +]; + +try { + $pdo = new PDO($dsn, $user, $pass, $options); +} catch (\PDOException $e) { + die("Erreur de connexion : " . $e->getMessage()); +} diff --git a/includes/footer.php b/includes/footer.php new file mode 100644 index 0000000..a002e0b --- /dev/null +++ b/includes/footer.php @@ -0,0 +1,6 @@ + + + + diff --git a/includes/header.php b/includes/header.php new file mode 100644 index 0000000..b73249e --- /dev/null +++ b/includes/header.php @@ -0,0 +1,17 @@ + + + + + Mini CMS + + + +
+

Mini CMS

+ +
+
diff --git a/public/.DS_Store b/public/.DS_Store new file mode 100644 index 0000000..93df429 Binary files /dev/null and b/public/.DS_Store differ diff --git a/public/add.php b/public/add.php new file mode 100644 index 0000000..51d0b63 --- /dev/null +++ b/public/add.php @@ -0,0 +1,34 @@ +prepare("INSERT INTO articles (titre, contenu, date_creation) VALUES (?, ?, NOW())"); + $stmt->execute([$titre, $contenu]); + echo "

Article ajouté avec succès.

"; + } else { + echo "

Veuillez remplir tous les champs.

"; + } +} +?> + +

Ajouter un article

+
+
+

+
+

+ +
+ + diff --git a/public/admin.php b/public/admin.php new file mode 100644 index 0000000..0c2dca5 --- /dev/null +++ b/public/admin.php @@ -0,0 +1,22 @@ + + +

Tableau de bord

+

Bienvenue, !

+ + + + diff --git a/public/article.php b/public/article.php new file mode 100644 index 0000000..4e86105 --- /dev/null +++ b/public/article.php @@ -0,0 +1,30 @@ +Article introuvable (404)

"; + require_once '../includes/footer.php'; + exit; +} + +$stmt = $pdo->prepare("SELECT * FROM articles WHERE id = ?"); +$stmt->execute([$id]); +$article = $stmt->fetch(); + +if (!$article) { + echo "

Article introuvable (404)

"; + require_once '../includes/footer.php'; + exit; +} +?> +
+

+

+ Publié le +
+ + + diff --git a/public/edit.php b/public/edit.php new file mode 100644 index 0000000..6901385 --- /dev/null +++ b/public/edit.php @@ -0,0 +1,50 @@ +Article introuvable (404)

"; + require_once '../includes/footer.php'; + exit; +} + +$stmt = $pdo->prepare("SELECT * FROM articles WHERE id = ?"); +$stmt->execute([$id]); +$article = $stmt->fetch(); + +if (!$article) { + echo "

Article introuvable (404)

"; + require_once '../includes/footer.php'; + exit; +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $titre = $_POST['titre'] ?? ''; + $contenu = $_POST['contenu'] ?? ''; + if ($titre && $contenu) { + $stmt = $pdo->prepare("UPDATE articles SET titre=?, contenu=? WHERE id=?"); + $stmt->execute([$titre, $contenu, $id]); + echo "

Article mis à jour avec succès.

"; + } else { + echo "

Veuillez remplir tous les champs.

"; + } +} +?> + +

Modifier l'article

+
+
+

+
+

+ +
+ + diff --git a/public/login.php b/public/login.php new file mode 100644 index 0000000..95567c1 --- /dev/null +++ b/public/login.php @@ -0,0 +1,34 @@ +prepare("SELECT * FROM utilisateur WHERE login = ?"); + $stmt->execute([$login]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + $_SESSION['user'] = $user['login']; + header("Location: admin.php"); + exit; + } else { + $error = "Identifiants incorrects"; + } +} +?> + +

Connexion administrateur

+$error

"; ?> +
+
+

+
+

+ +
+ + diff --git a/public/logout.php b/public/logout.php new file mode 100644 index 0000000..cbba24c --- /dev/null +++ b/public/logout.php @@ -0,0 +1,7 @@ +