ProjetRestoMVC est une application web dĂ©veloppĂ©e en PHP en architecture MVC. Elle permet aux utilisateurs de consulter et noter des restaurants. Chaque utilisateur peut sâinscrire, sâauthentifier et ajouter des commentaires ainsi que des notes. Les restaurants peuvent appartenir Ă plusieurs types de cuisine et ĂȘtre enrichis de photos. Lâapplication intĂšgre Ă©galement des fonctionnalitĂ©s dâapprĂ©ciation (aimer un restaurant), de modĂ©ration (comptes modĂ©rĂ©s) et dâaffichage personnalisĂ©. Elle repose sur une base de donnĂ©es relationnelle robuste qui centralise les utilisateurs, les restaurants, les critiques et les associations entre tables.
SystÚme de gestion de base de données
La base de donnĂ©es est au câŒĂŽur du fonctionnement de l'application. Elle contient huit tables principales : utilisateur, resto, photo, typecuisine, proposer, aimer, critiquer et photo. Chaque table est pensĂ©e pour modĂ©liser une entitĂ© mĂ©tier claire. Les clĂ©s Ă©trangĂšres assurent la cohĂ©rence des relations, notamment entre les utilisateurs et les restaurants via les critiques ou les favoris. La structure permet aussi de gĂ©rer les types de cuisine associĂ©s aux Ă©tablissements de maniĂšre flexible.
Structure relationnelle des données Resto
La base de donnĂ©es du projet est organisĂ©e en huit tables : utilisateur, resto, photo, typecuisine, proposer, aimer, critiquer et une table pivot pour les associations de types. Chaque table correspond Ă une entitĂ© mĂ©tier, et les relations sont assurĂ©es par des clĂ©s Ă©trangĂšres. Cette structure permet de relier facilement les critiques aux utilisateurs et restaurants, dâassocier plusieurs types de cuisine Ă un mĂȘme Ă©tablissement, et de gĂ©rer les photos et les avis utilisateurs. Lâensemble garantit un systĂšme cohĂ©rent, Ă©volutif et sĂ©curisĂ© pour la gestion de contenu.
Le modĂšle relationnel reprĂ©sente toutes les entitĂ©s mĂ©tiers de lâapplication avec leurs attributs principaux et leurs relations, assurant une cohĂ©rence parfaite entre les fonctionnalitĂ©s et les donnĂ©es manipulĂ©es.
Recherche de restaurants
Cette fonctionnalitĂ© permet Ă l'utilisateur de rechercher des restaurants dans la base en fonction de plusieurs critĂšres : par nom, par adresse ou par adresse + note moyenne. Elle s'adapte dynamiquement au type de recherche sĂ©lectionnĂ© via un formulaire HTML. Lâutilisateur peut Ă©galement spĂ©cifier sâil souhaite une recherche approximative (LIKE) ou exacte (par nom uniquement). En cas de recherche par note, une jointure est faite avec la table critiquer pour calculer la moyenne des notes et filtrer les rĂ©sultats via un HAVING. Une fois les restaurants rĂ©cupĂ©rĂ©s, ils sont affichĂ©s dans des cartes HTML avec photo, nom, adresse et lien vers leur fiche dĂ©tail. La fonctionnalitĂ© est flexible, sĂ©curisĂ©e par des requĂȘtes prĂ©parĂ©es et sâadapte Ă plusieurs scĂ©narios de recherche.
Formulaire dynamique de recherche
Ce formulaire HTML affiche dynamiquement les champs associés au critÚre sélectionné : nom, adresse ou adresse + note. Il utilise un switch PHP sur la variable $critere passée en GET. Il contient également une case à cocher pour permettre la recherche approximative lorsque la recherche se fait par nom. Chaque champ est prérempli si des valeurs ont été envoyées précédemment.
Formulaire dynamique avec critĂšres conditionnels (nom, adresse ou adresse + note) via switch ($critere).
Routing du contrĂ©â€leur vers le script PHP
Le contrĂ©â€leur principal (controleurPrincipal.php) mappe les actions passĂ©es en GET (comme action=recherche) vers le fichier PHP correspondant (rechercheResto.php). Cela permet de dĂ©coupler la logique et de faciliter lâajout de futures fonctionnalitĂ©s. Il agit comme un routeur manuel simple basĂ© sur un tableau associatif.
La fonction controleurPrincipal() redirige lâaction recherche vers rechercheResto.php.
RequĂȘte SQL filtrĂ©e avec notes et adresses
Dans le script rechercheResto.php, une requĂȘte SQL complexe est prĂ©parĂ©e en fonction des paramĂštres saisis. En cas de recherche par adresse + note, elle utilise une jointure entre resto et critiquer, un groupement par idR, et un HAVING AVG(note) pour ne retenir que les restaurants dans lâintervalle de notes prĂ©cisĂ©. Tous les champs sont bindĂ©s avec des bindValue sĂ©curisĂ©s.
RequĂȘte SQL avec jointure, moyenne des notes et filtres multi-paramĂštres dans getRestosByAdresseNote().
Affichage dynamique des résultats sous forme de carte
Le tableau $listeRestos rĂ©cupĂ©rĂ© est parcouru dans une boucle. Pour chaque restaurant, une photo est rĂ©cupĂ©rĂ©e grĂłce Ă son ID (getPhotosByIdR). Le nom, lâadresse et les informations associĂ©es sont ensuite affichĂ©s dans une carte HTML avec lien vers la fiche dĂ©tail. Le tout sâintĂšgre dans une structure responsive via des classes Bootstrap.
Boucle dâaffichage des restaurants avec image, adresse et lien vers la fiche dans une carte HTML.
Affichage de la fiche dĂ©taillĂ©e dâun restaurant
Cette fonctionnalitĂ© permet Ă lâutilisateur de consulter les informations dĂ©taillĂ©es dâun restaurant sĂ©lectionnĂ©. Ăš partir dâun identifiant (idR) passĂ© en paramĂštre, le systĂšme va charger toutes les donnĂ©es nĂ©cessaires Ă lâaffichage : informations gĂ©nĂ©rales du restaurant, ses types de cuisine, les photos associĂ©es et les critiques dĂ©posĂ©es par les utilisateurs. Le fichier detailResto.php joue le rĂ©â€le de contrĂ©â€leur, rĂ©cupĂ©rant l'identifiant et appelant plusieurs fonctions pour constituer les donnĂ©es. Ensuite, celles-ci sont injectĂ©es dans la vue vueDetailResto.php. Lâutilisateur peut ainsi visualiser lâadresse, les horaires, les types de plats, les notes et les commentaires. Cette fonctionnalitĂ© sâinscrit dans une logique MVC bien structurĂ©e.
Chargement et affichage des données détaillées du restaurant
Cette étape débute dans detailResto.php oé⣠l'identifiant du restaurant est récupéré via $_GET['idR']. Les fonctions telles que getRestoByIdR, getPhotosByIdR, getCritiquerByIdR et d'autres sont ensuite appelées pour assembler toutes les informations relatives au restaurant. Ces données sont ensuite utilisées dans la vue pour afficher les sections : informations, photos, critiques, et types de cuisine.
Code principal dans detailResto.php pour récupérer les données via les fonctions DAO.
Fonction getRestoByIdR qui rĂ©cupĂšre les informations du restaurant Ă partir de lâid.
Fonction getPhotosByIdR qui récupÚre toutes les photos associées à un restaurant donné.
Fonction getCritiquerByIdR qui récupÚre toutes les critiques liées à un restaurant spécifique.