Files
mini-cms/forum-project/README.md
2025-11-01 16:42:38 +01:00

252 lines
6.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📰 Mini CMS — Projet PHP / PDO / MySQL / MinIO / Docker
## Description
Mini CMS est un projet web de type **Forum / CMS simplifié**, développé en **PHP avec PDO**, utilisant **MySQL** pour la base de données et **MinIO** pour le stockage dimages (compatible S3).
Il permet de **créer, modifier, supprimer et consulter des articles**, avec un espace utilisateur (photo, bio, profil) et un **panneau dadministration complet**.
Ce projet respecte les consignes du **TP : Mini-Projet de Développement Web — CMS Simplifié**.
---
## Technologies utilisées
- 🐘 **PHP 8.2** (avec PDO)
- 🗄️ **MySQL 8.1**
- ☁️ **MinIO** (stockage dimages S3)
- 🐳 **Docker & Docker Compose**
- 🎨 **HTML5 / CSS3 / Poppins**
- 🔐 **Sessions / Rôles (admin & auteur)**
- 💾 **AWS SDK for PHP** (pour communiquer avec MinIO)
---
## Fonctionnalités principales
### Utilisateurs
- Inscription et connexion sécurisées (`password_hash()` + `password_verify()`).
- Photo de profil personnalisable (.jpg / .png).
- Bio (description personnelle).
- Suppression ou mise à jour de la photo (photo 👤 par défaut si supprimée).
- Affichage des profils publics avec photo, bio, et liste des articles publiés.
### Articles
- Création, modification et suppression darticles (titre, contenu, image).
- Stockage dimages sur **MinIO (bucket `bucketforum`)**.
- Affichage sur la page daccueil avec ordre chronologique.
- Mise en page : **Titre → Image → Contenu**.
- Affichage des métadonnées (photo de lauteur, nom, date, lien profil).
- Images redimensionnées proprement, non recadrées.
### Administration
- Tableau de bord admin avec :
- nombre total darticles et dutilisateurs,
- gestion (suppression) des utilisateurs,
- suppression et modification darticles,
- bouton “Publier un article” stylisé.
- Suppression **en cascade** : lorsquun utilisateur est supprimé, ses articles le sont aussi.
### Sécurité
- Connexion sécurisée à la base via **PDO**.
- Requêtes préparées pour éviter les injections SQL.
- Hashage des mots de passe.
- Vérification de rôle pour restreindre les accès admin.
- Validation et échappement des champs utilisateurs.
---
## Installation et exécution
### Prérequis
- **Docker** et **Docker Compose** installés.
- Le fichier `.env` déjà configuré dans le dossier `infrastructure`.
### ⚙️ Étapes
#### 1⃣ Cloner le projet
```bash
git clone https://github.com/ton_compte/forum-project.git
cd infrastructure
### Lancer le docker
docker-compose up --build -d
2// Lancer les conteneurs
docker-compose up --build -d
Démarre :
php_app → Apache + PHP
mysql_container → MySQL
minio_container → stockage
4// Vérifier les conteneurs
docker ps
5// Vérifier MySQL
docker exec -it mysql_container mysql -umyuser -pmypassword forum_database
SHOW TABLES;
6// Vérifier MinIO
Accède à http://localhost:9001
Login : minioadmin / Password : minioadmin
Tu dois voir le bucket bucketforum.
7// Accéder au site web
http://localhost:8080
>> Comptes par défaut
Rôle Identifiant Mot de passe
Admin admin ayadmin933
Auteur ayauteur auteur
Auteur aya ayabmk933
Auteur tess ayabmk933
Structure du projet
infrastructure/
├── docker-compose.yml
├── .env
[init-schema.sql
├── init-minio.sh
├── setup-mysql/
│ └── schema.sql
forum-project/
├── index.php
├── article.php
├── add_article.php
├── edit_article.php
├── dashboard.php
├── login.php
├── register.php
├── profile.php
├── profile_view.php
├── config.php
├── header.php
├── footer.php
├── uploads/
│ └── profiles/
└── vendor/
>>Base de données
utilisateurs
Champ Type
id INT AUTO_INCREMENT
username VARCHAR
password VARCHAR
role ENUM('admin','auteur')
profile_picture TEXT
bio TEXT
date_inscription DATETIME
posts
Champ Type
id INT AUTO_INCREMENT
title VARCHAR
content TEXT
image_url TEXT
user_id INT (FK → utilisateurs.id)
date_creation DATETIME
Quand un utilisateur est supprimé, tous ses articles le sont aussi.
>> Configuration MinIO (PHP)
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => 'http://minio:9000',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'minioadmin',
'secret' => 'minioadmin'
]
]);
$bucketName = 'bucketforum';
>> Commandes utiles
Redémarrer le projet
docker-compose down && docker-compose up -d
Ouvrir un terminal PHP
docker exec -it php_app bash
Installer le SDK AWS
docker exec -it php_app composer require aws/aws-sdk-php
Vérifier le bucket MinIO
docker exec -it php_app php -r "require 'vendor/autoload.php'; use Aws\S3\S3Client;
\$s3=new S3Client(['version'=>'latest','region'=>'us-east-1','endpoint'=>'http://minio:9000','use_path_style_endpoint'=>true,'credentials'=>['key'=>'minioadmin','secret'=>'minioadmin']]);
print_r(\$s3->listObjects(['Bucket'=>'bucketforum']));"
>> Design
Couleurs : rose / orange / violet
Police : Poppins
Boutons : dégradés et arrondis
Icônes :
👤 Profil🕒 Date Auteur📰 Article
>< Sécurité
Requêtes PDO préparées
Hash des mots de passe (bcrypt)
Validation stricte des images
Sessions sécurisées
Contrôle des rôles (admin/auteur)
>? Améliorations futures
Chat entre utilisateurs
Recherche darticles
Pagination
Export CSV/PDF
Mode sombre
><> Dépannage rapide
Problème Solution
$pdo non défini Vérifie require_once 'config.php'
Connexion MySQL impossible Vérifie .env
Images non visibles Vérifie $s3Client / bucket
Page blanche Active ini_set('display_errors',1);
Conteneurs ne démarrent pas docker-compose down && up
>> Bonnes pratiques
Toujours valider les champs
Utiliser htmlspecialchars() pour laffichage
Limiter la taille des uploads
Nettoyer les fichiers inutiles du bucket
Sauvegarder régulièrement :
docker exec -it mysql_container mysqldump -umyuser -pmypassword forum_database > backup.sql
>>Projet réalisé dans le cadre du TP — Mini-Projet CMS Simplifié<<
Architecture claire (PHP + PDO),
CRUD complet, gestion de rôles, design moderne et cohérent.