← Retour aux réalisations Site web · Recettes

Cuisinea

Une plateforme de recettes centrée sur la présentation claire du contenu et une navigation simple.

Cuisinea
PROJET

Le projet

Cuisinea a été conçu pour présenter les recettes de manière simple, visuelle et accessible, avec une structure facilitant l’exploration du contenu culinaire.

Architecture Système & Plateforme Culinaire

Application web développée en PHP et MySQL dédiée au partage et à la découverte de recettes de cuisine. Elle intègre un moteur de recherche asynchrone en temps réel via l'API Fetch, un espace membre sécurisé avec hachage Bcrypt, et une gestion stricte des téléversements de photographies culinaires.

┌─────────────────────────────────────────────────────────────────────────────┐
│                    Cuisinea Full-Stack Web Architecture                     │
└──────────────────────────────────────┬──────────────────────────────────────┘
                                       │
           ┌───────────────────────────┼───────────────────────────┐
           ▼                           ▼                           ▼
  🔍 Moteur Asynchrone (AJAX)   👤 Espace Membre & Sécurité  🍲 Modèle de Données (SQL)
  • Fetch API en temps réel    • Hash Bcrypt / Argon2       • Tables categories & recipes
  • Requête SQL LIKE préparée  • Sessions PHP & Rôles       • Clés étrangères & Contraintes
  • Filtrage par catégories    • Envois SMTP (PHPMailer)    • Validation MIME binaire
  • Injection DOM sans reload  • Protection XSS & Uploads   • Chargement différé (Lazy)
            

Recherche Asynchrone Instantanée

Moteur de recherche JavaScript ES6 Fetch interrogeant la base de données sans rechargement de page.

Espace Membre & Sécurité

Système d'inscription et de connexion avec hachage sécurisé des mots de passe et notifications PHPMailer.

Validation Stricte des Téléversements

Vérification binaire des fichiers d'images via getimagesize() et génération de noms uniques avec slugify() et uniqid().

1. Modules Fonctionnels & Parcours Utilisateur

L'application s'articule autour de modules ergonomiques conçus pour simplifier la consultation et le partage de recettes :

Page d'Accueil Dynamique

Sélection aléatoire de 3 recettes pour renouveler l'inspiration à chaque visite avec des cartes visuelles adaptatives.

RAND() SQLCartes dynamiquesBootstrap 5

Fiche Recette Complète

Présentation détaillée avec découpage de la liste des ingrédients ligne par ligne et étapes de préparation numérotées.

IngrédientsÉtapes pas-à-pasnl2br

Ajout & Gestion de Recettes

Formulaire d'ajout sécurisé réservé aux membres connectés avec sélection de catégorie et téléversement de photos.

Upload MIMEslugify()uniqid()

2. Moteur de Recherche Asynchrone & Sécurité SQL

Le script search.php exécute une requête SQL préparée multi-critères garantissant une protection totale contre les injections SQL :

// Requête préparée multi-critères sécurisée (search.php)
$sql = "SELECT * FROM recipes
        WHERE (? = '' OR title LIKE ? 
               OR description LIKE ? 
               OR ingredients LIKE ?)
        AND (? = '' OR category_id = ?)";

$stmt = $pdo->prepare($sql);
$stmt->execute([
    $searchTerm, "%$searchTerm%", "%$searchTerm%", "%$searchTerm%",
    $category, $category
]);
            
  • Recherche Textuelle Universelle: Analyse concomitante sur le titre, la description et les ingrédients via l'opérateur SQL LIKE.
  • Filtrage par Catégorie: Restriction instantanée par catégorie (Entrées, Plats, Desserts) chargée dynamiquement via l'API.
  • Gestion des États Vides: Affichage immédiat d'un message convivial lorsqu'aucune recette ne correspond aux critères saisis.

3. Modèle de Données & Schéma Relationnel MySQL

Structure relationnelle normalisée assurant la cohérence des recettes, des catégories et des comptes utilisateurs :

Table Colonnes Clés Types SQL Description & Contraintes
categories id, name INT, VARCHAR(255) Catégories de plats avec identifiant unique auto-incrémenté.
recipes id, category_id, title, description, ingredients, instructions, image INT, TEXT, VARCHAR(255) Recettes reliées aux catégories via clé étrangère, avec textes d'ingrédients et étapes de préparation.
users id, first_name, last_name, email, password, role INT, VARCHAR(255) Utilisateurs avec contrainte d'unicité sur l'adresse email et mot de passe chiffré.

4. Matrice des Composants Techniques

Composant Implémentation Technique Bénéfice Utilisateur & Performance
Recherche Asynchrone JavaScript ES6 Fetch API + search.php Expérience Fluide Filtrage dynamique instantané sans rechargement de page
Requêtes Préparées PDO PHP PDO Prepared Statements Sécurité Maximale Protection totale contre les failles d'injection SQL
Validation Téléversement getimagesize() + slugify() + uniqid() Intégrité Fichiers Rejet des faux fichiers et prévention de l'écrasement
Chiffrement des Mots de Passe password_hash() & password_verify() (Bcrypt) Protection des Données Stockage sécurisé des identifiants avec Bcrypt

Découvrir Cuisinea en Ligne

Explorez les recettes, testez la recherche asynchrone et découvrez l'interface culinaire.

Visiter l'Application Cuisinea ↗