Introduction
Nous sommes passionnés par les trains. Au cours de l’été dernier, nous avons pris un grand nombre de photos de trains. Nous voulions trouver un moyen de répertorier tous les trains que nous croisons et d’indiquer des informations basiques sur chaque train.
Nous appelons « train » tout matériel ferroviaire (locomotives, voitures, automotrice...).
De gauche à droite, une locomotive BB 27300, des voitures de banlieue à deux niveaux (VB2N) et une automotrice Z 50000.
La base de données
La base de données est constituée de deux tables :
- La table Rames contient chaque train que nous avons rencontré, les attributs sont les suivants
- Le nom du train, c’est ce qui permet d’identifier un train de manière unique, par exemple 216 L. Le nom est la clé primaire.
- Son type, c’est-à-dire le modèle de train dont il s’agit, par exemple Z 50000 ou Regio 2N.
- Le nombre de voitures ou wagons dont est composé le train. Pour les locomotives, on considère que le nombre de voiture est nul.
- Le réseau sur lequel circule le train, souvent la grande gare parisianise d’où il part, par exemple Paris Montparnasse ou Paris Nord. Pour les RER A, B et C, on considère que ce sont des réseaux à part.
- Si le train est un train grande ligne, c’est-à-dire si ce n’est pas un RER ou un Transilien.
- Des informations supplémentaires, par exemple si le train est radié (il ne circule plus), a été accidenté ou a une particularité quelconque.
- La table Photos contient chaque photo que nous avons prise, les attributs sont les suivants
- L’URL de la photo, qui est la clé primaire
- Le nom du train sur la photo, qui est la clé étrangère
- La date à laquelle a été prise la photo
- Le lieu
Structure de la base de données
Fonctionnement
Lorsque l’utilisateur arrive sur la 1ere page, il est invité à entrer une partie ou le nom complet d’un train ou d’un type de train présent dans la base de données. Par exemple, il peut taper « 69 R » pour obtenir la fiche du train 69 R. Mais il peut également taper « 6 » pour obtenir les fiches de tous les trains présents dans la base de données contenant un 6 dans leur nom. L’utilisateur peut également effectuer une recherche rapide avec les boutons situés sous la barre de recherche.
Une fois que l’utilisateur soumet le formulaire, le serveur vérifie dans un premier temps s’il est possible d’accéder à la base de données, si ce n’est pas le cas, une erreur 503 et un message d’erreur sont retournés à l’utilisateur.
S’il est possible d’accéder à la base de données, le serveur effectue un traitement sur les informations entrées par l’utilisateur afin d’éviter les failles html et les injections SQL, puis utilise PDO pour effectuer une requête SELECT avec LIKE.
Le serveur effectue ensuite un traitement sur la réponse SQL afin de pouvoir afficher chaque enregistrement et les manipuler comme des dictionnaires, avec les attributs comme clés.
Enfin, la page html est générée, pour chaque enregistrement, une fiche est créée et les informations y sont ajoutées avec la commande echo. Pour les attributs pouvant être nuls, ils sont affichés seulement s’ils sont définis
Code affichant le titre de chaque fiche.
Code affichant les photos pour chaque fiche.
Une fois la page générée, elle est envoyé au client sous forme d’une page html.
Schéma simplifié des requêtes executées après la validation du formulaire.