Présentation de Projet - Portfolio E6

Support : Agence Immo BTS

Portfolio professionnelE6 - Option SLAM

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.

00 / Cahier des chargesContexte et besoin

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
00 / Cahier des chargesFonctionnalités attendues

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.
00 / Cahier des chargesRègles de gestion

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.
01 / MaquettesAccueil et recherche

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.

Agence Immo
Agence Immo
Filtrer
01 / MaquettesConnexion
Agence Immo
Connexion

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.

01 / MaquettesNotre équipe
Agence Immo
Notre équipe
Claire Martin
Thomas Leroy
Sarah Bernard
01 / MaquettesAvis clients

Maquette des avis

Cette page apporte de la crédibilité au site avec des retours clients présentés sous forme de cartes simples.

Agence Immo
Avis clients
★★★★★
Camille D.
★★★★★
Nicolas R.
★★★★☆
Sarah L.
01 / MaquettesBack-office
Agence Immo
Administration
Gestion annonces
Modifier
Messages reçus
Voir
02 / ContexteObjectifs métier

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.
03 / TechnologiesArchitecture technique

Front-end

  • HTML5
  • CSS3
  • Bootstrap 5

Back-end

  • PHP
  • Sessions
  • PDO

Base de données

  • MySQL
  • Clés étrangères
  • ON DELETE CASCADE
04 / ArchitectureOrganisation des fichiers

Modularité

  • config.php centralise PDO et session.
  • header.php et footer.php évitent les duplications.
  • Chaque page PHP porte une responsabilité métier.
agence-immo-bts/ ├── config.php ├── header.php / footer.php ├── index.php / login.php / register.php ├── ajouter.php / modifier.php ├── contact.php / messages.php ├── admin.php ├── faq.php / notre.php / avis.php └── assets/style.css
05 / Modèle relationnelBase de données

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.
06 / Code focusconfig.php

Rôle

  • Démarrer la session.
  • Créer la connexion PDO.
  • Fournir les fonctions est_connecte(), role() et format_prix().
$pdo = new PDO( "mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); function est_connecte() { return isset($_SESSION["user_id"]); }
07 / Code focusindex.php

Recherche

  • Filtres transmis en GET.
  • Construction progressive de la requête.
  • Pagination à 3 annonces par page.
  • Affichage protégé avec htmlspecialchars().
if (!empty($_GET["ville"])) { $sql .= " AND ville LIKE ?"; $params[] = "%" . $_GET["ville"] . "%"; } $stmt = $pdo->prepare($sql); $stmt->execute($params);
08 / Code focuslogin.php

Authentification

  • Recherche du compte par email.
  • Vérification avec password_verify().
  • Migration automatique des anciens mots de passe.
  • Création des variables de session.
$mot_de_passe_ok = $user && ( password_verify($mot_de_passe, $user["mot_de_passe"]) || hash_equals($user["mot_de_passe"], $mot_de_passe) );
09 / CybersécuritéSécurisation

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.

10 / ÉvolutionsLimites et V2

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.
11 / ConclusionBilan professionnel

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.

1 / 19