Arhitectură de Sistem & Platformă Culinară
Aplicație web dezvoltată în PHP și MySQL dedicată descoperirii, preparării și partajării de rețete culinare. Dispune de un motor de căutare asincron în timp real prin Fetch API, zonă securizată pentru membri cu hashing Bcrypt și validare binară strictă a fotografiilor încărcate.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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)
Căutare Asincronă Instantanee
Motor de căutare JavaScript ES6 Fetch care interoghează baza de date MySQL în timp real, fără reîncărcarea paginii.
Zonă Membri & Securitate
Sistem de înregistrare și autentificare cu criptare securizată a parolelor și notificări automate prin PHPMailer.
Validare Strictă a Fișierelor Încărcate
Verificare binară a imaginilor prin getimagesize() și generare de nume unice curate folosind slugify() și uniqid().
1. Module Funcționale & Experiență Utilizator
Secțiuni ergonomice create pentru a simplifica consultarea și adăugarea de rețete în comunitate:
Pagină Principală Dinamică
Selecție aleatorie de 3 rețete la fiecare vizită pentru a oferi inspirație culinară continuă.
RAND() SQLCartes dynamiquesBootstrap 5
Fișă de Rețetă Detaliată
Prezentare detaliată cu împărțirea ingredientelor rând cu rând și pași de preparare numerotați.
IngrédientsÉtapes pas-à-pasnl2br
Adăugare & Gestiune Rețete
Formular securizat rezervat membrilor autentificați, cu selectarea categoriei și încărcare controlată a imaginilor.
Upload MIMEslugify()uniqid()
2. Căutare Asincronă & Securitate SQL
Scriptul search.php execută interogări SQL pregătite multicriteriale ce oferă protecție completă împotriva injecțiilor 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
]);
- Căutare Textuală Universală: Scanare simultană în titlul rețetei, descriere și lista de ingrediente prin operatorul SQL LIKE.
- Filtrare după Categorie: Filtrare instantanee după tipul de fel (Aperitive, Feluri principale, Deserturi) încărcată dinamic prin API.
- Notificare când nu sunt Rezultate: Mesaj clar și prietenos afișat atunci când nicio rețetă nu corespunde criteriilor căutate.
3. Model de Date MySQL & Schemă Relațională
Structură relațională normalizată ce garantează integritatea datelor între rețete, categorii și utilizatori:
| Tabel |
Coloane Cheie |
Tipuri SQL |
Descriere & Constrângeri |
| categories |
id, name |
INT, VARCHAR(255) |
Categorii de preparate cu cheie primară auto-incrementată. |
| recipes |
id, category_id, title, description, ingredients, instructions, image |
INT, TEXT, VARCHAR(255) |
Rețete legate de categorii prin cheie externă, cu ingrediente și pași de preparare. |
| users |
id, first_name, last_name, email, password, role |
INT, VARCHAR(255) |
Conturi de utilizatori cu unicitate pe adresa de e-mail și parole criptate cu Bcrypt. |
4. Matricea Componentelor Tehnice
| Componentă |
Implementare Tehnică |
Avantaj Utilizator & Performanță |
| Căutare Asincronă |
JavaScript ES6 Fetch API + search.php |
Experiență Fluidă Filtrare dinamică instantanee fără reîncărcarea paginii |
| Instrucțiuni Pregătite PDO |
PHP PDO Prepared Statements |
Securitate Maximă Protecție absolută împotriva vulnerabilităților de injecție SQL |
| Validare Încărcare Fișiere |
getimagesize() + slugify() + uniqid() |
Integritate Fișiere Blochează fișierele mascate și previne suprascrierea imaginilor |
| Criptarea Parolelor |
password_hash() & password_verify() (Bcrypt) |
Protecția Datelor Păstrare securizată a credențialelor conform standardului Bcrypt |