Database Manager est une application web locale permettant de gérer et de consulter plusieurs bases de données SQLite depuis une interface unique.
L'application est développée en PHP natif procédural, avec une architecture MMVC (Model, View, Controller).
Elle fonctionne sous Linux avec Apache2.
L'objectif est de proposer une interface simple et légère permettant d'importer, de gérer et d'explorer des bases de données SQLite sans modifier leur contenu.
- PHP 8.4+
- SQLite
- PDO SQLite
- HTML5
- CSS3
- JavaScript
- Bootstrap 5
- Apache2
- Importer des bases de données SQLite.
- Ajouter des bases de données existantes.
- Afficher les bases enregistrées.
- Consulter le contenu des bases.
- Explorer les tables et les vues.
- Afficher les données d'une table.
- Filtrer les données selon une colonne.
- Trier et paginer les résultats.
- Supprimer des bases de données.
- Centraliser la gestion des bases depuis une page d'accueil.
L'accueil constitue le point central de l'application.
Il permet de :
- Afficher le nombre total de bases enregistrées.
- Afficher la liste des bases disponibles.
- Afficher le nom de chaque base.
- Accéder à une base en cliquant sur son nom.
- Importer une nouvelle base SQLite.
- Ajouter une base existante.
- Supprimer une base enregistrée.
- Supprimer définitivement une base avec confirmation.
Chaque base dispose d'une page dédiée.
Cette page permet de :
- Afficher le nom de la base sélectionnée.
- Afficher la liste des tables et des vues.
- Sélectionner une table à consulter.
- Accéder aux informations générales de la base.
La consultation permet de sélectionner une table et de choisir le mode d'affichage.
Deux modes sont disponibles :
1. Affichage complet
- Afficher toutes les données d'une table.
- Consulter les résultats sous forme de tableau HTML.
2. Filtrage des données
- Sélectionner une colonne.
- Saisir une valeur à rechercher.
- Afficher les enregistrements correspondant au filtre.
Les résultats disposent également des fonctionnalités suivantes :
- Pagination.
- Tri des colonnes.
- Affichage des données.
- Gestion des résultats vides.
Toutes les opérations de consultation sont effectuées en lecture seule.
- SQLite uniquement.
- Application locale.
- PHP natif procédural, sans classes.
- Architecture MMVC.
- Interface claire (Light UI).
- Consultation des bases en lecture seule.
- Aucun éditeur SQL.
- Aucune modification des données.
- Aucune création ou modification de tables.
- Importation et suppression des fichiers uniquement via les fonctionnalités prévues.
- Stockage des bases dans des répertoires individuels.
- Protection des fichiers internes contre les accès HTTP directs.
DatabaseManager/
│
├── app/
│ ├── controllers/
│ │ ├── HomeController.php
│ │ ├── DatabaseController.php
│ │ └── ImportController.php
│ │
│ ├── models/
│ │ ├── DatabaseModel.php
│ │ └── TableModel.php
│ │
│ └── views/
│ ├── home.php
│ │
│ ├── database/
│ │ ├── index.php
│ │ └── table.php
│ │
│ └── errors/
│ ├── 404.php
│ └── 500.php
│
├── config/
│ ├── .htaccess
│ ├── application.db
│ ├── application.sql
│ ├── config.php
│ └── database.php
│
├── core/
│ ├── .htaccess
│ ├── bootstrap.php
│ ├── helpers.php
│ ├── router.php
│
├── includes/
│ ├── header.php
│ ├── footer.php
│ └── sidebar.php
│
├── public/
│ ├── index.php
│ ├── .htaccess
│ │
│ └── assets/
│ ├── css/
│ │ ├── style.css
│ │ ├── bootstrap.css
│ │ └── database.css
│ │
│ ├── js/
│ │ ├── app.js
│ │ └── database.js
│ │
│ └── images/
│ └── logo.png
│
├── storage/
│ ├── databases/
│ │ ├── ecommerce/
│ │ │ ├── ecommerce.db
│ │ │ └── ecommerce.sql
│ │ │
│ │ ├── blog/
│ │ │ ├── blog.db
│ │ │ └── blog.sql
│ │ │
│ │ └── inventory/
│ │ ├── inventory.db
│ │ └── inventory.sql
│ │
│ ├── uploads/
│ │ └── temporary/
│ │
│ └── logs/
│ ├── error.log
│ └── success.log
│
├── tests/
│ ├── models/
│
└── README.md
| Dossier | Rôle |
|---|---|
| app/controllers | Gestion des requêtes HTTP et coordination des traitements |
| app/models | Accès aux bases SQLite et récupération des données |
| app/views | Interfaces HTML/PHP |
| config | Configuration et base SQLite interne |
| core | Initialisation, routage, fonctions communes et sécurité |
| includes | Éléments d'interface partagés |
| public | Point d'entrée de l'application et ressources publiques |
| storage/databases | Stockage des bases SQLite importées |
| storage/uploads | Stockage temporaire des fichiers importés |
| storage/logs | Journaux de l'application |
| tests/models | Tests des modèles |
Toutes les bases de données gérées par l'application sont stockées dans :
storage/databases/
Chaque base possède son propre répertoire, dont le nom correspond exactement au nom de la base de données.
Chaque répertoire contient obligatoirement deux fichiers :
nom.db: fichier de base de données SQLite utilisé pour la consultation.nom.sql: script SQL correspondant à la base de données.
Le nom du répertoire, le nom du fichier SQLite et le nom du script SQL doivent être identiques. Seule l'extension change.
storage/
└── databases/
│
├── ecommerce/
│ ├── ecommerce.db
│ └── ecommerce.sql
│
├── blog/
│ ├── blog.db
│ └── blog.sql
│
└── inventory/
├── inventory.db
└── inventory.sql
Autre exemple pour une base appelée clients :
storage/databases/clients/
├── clients.db
└── clients.sql
- Chaque base possède son propre répertoire.
- Le répertoire porte le nom de la base.
- Le fichier SQLite porte le même nom que le répertoire, avec l'extension
.db. - Le script SQL porte le même nom que le répertoire, avec l'extension
.sql. - Chaque répertoire contient uniquement les fichiers associés à sa base.
- Les bases sont enregistrées dans la base interne
config/application.db. - Le fichier
.dbconstitue la source de vérité pour la consultation. - Le fichier
.sqlconstitue le script exporté correspondant à la base.
La base config/application.db est réservée au fonctionnement interne de Database Manager.
Elle contient les informations nécessaires à la gestion des bases enregistrées :
- Identifiant de la base.
- Nom de la base.
- Nom du répertoire associé.
- Date d'enregistrement.
Elle ne contient pas les données des bases externes.
Le fichier config/application.sql contient le script SQL permettant de créer la structure de cette base interne.
Lorsqu'une base SQLite est importée :
- Le fichier est réceptionné dans
storage/uploads/temporary/. - Le fichier est validé pour vérifier qu'il s'agit bien d'une base SQLite exploitable.
- Le nom de la base est déterminé et validé.
- Un répertoire portant ce nom est créé dans
storage/databases/. - Le fichier SQLite est placé dans ce répertoire et renommé selon le nom du répertoire.
- Le script SQL correspondant est généré.
- Une référence à la base est enregistrée dans
config/application.db. - Les fichiers temporaires sont supprimés.
Exemple après importation :
storage/databases/
└── ecommerce/
├── ecommerce.db
└── ecommerce.sql
Lorsqu'une base est supprimée définitivement :
- Une confirmation est demandée à l'utilisateur.
- Le répertoire associé est identifié et validé.
- Les fichiers de la base sont supprimés.
- Le répertoire de la base est supprimé.
- La référence correspondante est supprimée de
config/application.db.
La suppression doit être effectuée uniquement dans les répertoires autorisés.
L'application doit respecter les règles suivantes :
- Ouvrir les bases externes en mode SQLite lecture seule.
- Activer
PRAGMA query_only = ON. - Ne jamais effectuer d'opérations de modification sur les bases explorées.
- Vérifier et sécuriser les chemins des fichiers.
- Empêcher les accès hors de
storage/databases/. - Valider les fichiers SQLite importés.
- Vérifier les noms des bases et des répertoires.
- Empêcher l'écrasement accidentel d'une base existante.
- Ne jamais exposer directement les dossiers internes depuis Apache.
- Échapper les données affichées en HTML.
- Utiliser des requêtes préparées lorsque nécessaire.
- Valider les noms de tables et de colonnes avant de les utiliser dans les requêtes.
- Protéger les formulaires d'importation et de suppression contre les attaques CSRF.
- Utiliser
public/comme racine documentaire Apache. - Bloquer les accès HTTP directs aux dossiers
config/,core/etstorage/. - Exécuter l'application localement sur
127.0.0.1.
Le développement sera réalisé progressivement selon les étapes suivantes :
- Initialisation du projet et configuration PHP.
- Mise en place de l'architecture MMVC.
- Configuration d'Apache2 et du point d'entrée.
- Création de la base interne SQLite.
- Développement de la gestion des bases enregistrées.
- Développement de l'importation des bases SQLite.
- Développement de la suppression des bases.
- Développement de la page d'accueil.
- Développement de l'explorateur de bases.
- Développement de la consultation des tables.
- Ajout des filtres, du tri et de la pagination.
- Intégration du design.
- Tests, sécurité et corrections.
- Documentation et finalisation.
L'application sera considérée comme fonctionnelle lorsqu'elle permettra de :
- Importer une base SQLite.
- Ajouter une base existante.
- Créer un répertoire individuel pour chaque base.
- Générer les deux fichiers
.dbet.sqlavec le même nom que leur répertoire. - Enregistrer les références des bases dans la base interne.
- Afficher le nombre de bases enregistrées.
- Lister les bases disponibles.
- Ouvrir une base depuis l'accueil.
- Explorer ses tables et ses vues.
- Consulter les données d'une table.
- Filtrer les données selon une colonne.
- Trier et paginer les résultats.
- Supprimer une base avec confirmation.
- Supprimer correctement le répertoire, ses fichiers et la référence associée.
- Garantir qu'aucune donnée des bases explorées ne puisse être modifiée depuis l'application.
Fin du cahier des charges.