← Takaisin projekteihin Verkkosivu · Reseptit

Cuisinea

Reseptialusta, joka keskittyy selkeään sisällön esittämiseen ja helppoon selaamiseen.

Cuisinea
PROJEKTI

Projekti

Cuisinea on suunniteltu esittelemään reseptejä yksinkertaisesti, visuaalisesti ja helposti käytettävästi sekä rakennettu rakenteeksi, joka tekee kulinaarisesta sisällöstä helpon selata.

Järjestelmäarkkitehtuuri & Kulinaarinen alusta

PHP:llä ja MySQL:llä kehitetty räätälöity verkkosovellus ruokareseptien löytämiseen, valmistamiseen ja jakamiseen. Alusta sisältää reaaliaikaisen asynkronisen haun Fetch API:lla, suojatun jäsenalueen Bcrypt-salasanatiivisteillä ja tarkan kuvatiedostojen MIME-validoinnin.

┌─────────────────────────────────────────────────────────────────────────────┐
│                    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)
            

Välitön asynkroninen haku

JavaScript ES6 Fetch API -hakumoottori, joka hakee tiedot MySQL-tietokannasta reaaliajassa ilman sivun uudelleenlatausta.

Jäsenalue & Tietoturva

Käyttäjien rekisteröitymis- ja kirjautumisjärjestelmä salatulla salasanasuojauksella ja automaattisilla PHPMailer-sähköposti-ilmoituksilla.

Tarkka tiedostovalidointi

Kuvien binääritason varmennus getimagesize()-funktiolla ja uniikit siivotut tiedostonimet slugify()- ja uniqid()-toiminnoilla.

1. Toiminnalliset moduulit & Käyttäjäpolku

Ergonomisesti suunnitellut moduulit, jotka helpottavat reseptien selaamista ja omien luomusten julkaisemista:

Dynaaminen etusivu

3 satunnaisen reseptin esittely jokaisella vierailukerralla tarjoaa jatkuvaa ruoanlaittoinspiraatiota.

RAND() SQLCartes dynamiquesBootstrap 5

Yksityiskohtainen reseptisivu

Selkeä esitystapa, jossa ainesosat on jaoteltu riveittäin ja valmistusohjeet on numeroitu vaiheittain.

IngrédientsÉtapes pas-à-pasnl2br

Reseptien lisäys & Hallinta

Kirjautuneille jäsenille tarkoitettu suojattu lomake kategoriavalinnalla ja kuvien latausvalidoinnilla.

Upload MIMEslugify()uniqid()

2. Asynkroninen haku & SQL-tietoturva

Taustajärjestelmän search.php-skripti suorittaa valmisteltuja monikriteerisiä SQL-kyselyitä suojaten järjestelmän täysin SQL-injektioilta:

// 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
]);
            
  • Kattava tekstitiedonhaku: Samanaikainen haku reseptien otsikoista, kuvauksista ja ainesosaluetteloista SQL LIKE -operaattorilla.
  • Kategoriasuodatus: Välitön suodatus ruokalajeittain (Alkupalat, Pääruoat, Jälkiruoat) dynaamisesti API:n kautta ladattuna.
  • Palaute tyhjistä tuloksista: Selkeä ja ystävällinen ilmoitusviesti, kun annetuilla hakuehdoilla ei löydy reseptejä.

3. MySQL-tietomalli & Relaatiokaavio

Normalisoitu relaatiotietokanta, joka takaa tiedon eheyden reseptien, kategorioiden ja käyttäjätilien välillä:

Taulu Pääsarakkeet SQL-tyypit Kuvaus & Rajoitteet
categories id, name INT, VARCHAR(255) Ruokakategoriat automaattisesti kasvavalla pääavaimella.
recipes id, category_id, title, description, ingredients, instructions, image INT, TEXT, VARCHAR(255) Viiteavaimella kategorioihin liitetyt reseptit ainesosalistoineen ja valmistusvaiheineen.
users id, first_name, last_name, email, password, role INT, VARCHAR(255) Käyttäjätilit uniikilla sähköpostirajoitteella ja turvallisesti tiivistetyillä salasanoilla.

4. Tekninen komponenttimatriisi

Komponentti Tekninen toteutus Käyttäjä- & Suorituskykyetu
Asynkroninen haku JavaScript ES6 Fetch API + search.php Sulava kokemus Välitön dynaaminen suodatus ilman sivun uudelleenlatausta
Valmistellut PDO-lausekkeet PHP PDO Prepared Statements Huipputurvallisuus Täysi suojaus SQL-injektiohaavoittuvuuksilta
Tiedostojen siivous getimagesize() + slugify() + uniqid() Tiedostojen eheys Estää naamioidut suoritettavat tiedostot ja ylikirjoitukset
Salasanojen tiivistys password_hash() & password_verify() (Bcrypt) Tietosuoja Standardinmukainen käyttäjätietojen suojaus Bcryptillä

Tutustu Cuisinea-palveluun verkossa

Selaa reseptejä, testaa reaaliaikaista hakumoottoria ja tutustu käyttöliittymään.

Avaa Cuisinea-sovellus ↗