Conception & réalisation
d'une plateforme immobilière
Application web dynamique en PHP/MySQL avec recherche, rôles utilisateurs, messagerie et pages de présentation.
Problématique
Une agence immobilière souhaite disposer d'un site permettant de publier, rechercher et gérer des annonces depuis une interface web simple.
Objectif général
Créer une application PHP/MySQL capable de séparer les usages publics, vendeurs et administrateurs avec une navigation claire.
Public cible
- Visiteurs
- Clients connectés
- Vendeurs
- Administrateurs
Support attendu
- Site responsive
- Navigation simple
- Pages dynamiques
- Base relationnelle
Contraintes
- PHP procédural
- MySQL + PDO
- Bootstrap
- Sécurité formulaire
Fonctions principales
- Afficher les annonces immobilières disponibles.
- Filtrer par ville, prix minimum, prix maximum et nombre de pièces.
- Consulter les informations d'un bien : type, ville, prix, description, images.
- Permettre aux utilisateurs connectés de contacter un vendeur.
Fonctions de gestion
- Connexion et inscription des utilisateurs.
- Ajout d'annonce par vendeur ou administrateur.
- Modification des annonces autorisées.
- Consultation des messages reçus.
- Espace administration pour superviser les données.
Rôles
- Visiteur : consultation et filtrage.
- Client : contact vendeur.
- Vendeur : ajout et suivi.
- Admin : gestion complète.
Données
- Une annonce appartient à un vendeur.
- Une annonce peut avoir plusieurs images.
- Un message est lié à une annonce.
- Suppression en cascade.
Qualité attendue
- Interface lisible.
- Code réutilisable via header/footer.
- Requêtes préparées.
- Protection XSS avec htmlspecialchars.
Maquette de la page d'accueil
La page d'accueil reprend le design Bootstrap du site : navbar bleue, formulaire de filtrage et cartes d'annonces en grille.
Maquette de connexion
La page met en avant un formulaire court : email, mot de passe et bouton d'action. L'objectif est une connexion rapide sans surcharge visuelle.
Maquette des avis
Cette page apporte de la crédibilité au site avec des retours clients présentés sous forme de cartes simples.
Côté visiteurs
- Recherche et filtrage d'annonces.
- Consultation rapide des biens.
- Connexion pour contacter le vendeur.
Côté gestion
- Contrôle d'accès par sessions.
- Ajout et modification d'annonces.
- Administration et messagerie.
Front-end
- HTML5
- CSS3
- Bootstrap 5
Back-end
- PHP
- Sessions
- PDO
Base de données
- MySQL
- Clés étrangères
- ON DELETE CASCADE
Modularité
- config.php centralise PDO et session.
- header.php et footer.php évitent les duplications.
- Chaque page PHP porte une responsabilité métier.
Tables principales
- immo_users : comptes et rôles.
- immo_annonces : biens immobiliers.
- immo_images : visuels liés aux annonces.
- immo_messages : demandes de contact.
Relations
- Un vendeur possède plusieurs annonces.
- Une annonce possède plusieurs images.
- Une annonce reçoit plusieurs messages.
- Suppression cascade pour éviter les données orphelines.
Rôle
- Démarrer la session.
- Créer la connexion PDO.
- Fournir les fonctions est_connecte(), role() et format_prix().
Recherche
- Filtres transmis en GET.
- Construction progressive de la requête.
- Pagination à 3 annonces par page.
- Affichage protégé avec htmlspecialchars().
Authentification
- Recherche du compte par email.
- Vérification avec password_verify().
- Migration automatique des anciens mots de passe.
- Création des variables de session.
Injections SQL
Les données utilisateur ne sont pas injectées directement dans les requêtes : elles passent par PDO, prepare() et execute().
Failles XSS
Les données affichées dans le HTML sont échappées avec htmlspecialchars() pour neutraliser le code malveillant.
Limites actuelles
- Images par URL plutôt que vrai upload.
- Pas d'envoi email réel.
- Interface encore simple visuellement.
Améliorations possibles
- Upload sécurisé avec contrôle MIME.
- Système de favoris.
- Tableau de bord vendeur plus complet.
Compétences validées
Conception
Modèle relationnel, clés étrangères, rôles et règles métier.
Développement
PHP, PDO, sessions, formulaires, pagination et pages dynamiques.
Sécurité
Requêtes préparées, hashage, contrôle d'accès et échappement HTML.