Architettura di Sistema & Piattaforma Culinaria
Applicazione web sviluppata in PHP e MySQL dedicata alla scoperta, consultazione e condivisione di ricette di cucina. Dispone di un motore di ricerca asincrono in tempo reale tramite Fetch API, un'area membri sicura con hashing Bcrypt e una validazione rigorosa delle immagini caricate.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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)
Ricerca Asincrona Istantanea
Motore di ricerca JavaScript ES6 Fetch che interroga il database MySQL in tempo reale senza ricaricare la pagina.
Area Membri & Sicurezza
Sistema di registrazione e autenticazione con cifratura sicura delle password e notifiche email automatiche tramite PHPMailer.
Validazione Rigorosa degli Upload
Verifica binaria dei file immagine con getimagesize() e generazione di nomi univoci tramite slugify() e uniqid().
1. Moduli Funzionali & Percorso Utente
Moduli ergonomici progettati per semplificare la consultazione e la condivisione di ricette:
Homepage Dinamica
Selezione casuale di 3 ricette ad ogni visita per offrire continua ispirazione culinaria.
RAND() SQLCartes dynamiquesBootstrap 5
Scheda Ricetta Completa
Presentazione dettagliata con suddivisione degli ingredienti riga per riga e istruzioni di preparazione numerate.
IngrédientsÉtapes pas-à-pasnl2br
Creazione & Gestione Ricette
Modulo di pubblicazione riservato agli utenti registrati con selezione delle categorie e upload controllato delle foto.
Upload MIMEslugify()uniqid()
2. Ricerca Asincrona & Sicurezza SQL
Lo script search.php esegue query SQL preparate multicriterio garantendo una protezione totale contro le SQL injection:
// 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
]);
- Ricerca Testuale Universale: Analisi simultanea su titolo, descrizione e ingredienti tramite operatore SQL LIKE.
- Filtro per Categoria: Filtro immediato per portata (Antipasti, Primi/Secondi, Dolci) caricato dinamicamente via API.
- Gestione Risultati Vuoti: Messaggio chiaro e amichevole quando nessuna ricetta corrisponde ai criteri inseriti.
3. Modello Dati & Schema Relazionale MySQL
Struttura relazionale normalizzata per garantire l'integrità dei dati tra ricette, categorie e utenti:
| Tabella |
Colonne Chiave |
Tipi SQL |
Descrizione & Vincoli |
| categories |
id, name |
INT, VARCHAR(255) |
Categorie di portate con chiave primaria auto-incrementale. |
| recipes |
id, category_id, title, description, ingredients, instructions, image |
INT, TEXT, VARCHAR(255) |
Ricette collegate alle categorie tramite chiave esterna, con ingredienti e passaggi di preparazione. |
| users |
id, first_name, last_name, email, password, role |
INT, VARCHAR(255) |
Account utente con vincolo di unicità sull'email e password con hashing sicuro. |
4. Matrice dei Componenti Tecnici
| Componente |
Implementazione Tecnica |
Vantaggio Utente & Prestazioni |
| Ricerca Asincrona |
JavaScript ES6 Fetch API + search.php |
Esperienza Fluida Filtro dinamico istantaneo senza ricaricamento della pagina |
| Prepared Statements PDO |
PHP PDO Prepared Statements |
Massima Sicurezza Protezione completa da vulnerabilità di SQL injection |
| Sanitizzazione Upload |
getimagesize() + slugify() + uniqid() |
Integrità File Blocca file eseguibili mascherati e previene sovrascritture |
| Hashing delle Password |
password_hash() & password_verify() (Bcrypt) |
Protezione Dati Custodia sicura delle credenziali secondo gli standard con Bcrypt |