# 📰 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 d’images (compatible S3). Il permet de **crĂ©er, modifier, supprimer et consulter des articles**, avec un espace utilisateur (photo, bio, profil) et un **panneau d’administration 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 d’images 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 d’articles (titre, contenu, image). - Stockage d’images sur **MinIO (bucket `bucketforum`)**. - Affichage sur la page d’accueil avec ordre chronologique. - Mise en page : **Titre → Image → Contenu**. - Affichage des mĂ©tadonnĂ©es (photo de l’auteur, nom, date, lien profil). - Images redimensionnĂ©es proprement, non recadrĂ©es. ### Administration - Tableau de bord admin avec : - nombre total d’articles et d’utilisateurs, - gestion (suppression) des utilisateurs, - suppression et modification d’articles, - bouton “Publier un article” stylisĂ©. - Suppression **en cascade** : lorsqu’un 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 d’articles 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 l’affichage 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.