Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e13b7dacb5 | ||
|
|
065034b186 | ||
|
|
a0fa7ddcb4 | ||
|
|
873adaddaa | ||
|
|
e67fe24f6a | ||
|
|
6dc6fa3204 |
141
README.md
141
README.md
@@ -1,101 +1,128 @@
|
||||
# Mini-Projet de Développement Web – CMS Simplifié
|
||||
# README – CMS Simplifié
|
||||
|
||||
## Présentation du projet
|
||||
Ce mini-projet a été réalisé dans le cadre du module **Développement Web** (BTS CIEL – 2ᵉ année).
|
||||
## Présentation
|
||||
Ce mini-projet a été réalisé dans le cadre du module **Développement Web (BTS CIEL – 2ᵉ année)**.
|
||||
|
||||
L’objectif était de créer un **mini CMS** (Content Management System) simplifié permettant :
|
||||
- la **connexion sécurisée** d’un administrateur ;
|
||||
- la **création**, **modification** et **suppression** d’articles (CRUD) ;
|
||||
- l’affichage des données stockées en base **MySQL**.
|
||||
|
||||
Le projet est réalisé **sans framework**, uniquement avec les langages vus en cours :
|
||||
**HTML, CSS, Bootstrap, PHP (PDO), et SQL**.
|
||||
L’objectif est de créer un petit site de **gestion d’articles (mini CMS)**.
|
||||
Un administrateur peut se connecter, ajouter, modifier ou supprimer des articles.
|
||||
Les données sont stockées dans une base **MySQL**.
|
||||
|
||||
---
|
||||
|
||||
## Technologies utilisées
|
||||
|
||||
| Technologie | Utilisation |
|
||||
|--------------|--------------|
|
||||
| **HTML5** | Structure des pages |
|
||||
| **CSS3 / Bootstrap 5** | Mise en forme et design responsive (thème noir & or) |
|
||||
| **PHP (Sessions, PDO)** | Connexion, sécurité et interaction avec MySQL |
|
||||
| **MySQL** | Base de données pour les utilisateurs et articles |
|
||||
| **Docker** | Conteneurs PHP/Apache et MySQL |
|
||||
| **Git / Gitea** | Gestion de version et hébergement du projet |
|
||||
|--------------|-------------|
|
||||
| **HTML** | Structure des pages |
|
||||
| **CSS / Bootstrap 5** | Mise en forme et design (thème noir et or) |
|
||||
| **PHP (PDO)** | Connexion à la base de données et gestion des pages dynamiques |
|
||||
| **MySQL** | Stockage des utilisateurs et des articles |
|
||||
| **Git / Gitea** | Sauvegarde du projet |
|
||||
|
||||
---
|
||||
|
||||
## Structure du projet
|
||||
|
||||
cms-simplifie/
|
||||
│
|
||||
├── public/
|
||||
│ ├── assets/
|
||||
│ │ └── style.css → Design global (thème noir & or)
|
||||
│ ├── add.php → Page d’ajout d’un article
|
||||
│ ├── edit.php → Page de modification d’un article
|
||||
│ ├── delete.php → Page de suppression d’un article
|
||||
│ ├── admin.php → Tableau de bord (gestion des articles)
|
||||
│ ├── login.php → Page de connexion administrateur
|
||||
│ ├── logout.php → Déconnexion
|
||||
│ ├── article.php → Lecture d’un article
|
||||
│ └── index.php → Accueil (affichage des articles)
|
||||
│ │ └── style.css
|
||||
│ ├── add.php
|
||||
│ ├── edit.php
|
||||
│ ├── delete.php
|
||||
│ ├── admin.php
|
||||
│ ├── login.php
|
||||
│ ├── logout.php
|
||||
│ ├── article.php
|
||||
│ └── index.php
|
||||
│
|
||||
├── inc/
|
||||
│ └── db.php → Connexion PDO sécurisée à MySQL
|
||||
│ └── db.php
|
||||
│
|
||||
├── scripts/ → (optionnel, outils ou scripts SQL)
|
||||
│
|
||||
├── .env.example → Exemple de configuration (sans mot de passe)
|
||||
├── .gitignore → Exclut .env et fichiers sensibles
|
||||
├── stack.bibli.yaml / Dockerfile → Configuration Docker
|
||||
└── README.md → Ce fichier
|
||||
|
||||
├── cms_simplifie.sql ← Base de données exportée
|
||||
├── .env.example ← Exemple de configuration
|
||||
├── .gitignore ← Exclut les fichiers sensibles (.env)
|
||||
└── README.md
|
||||
|
||||
---
|
||||
|
||||
## Fonctionnalités principales
|
||||
- Connexion d’un utilisateur (admin) avec vérification du mot de passe haché.
|
||||
- Gestion complète des articles (**CRUD**) : créer, lire, modifier, supprimer.
|
||||
- Interface d’administration simple et claire.
|
||||
- Design **noir & or** pour une ambiance moderne et élégante.
|
||||
- Sécurisation via **sessions PHP** et **requêtes préparées PDO**.
|
||||
- Aucune donnée sensible visible dans le code source.
|
||||
|
||||
- Connexion de l’administrateur avec un **mot de passe haché**
|
||||
- **Ajout, modification et suppression** d’articles
|
||||
- **Affichage** des articles sur la page d’accueil
|
||||
- Thème sombre avec couleurs **noir et or**
|
||||
- **Aucune donnée sensible** visible sur Gitea
|
||||
|
||||
---
|
||||
|
||||
## Sécurité
|
||||
- Les identifiants MySQL sont stockés dans **`.env`**, jamais dans le code.
|
||||
- Le fichier `.gitignore` empêche toute fuite de `.env`.
|
||||
- Les mots de passe sont **hachés** avec `password_hash()` et vérifiés avec `password_verify()`.
|
||||
- Connexion à la base via **PDO** pour éviter les injections SQL.
|
||||
|
||||
- Les identifiants MySQL sont stockés dans un fichier **.env** *(non visible sur Gitea)*
|
||||
- Connexion sécurisée avec **PDO** et **requêtes préparées**
|
||||
- Mots de passe stockés avec `password_hash()` et vérifiés avec `password_verify()`
|
||||
- Le fichier **.gitignore** empêche d’envoyer le fichier `.env` sur Gitea
|
||||
|
||||
---
|
||||
|
||||
## Lancer le projet en local
|
||||
## Exécution du projet en local
|
||||
|
||||
### Étapes :
|
||||
Étape 1 — Ouvrir le dossier du projet
|
||||
|
||||
1️⃣ Démarrer les conteneurs Docker :
|
||||
Télécharger ou cloner le projet depuis Gitea :
|
||||
```bash
|
||||
git clone https://gitea.lasallesaintdenis.com/safouane.bazzi/cms-simplifie.git
|
||||
|
||||
docker stack deploy -c stack.bibli.yaml cms
|
||||
Puis ouvrir le dossier cms-simplifie dans VS Code ou un autre éditeur.
|
||||
|
||||
Étape 2 — Préparer le fichier .env
|
||||
|
||||
2️⃣ Copier le fichier .env.example pour créer ton .env personnel :
|
||||
Copier le fichier .env.example
|
||||
|
||||
cp .env.example .env
|
||||
Le coller à la racine du projet
|
||||
|
||||
Le renommer en .env
|
||||
|
||||
3️⃣ Modifier le fichier .env pour y mettre tes identifiants MySQL :
|
||||
Modifier les informations selon la configuration MySQL locale :
|
||||
|
||||
DB_HOST=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_NAME=cms_simplifie
|
||||
DB_USER=root
|
||||
DB_PASS=tonmotdepasse
|
||||
DB_PASS=ton_mot_de_passe
|
||||
|
||||
Étape 3 — Créer la base de données MySQL
|
||||
|
||||
Ouvrir DBeaver (ou phpMyAdmin)
|
||||
|
||||
Créer une nouvelle base de données appelée cms_simplifie
|
||||
|
||||
Importer le fichier cms_simplifie.sql (fourni avec le projet)
|
||||
|
||||
Ce fichier contient les tables articles et utilisateur, avec des données d’exemple.
|
||||
|
||||
Étape 4 — Lancer le serveur PHP
|
||||
|
||||
Dans le terminal (dans le dossier du projet) :
|
||||
|
||||
php -S localhost:8000 -t public
|
||||
|
||||
|
||||
4️⃣ Accéder au site localement :
|
||||
Si le port 8000 est déjà utilisé :
|
||||
|
||||
php -S localhost:8080 -t public
|
||||
|
||||
Étape 5 — Ouvrir le site dans un navigateur
|
||||
|
||||
Accéder à l’adresse suivante :
|
||||
👉 http://localhost:8000
|
||||
(ou 8080 selon le port choisi)
|
||||
|
||||
5️⃣ Tester la connexion à la base :
|
||||
👉 http://localhost:8000/test-db.php
|
||||
Étape 6 — Connexion à l’administration
|
||||
|
||||
Identifiants de test :
|
||||
|
||||
Login : admin
|
||||
|
||||
Mot de passe : admin123
|
||||
|
||||
Le mot de passe est haché dans la base de données et n’apparaît nulle part dans le code.
|
||||
92
cms_simplifie.sql
Normal file
92
cms_simplifie.sql
Normal file
@@ -0,0 +1,92 @@
|
||||
/*M!999999\- enable the sandbox mode */
|
||||
-- MariaDB dump 10.19 Distrib 10.11.14-MariaDB, for debian-linux-gnu (x86_64)
|
||||
--
|
||||
-- Host: localhost Database: cms_simplifie
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 9.4.0
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `articles`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `articles`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `articles` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`titre` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`contenu` text COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`date_creation` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `articles`
|
||||
--
|
||||
|
||||
LOCK TABLES `articles` WRITE;
|
||||
/*!40000 ALTER TABLE `articles` DISABLE KEYS */;
|
||||
INSERT INTO `articles` VALUES
|
||||
(21,'vvzvzuievzieuvzivi','evezvzvezvzvz','2025-11-03 08:33:06'),
|
||||
(22,'ooeoeoeoeo','eooeoeoeoeo','2025-11-03 08:33:22'),
|
||||
(23,'fefefefef','efefefefe','2025-11-03 08:33:26'),
|
||||
(24,'ff','efefefefe','2025-11-03 08:33:31'),
|
||||
(25,'fefefefe','fefefefeffefe','2025-11-03 08:33:35'),
|
||||
(26,'ieie','ieieieieieiei','2025-11-03 08:33:39'),
|
||||
(27,'eiei','eieieieie','2025-11-03 08:33:42');
|
||||
/*!40000 ALTER TABLE `articles` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `utilisateur`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `utilisateur`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `utilisateur` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`login` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`password` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `login` (`login`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `utilisateur`
|
||||
--
|
||||
|
||||
LOCK TABLES `utilisateur` WRITE;
|
||||
/*!40000 ALTER TABLE `utilisateur` DISABLE KEYS */;
|
||||
INSERT INTO `utilisateur` VALUES
|
||||
(4,'admin','$2y$10$Pt77dtmFJDXj1bzfYkTIXOAjOOGV4ZRGNyPjEIn3YJn53kPPQiXv2');
|
||||
/*!40000 ALTER TABLE `utilisateur` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Dumping routines for database 'cms_simplifie'
|
||||
--
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2025-11-03 11:51:53
|
||||
Reference in New Issue
Block a user