Documentation Technique
Interface d'Administration des Véhicules
Explication Détaillée de l'Outil de Gestion de l'Inventaire (Back-Office)
Commencer la Revue Technique💡 Philosophie et Style de l'Application
Cette interface a été conçue autour de deux piliers fondamentaux : l'**efficacité opérationnelle** et la **sécurité des données**.
Style et Expérience Utilisateur (UX)
- **Style (Bootstrap)** : Utilisation du framework Bootstrap pour garantir un affichage moderne, épuré et surtout **réactif (responsive)**, optimisé pour tout type d'écran.
- **Navigation par Onglets** : Segmentation de la saisie (Général, Technique, Prix, Média) pour éviter les formulaires décourageants et **améliorer la rapidité d'exécution** des tâches.
Sécurité et Intégrité des Données (PDO & Transactions)
- **Sécurité (PDO)** : Toute communication avec la base de données utilise l'interface **PDO (PHP Data Objects)**. C'est la norme moderne qui assure une protection contre les **injections SQL**, la menace la plus courante.
- **Transactions (Intégrité)** : Les opérations complexes (Ajout/Modification) sont enveloppées dans des **Transactions**. Cela signifie que si la base de données échoue à enregistrer une partie des données (ex: les équipements), **elle annule tout** pour éviter d'avoir des fiches incomplètes ("cassées").
1. Page de Création : `add_vehicle.php` (Ajouter un Véhicule)
Le rôle de cette page est de créer une fiche d'inventaire complète, du moteur aux options.
A. Rôle du code PHP (Processus d'Enregistrement)
- **Initialisation** : Connexion à la BDD et récupération de la liste des équipements possibles.
- **Validation** : Vérification des champs obligatoires (Marque, Modèle, Prix, Kilométrage).
- **Upload de Fichier (Nouveau)** :
- Interception du fichier image via `$_FILES`.
- Création d'un **nom de fichier unique** pour éviter les conflits et les risques de sécurité.
- Déplacement du fichier dans le dossier sécurisé du serveur (`img/vente-vehicules/`).
- Stockage du chemin d'accès dans la colonne `image_url`.
- **Transaction et Insertion** : L'opération est exécutée en transaction. Les données principales sont insérées, l'ID est récupéré, puis les liaisons d'équipement sont insérées.
B. Détail de la Section "Média"
| Champ | Type | Rôle |
|---|---|---|
| Image Principale (Fichier) | `input type="file"` | Permet la sélection et l'envoi sécurisé de l'image au serveur. **Avantage :** Plus rapide et plus fiable qu'une URL. |
| URL Vidéo | `input type="url"` | Champ simple pour l'URL, car les vidéos sont généralement hébergées sur des plateformes externes (YouTube, Vimeo). |
2. Page de Mise à Jour : `edit_vehicle.php` (Modifier un Véhicule)
Cette page a un rôle double : elle lit les données existantes avant de permettre leur modification.
A. Rôle du code PHP (Processus de Mise à Jour)
- **Chargement des Données (GET)** : Le script lit l'ID du véhicule dans l'URL. Il exécute ensuite **trois requêtes de lecture** pour pré-remplir le formulaire avec toutes les données existantes.
- **Gestion de l'Image** :
- **Si un nouveau fichier est uploadé** : Il suit la procédure sécurisée et la nouvelle URL est enregistrée.
- **Si aucun nouveau fichier n'est détecté** : L'ancienne `image_url` est simplement conservée. **L'image n'est jamais perdue** si vous modifiez un autre champ.
- **Mise à Jour des Équipements (Propre et Sécurisé)** : L'ancien équipement est entièrement effacé (`DELETE`) de la table de jointure, puis les nouvelles sélections sont insérées (`INSERT`). C'est la méthode la plus fiable pour gérer les listes de cases à cocher.
B. Détail de la Section "Équipements"
La page utilise un simple test `in_array()` pour déterminer si la case doit être cochée (`checked`). **Avantage Client :** Le client a une vision immédiate de l'état actuel et n'a qu'à cocher/décocher les changements.
3. Page de Suppression : `delete_vehicle.php` (Supprimer un Véhicule)
Ce script est un processus en coulisse conçu pour être rapide et garantir la propreté de la base de données (intégrité).
Opération de Nettoyage et Sécurité
| Rôle | Description |
|---|---|
| **Sécurité d'Accès** | Le script s'assure d'abord qu'un ID valide est présent. Il est conçu pour être appelé uniquement via un lien de suppression depuis la page d'inventaire. |
| **Confirmation Humaine** | Avant d'arriver au script PHP, une boîte d'alerte (`onclick="return confirm(...)"`) est exigée, demandant une confirmation humaine pour éviter les suppressions accidentelles. |
| **Intégrité de la BDD (Le point fort)** | La suppression dans la table principale (`vehicles`) déclenche automatiquement une **cascade** : la configuration de la base de données (`ON DELETE CASCADE`) efface instantanément **toutes les options liées** dans la table `vehicle_has_equipment`. |
Bénéfice Client :
Le client n'a pas à se soucier des options résiduelles. Une seule action supprime tout, garantissant que la base de données reste **légère et performante**.