ProjetCovoit est une application web de covoiturage dĂ©veloppĂ©e en PHP procĂ©dural avec une architecture MVC simplifiĂ©e. Elle permet aux utilisateurs de rechercher, rĂ©server, crĂ©er ou modifier des trajets selon leurs besoins, tout en interagissant via un systĂšme dâĂ©valuation et de notifications. Chaque utilisateur peut sâinscrire, se connecter, visualiser son historique, noter ses chauffeurs, ou encore choisir des conducteurs favoris pour les retrouver plus facilement.
Le back-office de lâapplication, accessible aux administrateurs, offre la possibilitĂ© de visualiser les utilisateurs, de bannir des comptes mal notĂ©s, et dâadministrer la plateforme. La sĂ©curitĂ© est gĂ©rĂ©e via une sĂ©paration des rĂ©â€les user/admin, un systĂšme de session robuste et un mĂ©canisme dâinterdiction dâaction pour les utilisateurs bannis. Le projet repose sur une base de donnĂ©es relationnelle solide, optimisĂ©e pour gĂ©rer les trajets, Ă©tapes intermĂ©diaires, utilisateurs, rĂ©servations, et interactions sociales. Lâensemble de lâinterface utilisateur est conĂ©Âșu pour offrir une navigation fluide et intuitive.
Conception et mise en place de la base de données relationnelle
La base de donnĂ©es est le socle fondamental du projet ProjetCovoit. Elle a Ă©tĂ© pensĂ©e pour modĂ©liser fidĂšlement lâunivers dâune application de covoiturage : utilisateurs, trajets, rĂ©servations, avis et notifications y sont interconnectĂ©s de maniĂšre cohĂ©rente. Chaque utilisateur peut crĂ©er ou rĂ©server des trajets, dĂ©poser un avis sur un conducteur, et marquer certains comme favoris grĂłce Ă la table preferred_drivers. Le systĂšme assure lâintĂ©gritĂ© des donnĂ©es via des relations bien dĂ©finies et lâusage de clĂ©s Ă©trangĂšres, notamment pour sĂ©curiser les suppressions en cascade (ON DELETE CASCADE). Un systĂšme de rĂ©â€le (user, admin) et une gestion de bannissement sont Ă©galement intĂ©grĂ©s pour contrĂ©â€ler les droits dâaction. Cette base robuste est alimentĂ©e automatiquement grĂłce Ă un fichier fixtures.php qui gĂ©nĂšre des utilisateurs, trajets, Ă©tapes, rĂ©servations et avis rĂ©alistes. Enfin, elle est optimisĂ©e pour interagir avec toutes les fonctionnalitĂ©s de lâapplication (recherche, historique, notation, modĂ©ration...).
Conception et modélisation de la base
La premiĂšre Ă©tape a consistĂ© Ă concevoir un modĂšle relationnel complet, en identifiant les entitĂ©s clĂ©s : users, trips, reservations, reviews, notifications, trip_stops, et preferred_drivers. Chaque relation a Ă©tĂ© structurĂ©e avec des clĂ©s primaires, des relations 1-N et N-N via des tables de liaison. Les types ont Ă©tĂ© choisis de maniĂšre cohĂ©rente pour respecter les bonnes pratiques (ex : ENUM, TIMESTAMP, BOOLEAN). Lâobjectif Ă©tait de permettre une gestion fluide des donnĂ©es utilisateurs et des trajets tout en prĂ©parant la base Ă accueillir des fonctionnalitĂ©s plus avancĂ©es (comme les filtres par chauffeur favori ou la gestion des bannissements).
Le modÚle relationnel généré (cf. image jointe) montre clairement les entités, leurs relations et les clés étrangÚres. Chaque table est lisible, normalisée, et connectée de maniÚre logique pour refléter les processus métier du covoiturage.
Recherche de trajets
Cette fonctionnalitĂ© permet Ă lâutilisateur de rechercher des trajets disponibles selon diffĂ©rents critĂšres : ville de dĂ©part, ville dâarrivĂ©e, date et nom du chauffeur. Elle offre Ă©galement un filtre avancĂ© permettant dâafficher uniquement les trajets proposĂ©s par les chauffeurs que lâutilisateur a ajoutĂ©s Ă ses favoris. Le systĂšme sâadapte dynamiquement Ă chaque champ rempli grĂłce Ă une construction conditionnelle de la requĂȘte SQL. Celle-ci est exĂ©cutĂ©e de faĂ©Âșon sĂ©curisĂ©e via des requĂȘtes prĂ©parĂ©es. Les rĂ©sultats sont ensuite affichĂ©s dans un tableau listant les informations clĂ©s du trajet, dont le chauffeur, la date, lâheure, le prix et le nombre de places disponibles. Cette fonctionnalitĂ© permet un filtrage rapide et ciblĂ©, amĂ©liorant lâexpĂ©rience utilisateur pour trouver facilement un covoiturage adaptĂ© Ă ses besoins.
Formulaire de recherche
Lâutilisateur accĂšde Ă une interface de recherche intuitive oé⣠il peut renseigner plusieurs critĂšres pour filtrer les trajets disponibles : ville de dĂ©part, ville dâarrivĂ©e, date du trajet, ou nom du chauffeur. Une case Ă cocher optionnelle permet dâactiver un filtre qui restreint les rĂ©sultats aux chauffeurs favoris, si lâutilisateur est connectĂ©. Tous les champs sont facultatifs : le formulaire sâadapte Ă la saisie partielle ou complĂšte. Le bouton de soumission envoie la requĂȘte en POST vers le contrĂ©â€leur de traitement.
Affiche le formulaire HTML complet avec tous les champs de filtre et lâoption "chauffeurs favoris".
RĂ©cupĂ©ration des champs cĂ©â€tĂ© contrĂ©â€leur
Lorsque le formulaire est soumis, les champs sont rĂ©cupĂ©rĂ©s depuis $_POST dans le contrĂ©â€leur. Chaque valeur est stockĂ©e dans une variable PHP ($departure, $arrival, etc.) pour ĂȘtre utilisĂ©e dans la construction de la requĂȘte. Le filtre onlyPreferred est Ă©galement dĂ©tectĂ© ici et converti en boolĂ©en. Cette Ă©tape permet de prĂ©parer les donnĂ©es utilisateurs sans traitement direct encore.
Montre la récupération des champs de formulaire dans SearchTripsController.php.
Construction dynamique de la requĂȘte SQL
La requĂȘte SQL est construite ligne par ligne, selon les champs remplis. Si une ville de dĂ©part ou dâarrivĂ©e est spĂ©cifiĂ©e, une clause LIKE est ajoutĂ©e ; si la date est renseignĂ©e, un filtre = est appliquĂ©. Si le nom du chauffeur est fourni, un filtre sur son email est Ă©galement inclus. En cas de filtre "chauffeurs favoris", une clause IN (...) est gĂ©nĂ©rĂ©e Ă partir des identifiants des conducteurs prĂ©fĂ©rĂ©s de lâutilisateur connectĂ©.
Montre lâassemblage progressif de la requĂȘte SQL selon les champs renseignĂ©s.
ExĂ©cution de la requĂȘte et rĂ©cupĂ©ration
Une fois la requĂȘte prĂ©parĂ©e, elle est sĂ©curisĂ©e via prepare() puis exĂ©cutĂ©e avec les paramĂštres utilisateur. Le rĂ©sultat est ensuite rĂ©cupĂ©rĂ© sous forme de tableau associatif grĂłce Ă fetchAll(). Le tableau final $trips contient toutes les informations nĂ©cessaires pour afficher les rĂ©sultats dans la vue. Cette Ă©tape termine la logique backend du contrĂ©â€leur.
Affiche les lignes exĂ©cutant la requĂȘte SQL avec prepare, execute et fetchAll.
Affichage des rĂ©sultats Ă lâutilisateur
Les rĂ©sultats sont envoyĂ©s Ă la vue search_trips.php, oé⣠une boucle foreach permet de gĂ©nĂ©rer une ligne de tableau pour chaque trajet trouvĂ©. Sont affichĂ©es : la ville de dĂ©part, dâarrivĂ©e, la date, lâheure, le nombre de places, le prix, et lâadresse mail du chauffeur. Un lien vers la page de dĂ©tails du trajet est Ă©galement gĂ©nĂ©rĂ© automatiquement. Lâensemble est affichĂ© dans un tableau HTML clair et responsive.
Montre la boucle dâaffichage HTML des rĂ©sultats avec les donnĂ©es du trajet et le lien "DĂ©tails".
Historique des trajets réservés
Cette fonctionnalitĂ© permet Ă un utilisateur connectĂ© de visualiser lâensemble de ses trajets rĂ©servĂ©s dans un tableau complet. Il peut y voir les villes de dĂ©part et dâarrivĂ©e, la date du trajet, lâheure, le nombre de places rĂ©servĂ©es et lâadresse mail du chauffeur. Lâinterface affiche Ă©galement si ce chauffeur a dĂ©jĂ Ă©tĂ© notĂ© ou ajoutĂ© en favori. Le systĂšme repose sur des jointures SQL entre reservations, trips et users pour regrouper les informations essentielles. Un tri est effectuĂ© selon lâutilisateur connectĂ©, et les donnĂ©es sont enrichies avec des requĂȘtes supplĂ©mentaires pour les favoris et les avis dĂ©jĂ dĂ©posĂ©s. Cela permet Ă lâutilisateur de garder un historique clair de ses covoiturages passĂ©s, et de faciliter lâĂ©valuation ou la replanification avec un chauffeur apprĂ©ciĂ©.
ContrĂ©â€le de session et rĂ©cupĂ©ration des trajets
DĂšs quâun utilisateur accĂšde Ă lâhistorique, une vĂ©rification de session est effectuĂ©e pour sâassurer quâil est connectĂ©. Ensuite, le contrĂ©â€leur rĂ©cupĂšre tous les trajets liĂ©s Ă cet utilisateur depuis la table reservations, en les joignant avec trips (dĂ©tails du trajet) et users (chauffeur). Une requĂȘte sĂ©curisĂ©e est utilisĂ©e pour ne charger que les donnĂ©es nĂ©cessaires. Si lâutilisateur est banni, une redirection vers la page de login est automatiquement dĂ©clenchĂ©e.
Affiche la requĂȘte SQL complĂšte de rĂ©cupĂ©ration des trajets avec jointure sur trips et users.
Chargement des favoris et chauffeurs déjà notés
Une fois les trajets rĂ©cupĂ©rĂ©s, deux requĂȘtes supplĂ©mentaires sont exĂ©cutĂ©es pour dĂ©terminer les chauffeurs que lâutilisateur a ajoutĂ©s Ă ses favoris (preferred_drivers) et ceux quâil a dĂ©jĂ notĂ©s (reviews). Ces informations sont essentielles pour afficher correctement les badges "Favori" ou "DĂ©jĂ notĂ©". Les IDs correspondants sont extraits avec array_column() et stockĂ©s dans la session pour ĂȘtre facilement accessibles depuis la vue.
Montre les requĂȘtes de rĂ©cupĂ©ration des favoris et des chauffeurs notĂ©s, et le stockage en session.
Affichage de lâhistorique dans la vue
La vue utilise une boucle foreach pour afficher chaque trajet dans un tableau HTML. Les donnĂ©es incluent les villes, les horaires, le nombre de places rĂ©servĂ©es et lâemail du chauffeur. En fonction des donnĂ©es en session, un bouton permet dâajouter ou retirer un chauffeur des favoris. Lâinterface est claire et dynamique, avec des boutons personnalisĂ©s selon le statut du chauffeur (favori ou non).
Affiche la boucle principale foreach avec lâaffichage conditionnel des boutons "Ajouter aux favoris" ou "Retirer".
Indication de notation (badge "Déjà noté")
Dans la mĂȘme boucle, une vĂ©rification permet dâindiquer si un chauffeur a dĂ©jĂ Ă©tĂ© notĂ©. Si ce nâest pas le cas, un petit formulaire apparaé«t pour ajouter une note sur 5 et un commentaire. Sinon, un badge "DĂ©jĂ notĂ©" est affichĂ© sous le chauffeur. Cela renforce la transparence et encourage lâinteraction utilisateur.
Montre lâaffichage conditionnel du formulaire de notation ou du badge "DĂ©jĂ notĂ©" selon les chauffeurs.