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 |