commit 20df067b19ed7a3dd67fb1c1de040a675685638f Author: yanishimidi Date: Sun Nov 2 19:53:50 2025 +0100 Refonte complète du projet diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..f01141c Binary files /dev/null and b/.DS_Store differ diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..00e4862 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +DB_HOST=localhost +DB_NAME=cms_simplifie +DB_USER=root +DB_PASS=root diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a484fe --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.env +/vendor/ +/node_modules/ +*.log +*.sql 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/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..30cd3a3 --- /dev/null +++ b/includes/header.php @@ -0,0 +1,17 @@ + + + + + CMS + + + +
+

Mini CMS

+ +
+
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..96fa44d --- /dev/null +++ b/public/article.php @@ -0,0 +1,29 @@ +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/delete.php b/public/delete.php new file mode 100644 index 0000000..255bbad --- /dev/null +++ b/public/delete.php @@ -0,0 +1,45 @@ +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') { + $stmt = $pdo->prepare("DELETE FROM articles WHERE id = ?"); + $stmt->execute([$id]); + echo "

Article supprimé avec succès.

"; + echo 'Retour au tableau de bord'; + require_once '../includes/footer.php'; + exit; +} +?> + +

Supprimer l'article

+

Êtes-vous sûr de vouloir supprimer l'article "" ?

+
+ + Annuler +
+ + 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/index.php b/public/index.php new file mode 100644 index 0000000..dcd6b9b --- /dev/null +++ b/public/index.php @@ -0,0 +1,18 @@ +query("SELECT id, titre, SUBSTRING(contenu,1,150) AS extrait, date_creation + FROM articles ORDER BY date_creation DESC LIMIT 10"); +?> +

Derniers articles

+fetch()): ?> +
+

+

...

+ Publié le +
+
+ + + 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..7649023 --- /dev/null +++ b/public/logout.php @@ -0,0 +1,5 @@ +