# Blok 8 - OOP # Prompt Engineering 4 ToDo advanced oefeningen Dynamic Prompting Let AI create prompts Let AI ask you questions # Voorbeeld advanced Prompting ### De Tree of Thought (ToT)-methode *(eenvoudige versie)* Ik wil eenvoudig MVC PHP framework maken. Als voorbeeld maak je een controller, een view en een model. De database die je kan gebruiken is bijgevoegd. **Stap 1: Genereer ten minste drie logische denkstappen die mogelijke richtingen verkennen.** **stap 2: Evalueer die denkstappen.** Er worden drie manieren van een aanpak van dit probleem bedacht en elke manier wordt beoordeeld op sterke- en zwakke punten. <deel van het antwoord weggehaald>
Richting | Sterke punten | Zwakke punten | Beoordeling |
---|---|---|---|
A: Kernstructuur | Zorgt voor een goed georganiseerde basis en scheidt verantwoordelijkheden netjes. | Mogelijk over-engineered voor een eerste voorbeeld; vertraagt de “werkende demo”. | **Hoog** – goed als je het framework later wilt uitbreiden. |
B: Voorbeeldgericht | Levert snel zichtbare resultaten; handig voor leren of demonstratie. | Kan leiden tot spaghetti-architectuur als je niet oplet; framework groeit ad hoc. | **Midden** – goed voor snelle start, minder voor schaalbaarheid. |
C: Databasegericht | Helpt bij correcte datamodellering; logisch als data centraal staat. | Makkelijk om te verzanden in datadetails voordat de flow duidelijk is. | **Laag-Midden** – bruikbaar als datamodellering complex is, anders omslachtig. |
Welkom, $naam!
"; } ``` ```php // Bestand: index.php include("utils.php"); toonWelkomstbericht("Ali"); ``` Je kunt ook meerdere functies in één bestand zetten, zoals: - `validation.php`: functies voor formuliercontrole - `format.php`: functies voor tekst- of getalopmaak ### 🛠️ Opdracht – utils.php gebruiken 1. Maak een nieuw bestand `utils.php` en schrijf daarin minstens 3 functies: - `formatteerBedrag($bedrag)` → toont bijv. "€ 12,50" - `valideerInvoer($waarde)` → controleert of de waarde niet leeg is - `toonWelkomstbericht($naam)` → toont HTML met de naam 2. Maak een ander bestand `test_utils.php` waarin je `include("utils.php")` gebruikt en de functies test. 3. Gebruik `echo`, `print_r()` en `var_dump()` om het resultaat van de functies te tonen. ### 🧠 Reflectie - Wat zijn de voordelen van functies in aparte bestanden bewaren? - Welke functie vond je het handigst om te schrijven en waarom? - Wat heb je geleerd over het verschil tussen globale en lokale variabelen? ### 📤 Inleveren - Lever de bestanden `utils.php` en `test_utils.php` in. - Lever een reflectiedocument in (.txt of .pdf) waarin je uitlegt wat je hebt gedaan en geleerd. ## 4 Form Validatie en Beveiliging ### **🎯** Leerdoelen - Je kunt formulierinvoer controleren op geldigheid. - Je kent de risico’s van onveilige invoer (zoals XSS). - Je kunt invoer ontsnappen met `htmlspecialchars()`. - Je gebruikt functies als `isset()`, `empty()` en `trim()` om invoer te valideren. ### 💡 Uitleg #### 📨 Waarom valideren? Gebruikers maken fouten. Hackers doen het expres. Daarom controleer je altijd of een formulier goed is ingevuld voordat je ermee werkt. #### 🔐 Veelvoorkomende gevaren - **XSS (Cross-Site Scripting):** iemand vult HTML of JavaScript in een formulier in, dat op jouw pagina wordt getoond. - **Lege velden:** de gebruiker vergeet iets in te vullen. - **Verkeerde types:** een tekst waar een getal moet staan. #### 🧰 Handige functies voor validatie - `isset($_POST["naam"])` – is het veld verzonden? - `empty($_POST["naam"])` – is het veld leeg? - `trim()` – verwijdert spaties voor en na de invoer. - `htmlspecialchars()` – maakt HTML onschadelijk. ```php ``` #### 📋 Simpel formulier ```html ``` ### 🛠️ Opdracht 1 – formulier\_validatie.php 1. Maak een PHP-bestand met een formulier waarin je de gebruiker vraagt om: - Naam - Leeftijd - Bericht 2. Controleer of alle velden zijn ingevuld. Toon een foutmelding als iets ontbreekt. 3. Gebruik `htmlspecialchars()` om het bericht veilig weer te geven. 4. Gebruik `is_numeric()` om te controleren of de leeftijd een getal is. #### Extra (optioneel) - Maak je foutmeldingen visueel opvallend met HTML (bijv. ``). ### 🧠 Reflectie - Waarom is het belangrijk om input van gebruikers altijd te controleren? - Wat zou er kunnen gebeuren als je `htmlspecialchars()` niet gebruikt? - Welke fouten kwamen er tijdens het testen naar boven? ### 📤 Inleveren - Lever je bestand `formulier_validatie.php` in (.php). - Lever een reflectiedocument in (.txt of .pdf) met jouw antwoorden. ## 5 Superglobals en Associatieve Arrays ### **🎯** Leerdoelen - Je begrijpt wat superglobals zijn in PHP (`$_GET`, `$_POST`, `$_SESSION`, `$_FILES`). - Je weet wat een associatieve array is en hoe je ermee werkt. - Je kunt formulierdata opslaan en verwerken met behulp van superglobals. ### 💡 Uitleg #### 🌍 Wat zijn superglobals? Superglobals zijn ingebouwde variabelen in PHP die overal beschikbaar zijn. Je gebruikt ze bijvoorbeeld om gegevens uit een formulier op te halen. - `$_POST` – bevat formulierdata die via POST is verzonden - `$_GET` – bevat data uit de URL (bijv. `?pagina=contact`) - `$_SESSION` – bevat gegevens die je wilt onthouden tussen pagina's - `$_FILES` – bevat geüploade bestanden #### 🔑 Associatieve arrays Een associatieve array is een array met 'sleutels' in plaats van indexnummers: ```php $persoon = [ "naam" => "Ali", "leeftijd" => 19, "email" => "ali@example.com" ]; echo $persoon["naam"]; // Toont: Ali ``` Formulieren leveren ook associatieve arrays op via `$_POST`: ```php echo $_POST["naam"]; ``` ### 🛠️ Opdracht 1 – formulier\_superglobals.php 1. Maak een formulier met de volgende velden: - Naam - E-mail - Bericht 2. Verwerk de invoer met `$_POST` en sla de gegevens op in een associatieve array: ```php $data = [ "naam" => $_POST["naam"], "email" => $_POST["email"], "bericht" => $_POST["bericht"] ]; ``` 3. Toon de waarden netjes op het scherm met `htmlspecialchars()`. 4. Gebruik eventueel `print_r($data)` om de hele array te tonen voor debugging. ### 🧠 Reflectie - Wat is het verschil tussen een normale array en een associatieve array? - Waarom is `$_POST` eigenlijk een associatieve array? - Wanneer zou je liever `$_GET` gebruiken in plaats van `$_POST`? ### 📤 Inleveren - Lever je bestand `formulier_superglobals.php` in (.php). - Lever een reflectiedocument in (.txt of .pdf) met je antwoorden. ## 6 Sessies en Cookies ### **🎯** Leerdoelen - Je begrijpt wat sessies en cookies zijn. - Je kunt sessies gebruiken om gegevens tijdelijk op te slaan voor een gebruiker. - Je kunt cookies aanmaken en uitlezen met PHP. - Je kunt de juiste techniek kiezen om gebruikersgegevens te bewaren. ### 💡 Uitleg #### 🧠 Wat is een sessie? Een sessie is een manier om informatie te onthouden zolang een gebruiker actief is op de website. Bijvoorbeeld: je logt in en blijft ingelogd op alle pagina’s. Een sessie start je met: ```php ``` Je kunt sessiegegevens gebruiken zolang de browser open is (of tot je ze verwijdert met `session_destroy()`). #### 🍪 Wat is een cookie? Een cookie wordt opgeslagen in de browser van de gebruiker, meestal voor een langere tijd. Handig om voorkeuren of gebruikersgegevens te onthouden tussen bezoeken. ```php // Cookie instellen setcookie("taal", "NL", time() + 3600); // 1 uur geldig // Cookie uitlezen echo $_COOKIE["taal"]; ``` #### 📌 Verschillen tussen sessies en cookiesKenmerk | Sessie | Cookie |
---|---|---|
Opslaglocatie | Server | Browser van gebruiker |
Levensduur | Tijdelijk (tot de browser sluit of je het wist) | In te stellen (bijv. 1 uur, 30 dagen) |
Toepassing | Ingelogde gebruiker, winkelmandje | Voorkeuren, laatst bezochte pagina |
" . trim($regel) . "
"; } ``` ### 🛠️ Opdracht 1 – gastenboek\_met\_bestand.php 1. Maak een formulier waarin iemand een naam en een bericht kan achterlaten. 2. Als de gebruiker op "Verstuur" klikt: - Sla het bericht op in een bestand `gastenboek.txt`. - Voeg ook datum/tijd toe met `date()`. 3. Toon de laatste 5 berichten onder het formulier. 4. Zorg dat de HTML veilig blijft via `htmlspecialchars()`. #### Extra (optioneel) - Laat de berichten in omgekeerde volgorde zien (nieuwste bovenaan). - Sla de data op in JSON-formaat i.p.v. tekstregels. ### 🧠 Reflectie - Wat zijn de voordelen van een tekstbestand boven een database? - Wanneer loop je tegen de beperkingen aan? - Hoe zou je dit uitbreiden zodat iemand ook berichten kan verwijderen? ### 📤 Inleveren - Lever je bestand `gastenboek_met_bestand.php` in (.php). - Lever het bestand `gastenboek.txt` mee met minimaal 3 testberichten. - Lever een reflectie in (.txt of .pdf). ## 8 Inleiding tot PHP Include-logica en Templatebestanden ### **🎯** Leerdoelen - Je begrijpt het nut van het opdelen van HTML/PHP-bestanden in herbruikbare componenten. - Je kunt `include` en `require` gebruiken om logica en opmaak te splitsen. - Je kunt een eenvoudige template-structuur bouwen (header, content, footer). ### 💡 Uitleg #### 🧱 Waarom opdelen in componenten? Als je meerdere pagina’s hebt met dezelfde header of footer, is het onhandig om die steeds te kopiëren. Daarom gebruik je `include()` of `require()` om ze in te laden. ```phpWelkom $naam
"; } ?> ``` ### 🛠️ Opdracht 1 – formuliercontrole 1. Maak een formulier met de volgende velden: - Naam (verplicht) - Email (verplicht, geldig e-mailadres) - Bericht (optioneel, max. 200 tekens) 2. Controleer de invoer met PHP: - Laat foutmeldingen zien als iets ontbreekt of fout is. - Gebruik `filter_var()` om het e-mailadres te controleren. - Gebruik `htmlspecialchars()` om veilige output te tonen. 3. Toon een nette samenvatting van de ingevulde gegevens als alles goed is. #### Extra (optioneel) - Voeg visuele validatie toe met CSS-klassen (bijv. rode rand bij fout). - Voeg een resetknop toe aan het formulier. ### 🧠 Reflectie - Wat gebeurt er als je geen server-side validatie gebruikt? - Wat is het verschil tussen validatie en het veilig maken van input? - Hoe zou je dit formulier uitbreiden voor een login- of registratiepagina? ### 📤 Inleveren - Lever je formulierpagina in als `formulier_validatie.php`. - Lever een reflectiedocument in (.txt of .pdf).