Systemarchitektur & Kulinarische Plattform
Eine maßgeschneiderte Webanwendung, entwickelt mit PHP und MySQL zum Entdecken, Kochen und Teilen von Rezepten. Sie verfügt über eine asynchrone Echtzeitsuche via Fetch-API, einen sicheren Mitgliederbereich mit Bcrypt-Passwort-Hashing und eine strenge MIME-Prüfung für Rezeptfotos.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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)
Asynchrone Echtzeitsuche
JavaScript ES6 Fetch-API-Suchmaschine, die MySQL-Datenbanken in Echtzeit ohne Neuladen der Seite abfragt.
Mitgliederbereich & Sicherheit
Registrierungs- und Login-System mit kryptografischem Passwort-Hashing und automatischen SMTP-Benachrichtigungen via PHPMailer.
Strenge Upload-Validierung
Binäre Bildprüfung mittels getimagesize() und eindeutige bereinigte Dateinamen mit slugify() und uniqid().
1. Funktionsmodule & Benutzerführung
Ergonomisch gestaltete Module zur Vereinfachung der Rezeptsuche und für eigene Beiträge:
Dynamische Startseite
Zufällige Anzeige von 3 Rezepten bei jedem Besuch für kontinuierliche kulinarische Inspiration.
RAND() SQLCartes dynamiquesBootstrap 5
Detaillierte Rezeptseite
Übersichtliche Darstellung mit zeilenweiser Zutatenaufteilung und nummerierten Schritt-für-Schritt-Anleitungen.
IngrédientsÉtapes pas-à-pasnl2br
Rezeptverwaltung & Veröffentlichung
Sicheres Formular für angemeldete Mitglieder mit Kategorieauswahl und geprüften Bilduploads.
Upload MIMEslugify()uniqid()
2. Asynchrone Suche & SQL-Sicherheit
Das search.php-Backend führt vorbereitete Multi-Kriterien-SQL-Statements aus und schützt vor SQL-Injections:
// 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
]);
- Universelle Volltextsuche: Gleichzeitiges Durchsuchen von Rezepttiteln, Beschreibungen und Zutaten mit dem SQL-LIKE-Operator.
- Kategoriefilterung: Sofortige Filterung nach Speiseart (Vorspeisen, Hauptgerichte, Desserts), dynamisch über die API geladen.
- Feedback bei Null-Ergebnissen: Freundliche Hinweismeldung, falls keine Rezepte zu den eingegebenen Suchkriterien passen.
3. MySQL-Datenmodell & Relationales Schema
Normalisiertes relationales Datenbankdesign zur Sicherung der Datenintegrität zwischen Rezepten, Kategorien und Benutzern:
| Tabelle |
Schlüsselspalten |
SQL-Typen |
Beschreibung & Constraints |
| categories |
id, name |
INT, VARCHAR(255) |
Rezeptkategorien mit automatisch inkrementiertem Primärschlüssel. |
| recipes |
id, category_id, title, description, ingredients, instructions, image |
INT, TEXT, VARCHAR(255) |
Rezepte, die über Fremdschlüssel mit Kategorien verknüpft sind, mit Zutatenlisten und Zubereitungsschritten. |
| users |
id, first_name, last_name, email, password, role |
INT, VARCHAR(255) |
Benutzerkonten mit eindeutiger E-Mail-Beschränkung und sicher gehashten Passwörtern. |
4. Technische Komponentenmatrix
| Komponente |
Technische Umsetzung |
Benutzer- & Performancevorteil |
| Asynchrone Suche |
JavaScript ES6 Fetch API + search.php |
Flüssiges Erlebnis Sofortige dynamische Filterung ohne Neuladen der Seite |
| Vorbereitete PDO-Statements |
PHP PDO Prepared Statements |
Maximale Sicherheit Vollständiger Schutz vor SQL-Injection-Schwachstellen |
| Upload-Bereinigung |
getimagesize() + slugify() + uniqid() |
Datei-Integrität Blockiert getarnte ausführbare Dateien und verhindert Überschreiben |
| Passwort-Hashing |
password_hash() & password_verify() (Bcrypt) |
Datenschutz Sicherer Schutz der Zugangsdaten nach Industriestandards mit Bcrypt |