From a6995fbab56900b829687624c39d4c02e1f4b2df Mon Sep 17 00:00:00 2001 From: Freitas_Enzo Date: Sun, 2 Nov 2025 19:42:11 +0100 Subject: [PATCH] first commit --- README.md | 14 ++++++++ admin/add_article.php | 49 +++++++++++++++++++++++++++ admin/dashboard.php | 27 +++++++++++++++ admin/delete_article.php | 61 +++++++++++++++++++++++++++++++++ admin/edit_article.php | 73 ++++++++++++++++++++++++++++++++++++++++ admin/login.php | 47 ++++++++++++++++++++++++++ admin/logout.php | 10 ++++++ assets/css/style.css | 56 ++++++++++++++++++++++++++++++ dump_cms_simplifie.sql | 23 +++++++++++++ includes/db.php | 16 +++++++++ includes/footer.php | 6 ++++ includes/header.php | 16 +++++++++ public/404.php | 13 +++++++ public/article.php | 28 +++++++++++++++ public/index.php | 32 ++++++++++++++++++ 15 files changed, 471 insertions(+) create mode 100644 README.md create mode 100644 admin/add_article.php create mode 100644 admin/dashboard.php create mode 100644 admin/delete_article.php create mode 100644 admin/edit_article.php create mode 100644 admin/login.php create mode 100644 admin/logout.php create mode 100644 assets/css/style.css create mode 100644 dump_cms_simplifie.sql create mode 100644 includes/db.php create mode 100644 includes/footer.php create mode 100644 includes/header.php create mode 100644 public/404.php create mode 100644 public/article.php create mode 100644 public/index.php diff --git a/README.md b/README.md new file mode 100644 index 0000000..5823376 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# CMS Simplifié - Mini-Projet Développement Web + +## 1. Installation + +1. Installer un serveur local (XAMPP, WAMP, MAMP ou autre). +2. Copier le dossier du projet `Visual_DM` dans le répertoire `htdocs` (ou équivalent). +3. Créer la base de données et les tables via le fichier SQL fourni : + - Importer `dump_cms_simplifie.sql` dans phpMyAdmin ou via ligne de commande. +4. Vérifier le fichier `includes/db.php` et adapter les informations de connexion si nécessaire : + ```php + $host = 'localhost'; + $dbname = 'cms_simplifie'; + $user = 'root'; + $password = ''; \ No newline at end of file diff --git a/admin/add_article.php b/admin/add_article.php new file mode 100644 index 0000000..f915a7d --- /dev/null +++ b/admin/add_article.php @@ -0,0 +1,49 @@ +prepare($sql); + $stmt->bindParam(':titre', $titre); + $stmt->bindParam(':contenu', $contenu); + + if ($stmt->execute()) { + $message = "Article ajouté avec succès !"; + } else { + $message = "Erreur lors de l'ajout de l'article."; + } +} + +require '../includes/header.php'; +?> + +
+

Ajouter un article

+ + '.$message.'

'; ?> + +
+
+

+ +
+

+ + +
+
+ + \ No newline at end of file diff --git a/admin/dashboard.php b/admin/dashboard.php new file mode 100644 index 0000000..a4c7e69 --- /dev/null +++ b/admin/dashboard.php @@ -0,0 +1,27 @@ + + +
+

Tableau de bord

+

Bienvenue, !

+ + +
+ + diff --git a/admin/delete_article.php b/admin/delete_article.php new file mode 100644 index 0000000..402f90c --- /dev/null +++ b/admin/delete_article.php @@ -0,0 +1,61 @@ +prepare($sql); + $stmt->bindParam(':id', $id, PDO::PARAM_INT); + $stmt->execute(); + $article = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$article) { + die("Article introuvable."); + } +} + +if (isset($_POST['confirm']) && $_POST['confirm'] === 'Oui') { + $sql = "DELETE FROM articles WHERE id = :id"; + $stmt = $pdo->prepare($sql); + $stmt->bindParam(':id', $id, PDO::PARAM_INT); + + if ($stmt->execute()) { + $message = "Article supprimé avec succès !"; + $article = null; + } else { + $message = "Erreur lors de la suppression."; + } +} + +require '../includes/header.php'; +?> + +
+

Supprimer un article

+ + '.$message.'

'; ?> + + +

Voulez-vous vraiment supprimer l'article : "" ?

+
+ + +
+ +

Aucun article sélectionné ou article déjà supprimé.

+ +
+ + \ No newline at end of file diff --git a/admin/edit_article.php b/admin/edit_article.php new file mode 100644 index 0000000..6d3e424 --- /dev/null +++ b/admin/edit_article.php @@ -0,0 +1,73 @@ +prepare($sql); + $stmt->bindParam(':id', $id, PDO::PARAM_INT); + $stmt->execute(); + $article = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$article) { + die("Article introuvable."); + } +} + +if (isset($_POST['titre']) && isset($_POST['contenu'])) { + $titre = $_POST['titre']; + $contenu = $_POST['contenu']; + + $sql = "UPDATE articles SET titre = :titre, contenu = :contenu WHERE id = :id"; + $stmt = $pdo->prepare($sql); + $stmt->bindParam(':titre', $titre); + $stmt->bindParam(':contenu', $contenu); + $stmt->bindParam(':id', $id, PDO::PARAM_INT); + + if ($stmt->execute()) { + $message = "Article modifié avec succès !"; + $stmt = $pdo->prepare("SELECT * FROM articles WHERE id = :id"); + $stmt->bindParam(':id', $id, PDO::PARAM_INT); + $stmt->execute(); + $article = $stmt->fetch(PDO::FETCH_ASSOC); + } else { + $message = "Erreur lors de la modification."; + } +} + +require '../includes/header.php'; +?> + +
+

Modifier un article

+ + '.$message.'

'; ?> + + +
+
+

+ +
+

+ + +
+ +

Aucun article sélectionné.

+ +
+ + \ No newline at end of file diff --git a/admin/login.php b/admin/login.php new file mode 100644 index 0000000..86214ca --- /dev/null +++ b/admin/login.php @@ -0,0 +1,47 @@ +prepare($sql); + $stmt->bindParam(':login', $login); + $stmt->execute(); + $user = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($user && password_verify($password, $user['password'])) { + $_SESSION['user_id'] = $user['id']; + $_SESSION['user_login'] = $user['login']; + header('Location: dashboard.php'); + exit; + } else { + $error = "Identifiants incorrects."; + } +} +?> + + + + + + Connexion Admin + + + +

Connexion Administration

+ + '.$error.'

'; ?> + +
+
+

+
+

+ +
+ + \ No newline at end of file diff --git a/admin/logout.php b/admin/logout.php new file mode 100644 index 0000000..4cf9bd2 --- /dev/null +++ b/admin/logout.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..1a0751f --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,56 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; +} + +header, footer { + background-color: #333; + color: white; + padding: 15px; + text-align: center; +} + +main { + padding: 20px; +} + +h2 { + color: #333; +} + +article { + background-color: white; + padding: 15px; + margin-bottom: 10px; + border-radius: 5px; +} + +a { + color: #007BFF; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +form input, form textarea, form button { + width: 100%; + padding: 8px; + margin-top: 5px; + margin-bottom: 10px; +} + +button { + background-color: #007BFF; + color: white; + border: none; + cursor: pointer; + border-radius: 3px; +} + +button:hover { + background-color: #0056b3; +} \ No newline at end of file diff --git a/dump_cms_simplifie.sql b/dump_cms_simplifie.sql new file mode 100644 index 0000000..9b92c8f --- /dev/null +++ b/dump_cms_simplifie.sql @@ -0,0 +1,23 @@ +CREATE DATABASE IF NOT EXISTS cms_simplifie; +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$e0NR8I0sXfJ3R6qU5K4J6.u4TbT2H8bX6u5pL1lN3eWz8yFzNfR9O'); + +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 +); + +INSERT INTO articles (titre, contenu, date_creation) +VALUES +('Titre Exemple 1', 'Voici un texte d’introduction pour l’article 1...', NOW()), +('Titre Exemple 2', 'Voici un texte d’introduction pour l’article 2...', NOW()); \ No newline at end of file diff --git a/includes/db.php b/includes/db.php new file mode 100644 index 0000000..4ed2827 --- /dev/null +++ b/includes/db.php @@ -0,0 +1,16 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +} catch (PDOException $e) { + die("Erreur de connexion à la base de données : " . $e->getMessage()); +} +?> \ No newline at end of file diff --git a/includes/footer.php b/includes/footer.php new file mode 100644 index 0000000..5d54d7e --- /dev/null +++ b/includes/footer.php @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/includes/header.php b/includes/header.php new file mode 100644 index 0000000..751d27e --- /dev/null +++ b/includes/header.php @@ -0,0 +1,16 @@ + + + + + CMS Simplifié + + + +
+

Mon CMS Simplifié

+ +
+
\ No newline at end of file diff --git a/public/404.php b/public/404.php new file mode 100644 index 0000000..84bb6a2 --- /dev/null +++ b/public/404.php @@ -0,0 +1,13 @@ + + +
+

Erreur 404

+

La page que vous recherchez n’existe pas.

+

Retour à l’accueil

+
+ + \ No newline at end of file diff --git a/public/article.php b/public/article.php new file mode 100644 index 0000000..9c94950 --- /dev/null +++ b/public/article.php @@ -0,0 +1,28 @@ +prepare($sql); + $stmt->bindParam(':id', $id, PDO::PARAM_INT); + $stmt->execute(); + $article = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($article) { + echo "
"; + echo "

" . htmlspecialchars($article['titre']) . "

"; + echo "

Publié le " . htmlspecialchars($article['date_creation']) . "

"; + echo "
" . nl2br(htmlspecialchars($article['contenu'])) . "
"; + echo "
"; + } else { + require '404.php'; + } +} else { + require '404.php'; +} + +require '../includes/footer.php'; +?> diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..3a9991b --- /dev/null +++ b/public/index.php @@ -0,0 +1,32 @@ + + +
+

Derniers articles

+ + prepare($sql); + $stmt->execute(); + $articles = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($articles) { + foreach ($articles as $article) { + echo '
'; + echo '

' . htmlspecialchars($article['titre']) . '

'; + echo '

' . substr(htmlspecialchars($article['contenu']), 0, 100) . '...

'; + echo 'Lire la suite'; + echo '

'; + } + } else { + echo "

Aucun article publié pour le moment.

"; + } + ?> +
+ + \ No newline at end of file