================================================================ SABOU CASH — ORGANISATION DES FICHIERS ET DOSSIERS ================================================================ Date : 2026-10-05 Projet : Boutique en ligne de savons au Sénégal Domaine : saboucash.com Hébergement : cPanel (siti7690) ================================================================ ## 📁 ARBORESCENCE COMPLÈTE public_html/ │ ├── .htaccess # Config Apache (sécurité, redirections) ├── robots.txt # Instructions robots ├── favicon.ico # Icône du site │ ├── index.php # 🏠 Page d'accueil boutique ├── catalogue.php # 📦 Liste des produits + filtres ├── produit.php # 🔍 Fiche produit détaillée ├── panier.php # 🛒 Panier d'achat ├── commande.php # 💳 Tunnel de commande ├── confirmation.php # ✅ Confirmation de commande │ ├── login.php # 🔐 Connexion client ├── register.php # 📝 Inscription client ├── logout.php # 🚪 Déconnexion ├── mon-compte.php # 👤 Espace client ├── mes-commandes.php # 📋 Historique commandes client ├── mes-adresses.php # 🏠 Gestion adresses livraison ├── mes-infos.php # ⚙️ Modification profil │ ├── contact.php # 📞 Page contact ├── cgv.php # 📜 Conditions Générales de Vente ├── mentions-legales.php # ⚖️ Mentions légales ├── politique-confidentialite.php # 🔒 Politique de confidentialité ├── a-propos.php # ℹ️ À propos de Sabou Cash │ ├── devis-pro.php # 💼 Demande de devis (B2B) │ ├── maintenance.php # 🚧 Page de maintenance │ ├── config/ │ ├── db.php # ⭐ Config BDD + helpers │ ├── constants.php # Constantes globales │ └── config.php # Config générale (emails, etc.) │ ├── includes/ │ ├── header.php # En-tête HTML commun │ ├── footer.php # Pied de page commun │ ├── nav.php # Navigation (menu) │ ├── alerts.php # Système de messages flash │ ├── product-card.php # Template carte produit │ ├── category-card.php # Template carte catégorie │ └── pagination.php # Pagination réutilisable │ ├── actions/ │ ├── ajouter_panier.php # Ajouter au panier │ ├── modifier_panier.php # Modifier quantité │ ├── retirer_panier.php # Retirer du panier │ ├── vider_panier.php # Vider panier │ ├── valider_commande.php # Créer commande │ ├── payer_paytech.php # Initier paiement PayTech │ ├── paytech_ipn.php # ⭐ IPN PayTech (notification) │ ├── inscription_action.php # Traitement inscription │ ├── connexion_action.php # Traitement connexion │ ├── maj_profil_action.php # Mise à jour profil │ ├── ajouter_adresse_action.php # Ajouter adresse │ ├── supprimer_adresse_action.php # Supprimer adresse │ ├── demande_devis_action.php # Créer devis B2B │ └── contact_action.php # Envoi message contact │ ├── admin/ │ ├── _auth.php # Vérification admin connecté │ ├── _header.php # Header admin │ ├── _footer.php # Footer admin │ ├── _sidebar.php # Menu latéral admin │ │ │ ├── login.php # Connexion admin │ ├── logout.php # Déconnexion admin │ ├── index.php # 📊 Dashboard admin │ │ │ ├── produits.php # Liste produits │ ├── produit-edit.php # Créer/modifier produit │ ├── produit-delete.php # Supprimer produit │ ├── produit-images.php # Gestion images produit │ │ │ ├── categories.php # CRUD catégories │ ├── marques.php # CRUD marques │ │ │ ├── commandes.php # Liste commandes │ ├── commande-detail.php # Détail commande │ ├── commande-statut.php # Changer statut commande │ │ │ ├── clients.php # Liste clients │ ├── client-detail.php # Détail client │ ├── client-valider-pro.php # Valider compte pro │ │ │ ├── devis.php # Liste devis B2B │ ├── devis-detail.php # Traitement devis │ │ │ ├── tarifs-pro.php # Gestion tarifs B2B │ ├── parametres.php # Paramètres boutique │ └── upload-image.php # Upload images (helper) │ ├── assets/ │ ├── css/ │ │ ├── style.css # CSS principal │ │ ├── admin.css # CSS back-office │ │ └── responsive.css # Media queries │ │ │ ├── js/ │ │ ├── main.js # JS principal │ │ ├── panier.js # AJAX panier │ │ ├── admin.js # JS back-office │ │ └── search.js # Recherche live │ │ │ ├── img/ │ │ ├── logo.svg # Logo Sabou Cash │ │ ├── logo-white.svg # Logo version blanche │ │ ├── hero.jpg # Image hero accueil │ │ ├── placeholder.png # Image par défaut │ │ ├── icons/ # Icônes SVG │ │ └── payment/ # Logos paiement (Wave, OM, etc.) │ │ │ └── fonts/ # Polices custom (optionnel) │ ├── uploads/ │ ├── products/ # Images produits │ │ ├── 2026/ │ │ │ ├── 01/ │ │ │ ├── 02/ │ │ │ └── ... │ │ └── .htaccess # Sécurité (pas d'exécution PHP) │ │ │ ├── categories/ # Images catégories │ ├── brands/ # Logos marques │ └── users/ # Avatars utilisateurs │ ├── logs/ # (à créer, hors public_html si possible) │ ├── errors.log │ ├── payments.log │ └── admin-actions.log │ └── vendor/ # (optionnel, si Composer plus tard) └── ... ================================================================ ## 📋 DESCRIPTION DES DOSSIERS ### 🔧 config/ **Rôle** : Configuration centrale du site **Fichiers** : - `db.php` : connexion BDD + TOUS les helpers (db_one, db_all, db_exec, e, money, csrf, auth, etc.) - `constants.php` : constantes globales (SITE_NAME, SITE_URL, etc.) - `config.php` : configuration additionnelle (emails, SEO, etc.) **Règle** : le dossier `config/` **ne doit JAMAIS être accessible** en direct (`.htaccess`). ### 🎨 includes/ **Rôle** : Fragments PHP réutilisables (partials) **Fichiers** : - `header.php` : début HTML jusqu'à `
` + navigation - `footer.php` : fin HTML + scripts - `nav.php` : barre de navigation (peut être dans header.php) - `alerts.php` : messages flash (succès/erreur) - `product-card.php` : carte produit réutilisable - `category-card.php` : carte catégorie réutilisable - `pagination.php` : pagination réutilisable **Règle** : ces fichiers sont inclus avec `require __DIR__ . '/includes/xxx.php'`. ### ⚡ actions/ **Rôle** : Traitement des formulaires (POST uniquement) **Fichiers** : - Chaque formulaire POST a son fichier `_action.php` - Toujours `require config/db.php` - Toujours vérifier CSRF - Toujours rediriger après traitement - Jamais d'affichage HTML (sauf JSON si AJAX) **Règle** : ces fichiers ne doivent **jamais être accessibles en GET**. ### 👤 admin/ **Rôle** : Back-office (réservé admins) **Sécurité** : - `_auth.php` inclus en haut de CHAQUE fichier admin - Vérifie `$_SESSION['admin_id']` - Redirige vers `login.php` si non connecté **Fichiers** : - `_auth.php` : protection - `_header.php`, `_footer.php`, `_sidebar.php` : layout admin - `index.php` : dashboard - Fichiers CRUD pour chaque entité ### 🎨 assets/ **Rôle** : Ressources statiques (CSS, JS, images, fonts) **Structure** : - `css/` : feuilles de style - `js/` : scripts - `img/` : images du site (logo, hero, etc.) - `fonts/` : polices custom **Règle** : `assets/` est **public** (accessible en direct). ### 📤 uploads/ **Rôle** : Fichiers uploadés par les utilisateurs/admins **Structure** : - `products/` : images produits (organisées par année/mois) - `categories/` : images catégories - `brands/` : logos marques - `users/` : avatars utilisateurs **Sécurité** : - `.htaccess` interdit l'exécution PHP - Vérifier le type MIME avant upload - Renommer les fichiers (pas de caractères spéciaux) ### 📝 logs/ **Rôle** : Journaux d'erreurs et d'actions **Fichiers** : - `errors.log` : erreurs PHP - `payments.log` : transactions PayTech - `admin-actions.log` : actions admin (audit) **Règle** : si possible, ce dossier doit être **hors de `public_html/`**. ================================================================ ## 🔐 SÉCURITÉ — .htaccess RACINE ```apache # ============================================================ # .htaccess — Sabou Cash # ============================================================ # --- Sécurité : bloquer l'accès aux fichiers sensibles Require all denied # --- Bloquer l'accès direct aux dossiers sensibles RedirectMatch 403 ^/config/.*$ RedirectMatch 403 ^/includes/.*$ RedirectMatch 403 ^/logs/.*$ # --- Rediriger vers HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # --- URLs propres (optionnel) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^produit/([a-z0-9-]+)/?$ produit.php?slug=$1 [L,QSA] RewriteRule ^categorie/([a-z0-9-]+)/?$ catalogue.php?categorie=$1 [L,QSA] # --- Cache navigateur (optionnel) ExpiresActive On ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week"