Architektura systemu & Platforma kulinarna
Dedykowana aplikacja internetowa stworzona w PHP i MySQL przeznaczona do odkrywania, przygotowywania i dzielenia się przepisami kulinarnymi. Zawiera asynchroniczne wyszukiwanie w czasie rzeczywistym z użyciem Fetch API, bezpieczną strefę członkowską z haszowaniem haseł przez Bcrypt oraz ścisłą walidację plików graficznych.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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)
Błyskawiczne wyszukiwanie asynchroniczne
Silnik wyszukiwania oparty na JavaScript ES6 Fetch API odpytujący bazę danych MySQL w czasie rzeczywistym bez przeładowywania strony.
Strefa użytkownika & Bezpieczeństwo
System rejestracji i logowania z kryptograficznym haszowaniem haseł oraz automatycznymi powiadomieniami e-mail przez PHPMailer.
Ścisła walidacja przesyłanych plików
Binarne sprawdzanie poprawności zdjęć za pomocą getimagesize() oraz generowanie unikalnych, bezpiecznych nazw plików przez slugify() i uniqid().
1. Moduły funkcjonalne & Ścieżka użytkownika
Intuicyjnie zaprojektowane moduły ułatwiające przeglądanie przepisów i dodawanie własnych kulinarnych pomysłów:
Dynamiczna strona główna
Losowy wybór 3 przepisów przy każdej wizycie zapewniający ciągłą inspirację kulinarną.
RAND() SQLCartes dynamiquesBootstrap 5
Szczegółowa karta przepisu
Przejrzysta prezentacja z podziałem składników linijka po linijce oraz ponumerowanymi krokami przygotowania.
IngrédientsÉtapes pas-à-pasnl2br
Dodawanie i edycja przepisów
Bezpieczny formularz publikacji dla zalogowanych członków z wyborem kategorii i weryfikacją przesyłanych zdjęć.
Upload MIMEslugify()uniqid()
2. Wyszukiwanie asynchroniczne & Bezpieczeństwo SQL
Skrypt search.php wykonuje przygotowane zapytania SQL z wieloma kryteriami, gwarantując całkowitą ochronę przed atakami 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
]);
- Uniwersalne wyszukiwanie tekstowe: Jednoczesne przeszukiwanie tytułów przepisów, opisów i składników przy użyciu operatora SQL LIKE.
- Filtrowanie według kategorii: Natychmiastowe filtrowanie według typu dania (Przystawki, Dania główne, Desery) ładowane dynamicznie przez API.
- Informacja o braku wyników: Przejrzysty i czytelny komunikat, gdy żaden przepis nie spełnia wprowadzonych kryteriów.
3. Model danych MySQL & Schemat relacyjny
Znormalizowana struktura bazy danych zapewniająca spójność relacji między przepisami, kategoriami a kontami użytkowników:
| Tabela |
Kluczowe kolumny |
Typy SQL |
Opis & Ograniczenia |
| categories |
id, name |
INT, VARCHAR(255) |
Kategorie dań z automatycznie inkrementowanym kluczem głównym. |
| recipes |
id, category_id, title, description, ingredients, instructions, image |
INT, TEXT, VARCHAR(255) |
Przepisy powiązane z kategoriami kluczami obcymi, zawierające listy składników i instrukcje wykonania. |
| users |
id, first_name, last_name, email, password, role |
INT, VARCHAR(255) |
Konta użytkowników z unikalnym adresem e-mail i bezpiecznie haszowanymi hasłami. |
4. Matryca komponentów technicznych
| Komponent |
Implementacja techniczna |
Korzyść użytkowa & Wydajność |
| Wyszukiwanie asynchroniczne |
JavaScript ES6 Fetch API + search.php |
Płynne działanie Błyskawiczne filtrowanie dynamiczne bez przeładowywania strony |
| Zapytania przygotowane PDO |
PHP PDO Prepared Statements |
Maksymalne bezpieczeństwo Pełna ochrona przed podatnościami SQL Injection |
| Sanityzacja plików |
getimagesize() + slugify() + uniqid() |
Integralność plików Blokuje fałszywe pliki wykonywalne i zapobiega nadpisywaniu |
| Haszowanie haseł |
password_hash() & password_verify() (Bcrypt) |
Ochrona danych Bezpieczne przechowywanie poświadczeń zgodnie ze standardem Bcrypt |