Skip to main content

PHP 1

1 WelkomstberichtFoutafhandeling meten variabelenBasis Debugging in PHP

๐ŸŽฏ

WatLeerdoelen

ga
    je leren?

  • Je leertweet hoewat jede variabelenverschillende typen PHP-fouten zijn (Errors, Warnings, Notices).
  • Je kunt foutmeldingen in PHP interpreteren.
  • Je kunt gebruikenfoutweergave ominstellen met error_reporting() en ini_set().
  • Je kunt basisprincipes van foutafhandeling toepassen (zoals isset(), empty(), file_exists()).
  • Je gebruikt debuggingtechnieken zoals echo, print_r() en var_dump().
  • ๐Ÿ’ก Uitleg

    ๐Ÿ“Œ Soorten fouten in PHP

    • Parse error: fout in de code (bijvoorbeeld vergeten ; of haakje).
    • Fatal error: code probeert iets wat niet kan, bijvoorbeeld een persoonlijkefunctie begroetingdie teniet maken.

      bestaat.
    • Daarbij

    • Warning: leerfoutmelding, jemaar de code gaat door.
    • Notice: melding van iets wat hetwaarschijnlijk verschilfout is tussen(bijv. hetniet overschrijvenbestaande vanvariabele).
    • een
    variabele

    โš™๏ธ enFoutmeldingen het aanpassen van de waarde.

    Je gaat AI gebruiken om te controlerentonen of jouw code correct is, en leert kritisch kijken naar AI-gegenereerde oplossingen.

    Context

    Je helpt een buurtvereniging met hun nieuwe website. Ze willen bezoekers welkom heten op een persoonlijke manier. Jij bouwt een testversie waarin de naam en leeftijd hardcoded zijn in PHP.

    Stap 1: Bouw je PHP-script

    verbergen
    <?php
    $mijnNaam// =Toon alle fouten
    ini_set("Random"display_errors", 1);
    $mijnLeeftijd = 23;
    
    $mijnNaam = "Foobar";
    $mijnLeeftijd = $mijnLeeftijd + 1;
    
    echo "Welkom, ik heet $mijnNaam en ik ben $mijnLeeftijd jaar oud."error_reporting(E_ALL);
    ?>

    Wat

    โš ๏ธ valtOp een live website wil je op?foutmeldingen verbergen voor gebruikers. Gebruik dan:

    ini_set("display_errors", 0);

    ๐Ÿ” Veelgebruikte foutafhandelingstechnieken

      • Inisset($variabele) PHPโ€“ begintcontroleert elkeof een variabele metbestaat.
      • empty($variabele) โ€“ controleert of een $.variabele leeg is.
      • Infile_exists("bestand.txt") PHPโ€“ sluitcontroleert je elke commando af metof een ;bestand bestaat.
      • $mijnNaamdie("Foutmelding") =of "Random";exit() stopt de waarde "Random" in de variabele $mijnNaam
      • $mijnLeeftijd = 23;โ€“ stopt het getalscript inbij een variabeleernstige $mijnLeeftijdfout.

      ๐Ÿ› ๏ธ Debuggen zonder debugger

      • echo โ€“ handig om waardes snel te tonen.
      • Letprint_r($array) opโ€“ dattoont jede getalleninhoud zondervan ""een enarray stringsof object.
      • var_dump($variabele) โ€“ toont type + waarde (=woorden)ook handig bij fouten met "" moet beschrijven,getallen).

    Vraag: Wat denk je dat dit afdrukt?

    Denk eerst na zonder uit te voeren. Schrijf je verwachting op, en test het daarna in je browser.

    Tip: de code wordt regel-voor-regel van boven naar beneden uitgevoerd.

Stap๐Ÿ› ๏ธ 2:Opdracht Reflecteer1 โ€“ Debugging oefenen

1. Wat is de waarde van $mijnNaam direct na regel 3?

Antwoord: ....

2. Wat is de waarde van $mijnLeeftijd direct na regel 4?

Antwoord: ....

3. Wat gebeurt er als je $mijnLeeftijd = $mijnLeeftijd + 1; twee keer uitvoert?

Antwoord: ....

4. Leg uit in je eigen woorden wat het verschil is tussen een waarde toekennen en een waarde verhogen.

Antwoord: ....

Stap 3: Gebruik AI

Gebruik ChatGPT om te vragen:
"

  • Maak een PHP-scriptbestand datgenaamd een naam en leeftijd toont, en volgend jaar wordt de leeftijdkorting.php met 1 verhoogd."

    • Plak de gegenereerde code onder jouw eigen versie.
    • Wat doet deze code hetzelfde? Wat is anders?
    • Wat zou je verbeteren of verduidelijken aan de AI-versie?

    Inleveren

    1. Een PDF-document met jouw voorspellingen, antwoorden op de vragen, en je reflectie over de AI-code

    2 Fouten vinden en oplossen

    Wat ga je leren?

    Je leert fouten herkennen in PHP-code, foutmeldingen lezen en corrigeren.

    Je leert hoe je AI kunt gebruiken om foutcodes te analyseren, maar ook waarom je zelf kritisch moet blijven.

    Context

    Een collega heeft je gevraagd een foutje in zijn PHP-code op te lossen. Hij krijgt een wit scherm of een foutmelding, maar weet niet wat er mis is. Jij gaat deze fout opsporen en uitleggen.

    Stap 1: De foute code

    Plak deze code in PHP05-jouw-naam.php:

    functie:
    <?php
    function berekenKorting($mijnNaam = "Random";prijs, $mijnLeeftijdNukorting) ={
        23;return $mijnLeeftijdVolgendJaarprijs =- $mijnLeeftijdNu+1prijs * $korting / 100;
    }
    echo "ikberekenKorting(100); heet// $mijnnaamFout! enTweede ikparameter ben $mijnLeeftijd jaar oud, volgend jaar ben ik $mijnLeeftijdVolgendJaar oud.";ontbreekt
    ?>

    Stap

  • 2:
  • Voeg Testfoutmeldingen entoe losvia operror_reporting()

    Voerzodat het script uit en kijk naarje de foutmeldingen.waarschuwing Pas de code aan totdat het werkt. Als het gelukt is, zie je een zin zoals:

    ik heet Random en ik ben 23 jaar oud, volgend jaar ben ik 24 oud.

    Stap 3: Reflectievragen

    1. Wat zijn de twee fouten in de oorspronkelijke code?

    Antwoord: ....

    2. Welke foutmelding kreeg je? (Plak eventueel letterlijk in)

    Antwoord: ....

    3. Wat betekenen die foutmeldingen?

    Antwoord: ....

    4. Hoe zou je dit uitleggen aan een klasgenoot?

    Antwoord: ....

    Stap 4: Gebruik AI

    Vraag aan AI: "Wat is er fout aan deze PHP-code en hoe kan ik dit oplossen?"

    <?php
    $mijnNaam = "Random";
    $mijnLeeftijdNu = 23;
    $mijnLeeftijdVolgendJaar = $mijnLeeftijdNu+1
    
    echo "ik heet $mijnnaam en ik ben $mijnLeeftijd jaar oud, volgend jaar ben ik $mijnLeeftijdVolgendJaar oud.";
    ?>
    • Wat zegt AI dat de fouten zijn?ziet.
    • Was dat duidelijk voor jou?
    • Was er iets dat AI nรญet opmerkte, maar jij wel?

    Inleveren

    1. Een PDF-document met een antwoord op de reflectievragen.

    3 Strings en variabelen begrijpen

    Wat ga je leren?

    Je leert hoe je tekst (strings) samenvoegt in PHP met en zonder variabelen.

    Je leert het verschil tussen het gebruiken van variabelen en vaste tekst.

    Je leert AI inzetten om alternatieve manieren te vinden om tekst samen te voegen.

    Context

    Je maakt een stukje code voor een online inschrijfformulier. De gegevens van een nieuwe deelnemer worden opgeslagen in variabelen en daarna op het scherm getoond. Zo krijgt de bezoeker direct een bevestiging te zien, bijvoorbeeld: โ€œWelkom, Ali Gaona!โ€

    Stap 1: Test de basis

    Maak een nieuw bestandGebruik PHP06-jouw-naam.php en plak deze code:

    <?php
    $voornaam = "Alexandra";
    $achternaam = "Gaona";
    
    echo $voornaam . " " . $achternaam;
    echo "Alexandra" . " " . "Gaona";
    ?>

    Vraag: Wat denk je dat dit afdrukt?

    Verwacht je een verschil tussen regel 5 en regel 6? Test het en bekijk de output zorgvuldig.

    Stap 2: Variaties testen

    • Wijzig regel 2 en geef $voornaam jouw eigen naam.
    • Wat gebeurt er met de uitvoer?
    • Verander ook $achternaam. Wat verandert er dan?

    Reflectievragen

    1. Wat is het verschil tussen regel 5 en regel 6?

    Antwoord: ....

    2. Waarom zou je in een echte website liever met variabelen werken?

    Antwoord: ....

    Stap 3: Gebruik AI

    Beantwoord de reflectievragen en vraag AI of jouw antwoorden goed zijn. Als ze niet goed zijn laat AI jouw uitleggen waarom het fout is.

    Inleveren

    1. Word- of PDF-document met een copy van jouw Chat-script.

    4 Strings 2 โ€“ lengte en hoofdletters

    Wat ga je leren?

    Je leert functies gebruiken zoals strlen(isset() en strtoupper(empty() om metde tekstfout (strings)af te werken.

    Je begrijpt het verschil tussen een variabele en een vaste tekst in combinatie met deze functies.

    Je leert AI inzetten om alternatieve manieren te ontdekken om tekst te manipuleren.

    Context

    Je werkt mee aan een formulier voor een sportclub. De namen van deelnemers worden verwerkt, en het systeem controleert automatisch of de naam lang genoeg is en zet hem om in hoofdletters voor op een badge. Jij maakt een testversie van dit systeem.

    Stap 1: De basiscode

    Maak een bestand PHP07-jouw-naam.php en plak deze code:

    <?php
    $voornaam = "Ali";
    $achternaam = "Bakir";
    
    echo "Naam in hoofdletters: " . strtoupper($voornaam . " " . $achternaam) . "<br>";
    echo "Aantal letters in voornaam: " . strlen($voornaam);
    ?>

    Stap 2: Test en pas aan

    • Verander de voornaam en achternaam naar je eigen naam.vangen.
    • WatTest verandertwat er in de uitvoer?
    • Voeg een extra <br> toe voor betere opmaak (zoals hierboven al verwerkt).

    Reflectievragen

    1. Wat doet de functie strtoupper() precies?

    Antwoord: ....

    2. Wat geeft strlen($voornaam) als resultaat als je voornaam 'Ali' is?

    Antwoord: ....

    3. Wat gebeurt er als je een spatievariabele toevoegtgebruikt aandie hetniet eindebestaat. van de voornaam? Verandert de waarde van

  • Gebruik strlen(var_dump()? Waarom?

    Antwoord: ....

  • Stap 3: Gebruik AI

    Vraag aan ChatGPT: "Hoe kan ik in PHP een naam omzetten naar hoofdletters en deecho lengteom vante dezien voornaamwat meten?"

    je fout doet.
  • ๐Ÿง  Reflectie

    • Wat is het verschil tussen deeen oplossing van AIwarning en jouween eigenfatal code?error?
    • GebruiktWaarom AIis anderehet functieshandig ofom fouten wel te tonen in de ontwikkelfase, maar niet op een anderelive aanpak?website?
    • Welke versiedebuggingtechniek vindvond je duidelijkerhet ofmeest beter leesbaar, en waarom?bruikbaar?

    ๐Ÿ“ค Inleveren

      • PHP07-jouw-naam.Lever het bestand korting.php in.
      • Lever een korte uitleg in (.txt of .pdf) waarin je aangeeft:
        • Welke fout(en) je hebt gevonden
        • Welke techniek je gebruikte om het op te lossen
        • Wat je ervan geleerd hebt

      2 Bestanden en Loggen

      ๐ŸŽฏ Leerdoelen

      • Je kunt bestanden aanmaken, lezen, schrijven en toevoegen met jouw aangepaste codePHP.
      • PDFJe ofweet Word-bestandwanneer methet antwoordenhandig is om gegevens in bestanden op dete reflectievragen en jouw korte AI-vergelijking

    5 Geboortejaar berekenen met PHP

    Wat ga je leren?

    Je leert eenvoudige wiskundige berekeningen uitvoeren met variabelenslaan in PHP.

    Je leert hoe je het huidige jaar kunt gebruiken om af te leiden in welk jaar iemand is geboren.

    Je leert AI inzetten om vergelijkbare berekeningen te controleren en te verbeteren.

    Context

    Je helpt bij het makenplaats van een registratiesysteemdatabase te gebruiken.

  • Je begrijpt wat logbestanden zijn en waarom ze nuttig zijn.
  • Je kunt een eenvoudig logsysteem implementeren dat fouten of gebeurtenissen opslaat.
  • ๐Ÿ’ก Uitleg

    ๐Ÿ“ Waarom bestanden gebruiken?

    Bestanden kunnen handig zijn voor eenvoudige opslag zoals instellingen, bezoekerslogs of tijdelijke data. In kleine projecten is dit vaak eenvoudiger dan een sportkamp.database.

    De

    ๐Ÿ“„ organisatorBestandsfuncties wilin automatischPHP

    het
      geboortejaar
    • file_put_contents("bestand.txt", laten"tekst") zien op basis van de opgegeven leeftijd. Jijโ€“ schrijft eentekst kleinnaar scriptbestand om(overschrijft).
    • dat
    • file_get_contents("bestand.txt") teโ€“ testen.

      leest

      Staphele 1:bestand Basiscode

      in

      Maakรฉรฉn keer.

    • fopen() + fwrite() โ€“ uitgebreidere controle (bijv. toevoegen).
    • file_exists("bestand.txt") โ€“ controleert of bestand bestaat.
    • fclose() โ€“ sluit een bestand (nodig bij PHP08-jouw-naam.phpfopen()).

    ๐Ÿ—’๏ธ Loggen: fouten en plakgebeurtenissen dezebijhouden

    code:

    Een logbestand houdt bij wat er gebeurt in een script. Bijvoorbeeld foutmeldingen of bezoekersactiviteit.

    Voorbeeld โ€“ logregel opslaan:

    <?php
    $leeftijdmelding = 17;"[" . date("Y-m-d H:i:s") . "] Foutmelding\n";
    file_put_contents("error.log", $huidigJaarmelding, = 2025;
    
    $geboortejaar = $huidigJaar - $leeftijd;
    
    echo "Je bent ongeveer geboren in het jaar $geboortejaar."FILE_APPEND);
    ?>

    FILE_APPEND zorgt dat de nieuwe regel onderaan toegevoegd wordt in plaats van het bestand te overschrijven.

    Stap๐Ÿ› ๏ธ 2:Opdracht Variaties1 testenโ€“ bezoekersteller.php

    1. Maak een nieuw bestand bezoekersteller.php.
    2. Laat het script een teller bijhouden in teller.txt:
      • Bestaat het bestand nog niet? Begin bij 1.
      • Zo niet? Lees het getal in, verhoog met 1, en schrijf het terug.
    3. Toon het aantal bezoeken op het scherm.

    ๐Ÿ› ๏ธ Opdracht 2 โ€“ gastenboek.php (uitbreiding)

    1. Maak een script waarin een gebruiker een bericht kan achterlaten via een formulier.
    2. Sla elk bericht op in gastenboek.txt met datum/tijd.
    3. Toon de laatste 5 berichten boven het formulier.
    4. Gebruik htmlspecialchars() om invoer veilig weer te geven.

    ๐Ÿง  Reflectie

    • VeranderWat zijn de waardevoor- en nadelen van $leeftijdgegevens naaropslaan jouwin eigeneen leeftijd.bestand ten opzichte van een database?
    • Wat is de uitvoer? Klopt dit met jouw echte geboortejaar?
    • Verander $huidigJaar naar een andere waarde, bijvoorbeeld 2030. Wat gebeurt er dan?

    Reflectievragen

    1. Waarom werkt deze berekening alleen bij benadering?

    Antwoord: ....

    2. Wat zou je moeten toevoegen om rekening te houden met iemands geboortedag (dus of iemand dit jaar al jarig is geweest)?

    Antwoord: ....

    3. Wat gebeurt er als je leeftijdfile_put_contents() gebruikt zonder FILE_APPEND?

  • Waarom is loggen belangrijk, zelfs in kleine projecten?
  • ๐Ÿ“ค Inleveren

    • Lever je bestanden bezoekersteller.php en/of gastenboek.php in.
    • Lever een reflectieverslag in (.txt of .pdf).

    3 Geavanceerde Functies, Abstractie en Modulaire Code

    ๐ŸŽฏ Leerdoelen

    • Je begrijpt waarom functies handig zijn (herbruikbaarheid, leesbaarheid, structuur).
    • Je kunt functies gebruiken om complexe taken te verbergen (abstractie).
    • Je snapt het verschil tussen globale en lokale variabelen (scope).
    • Je kunt functies opslaan in aparte bestanden en deze inladen met include() of require().

    ๐Ÿ’ก Uitleg

    ๐Ÿ” Waarom functies gebruiken?

    • Je hoeft een stuk code maar รฉรฉn keer te schrijven.
    • Je kunt de code op meerdere plekken gebruiken.
    • Je maakt je code overzichtelijker en makkelijker te begrijpen.

    ๐ŸŽฉ Abstractie: de details verbergen

    Een functie kan iets ingewikkelds doen, zonder dat je telkens opnieuw de details hoeft te schrijven.

    function berekenKorting($bedrag, $percentage) {
        return $bedrag - ($bedrag * $percentage / 100);
    }
    echo berekenKorting(100, 10); // โ†’ 90

    Je hoeft niet telkens opnieuw de hele berekening te typen. De functie โ€œverbergtโ€ die logica.

    ๐Ÿ“ฆ Variable scope (bereik van een variabele)

    • Variabelen binnen een functie zijn lokaal: ze bestaan alleen daarbinnen.
    • Variabelen buiten functies zijn globaal.
    • Je kunt met global een globale variabele binnen een functie gebruiken, maar dat is niet altijd wenselijk.
    $x = 5;
    
    function testScope() {
        $x = 10;
        echo $x; // Toont 10, NIET 5
    }
    testScope();
    echo $x; // Toont nog steeds 5

    ๐Ÿงฉ Modulaire code met include()

    Je kunt functies in een apart bestand zetten, bijvoorbeeld utils.php, en die inladen in andere bestanden.

    // Bestand: utils.php
    function toonWelkomstbericht($naam) {
        echo "<p>Welkom, $naam!</p>";
    }
    // 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
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        $naam = trim($_POST["naam"]);
        if (empty($naam)) {
            echo "Vul je naam in.";
        } else {
            echo "Welkom, " . htmlspecialchars($naam);
        }
    }
    ?>

    ๐Ÿ“‹ Simpel formulier

    <form method="post">
      <input type="text" name="naam" placeholder="Je naam">
      <input type="submit" value="Verstuur">
    </form>

    ๐Ÿ› ๏ธ 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. โ€œzeventienโ€<span style="color:red">).
    • invult?
    Werkt

    ๐Ÿง  Reflectie

    • Waarom is het nog?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:

    $persoon = [
        "naam" => "Ali",
        "leeftijd" => 19,
        "email" => "ali@example.com"
    ];
    echo $persoon["naam"]; // Toont: Ali

    Formulieren leveren ook associatieve arrays op via $_POST:

    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:
      $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.

    Antwoord:Een ...sessie start je met:

    <?php
    session_start();
    $_SESSION["naam"] = "Ali";
    echo $_SESSION["naam"];
    ?>

    Je kunt sessiegegevens gebruiken zolang de browser open is (of tot je ze verwijdert met session_destroy()).

    ๐Ÿช Wat is een cookie?

    ๐Ÿ“Œ Verschillen tussen sessies en cookies

    KenmerkSessieCookie
    OpslaglocatieServerBrowser van gebruiker
    LevensduurTijdelijk (tot de browser sluit of je het wist)In te stellen (bijv. 1 uur, 30 dagen)
    ToepassingIngelogde gebruiker, winkelmandjeVoorkeuren, laatst bezochte pagina
    1. Maak een pagina waar de gebruiker zijn naam kan invoeren via een formulier.
    2. Na verzenden:
      • Sla de naam op in een sessie รฉn in een cookie (1 uur).
      • Toon op de pagina: โ€œWelkom terug, [naam]!โ€ als de gebruiker opnieuw langskomt.
    3. Laat ook zien wat er gebeurt als de gebruiker het formulier overslaat.
    4. Gebruik AIsession_start() bovenaan het script.

    Extra (optioneel)

    ๐Ÿง  Reflectie

    Vraag

    • Wanneer kies je voor een sessie? En wanneer voor een cookie?
    • Wat gebeurt er als je session_start() vergeet?
    • Waar moet je op letten bij het gebruik van cookies met privacy?

    ๐Ÿ“ค Inleveren

    • Lever het bestand sessie_en_cookie.php in (.php).
    • Lever een reflectiedocument in (.txt of .pdf) met je antwoorden.

    7 State en Bestandgebaseerde 'Database'

    ๐ŸŽฏ Leerdoelen

    • Je begrijpt het concept van โ€˜stateโ€™ in webapplicaties.
    • Je kunt gebruikersgegevens opslaan in een tekstbestand.
    • Je kunt meerdere records opslaan als gestructureerde regels (bijv. JSON of CSV).
    • Je kunt gegevens uit zoโ€™n bestand inlezen en tonen aan ChatGPT:de "Schrijfgebruiker.

    ๐Ÿ’ก Uitleg

    ๐Ÿง  Wat is โ€˜stateโ€™?

    Een webpagina โ€˜vergeetโ€™ wat er net gebeurd is zodra je hem ververst. Daarom moet je zelf bijhouden wat de toestand (state) is van je applicatie.

    Je kunt dat doen met sessies, cookies of door gegevens op te slaan in PHPeen bestand of database.

    ๐Ÿ“ Bestanden als โ€˜mini-databaseโ€™

    In plaats van een scriptechte database zoals MySQL, kun je voor simpele toepassingen gegevens bewaren in een tekstbestand.

    Bijvoorbeeld: als iemand een bericht achterlaat in een formulier, voeg je dat hettoe geboortejaaraan berekentdata.txt.

    ๐Ÿ“ Structuur

    • Elk bericht komt op basiseen vaneigen leeftijdregel
    • Of je gebruikt een JSON-array, met meerdere objecten erin
    • Of je gebruikt CSV (waardes gescheiden met komma's)
    // Voeg toe aan tekstbestand
    $bericht = htmlspecialchars($_POST["bericht"]);
    file_put_contents("data.txt", $bericht . "\n", FILE_APPEND);
    
    // Lees het bestand
    $inhoud = file("data.txt");
    foreach ($inhoud as $regel) {
        echo "<p>" . trim($regel) . "</p>";
    }
    

    ๐Ÿ› ๏ธ 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 huidigebericht jaar."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 doetzijn de AI-codevoordelen andersvan daneen jouwtekstbestand eigenboven script?een database?
    • ControleertWanneer loop je tegen de AI-versiebeperkingen bijvoorbeeldaan?
    • 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 jaarnut actueelvan 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 viahet onhandig om die steeds te kopiรซren. Daarom gebruik je include() of require() om ze in te laden.

    <?php include 'header.php'; ?>
    
    <h1>Welkom op de homepage</h1>
    
    <?php include 'footer.php'; ?>

    ๐Ÿ” Verschil tussen include en require

    • include(): Laadt het bestand in. Als het bestand niet bestaat, gaat de rest van de pagina gewoon door.
    • require(): Laadt ook het bestand in, maar als het niet bestaat, stopt de pagina met een functiefoutmelding.

    ๐Ÿ“„ Voorbeeldstructuur

    • header.php โ€“ HTML <head>, navigatie
    • footer.php โ€“ Copyright info, afsluitende HTML
    • index.php โ€“ Hoofdpagina die alles samenvoegt

    ๐Ÿ› ๏ธ Opdracht 1 โ€“ templatestructuur

    1. Maak drie bestanden:
      • header.php: bevat een <header> met de titel van je site en een eenvoudige navigatie (bijv. naar home en contact).
      • footer.php: bevat een <footer> met een copyrightregel.
      • index.php: bevat de pagina-inhoud en gebruikt include() om de header en footer in te laden.
    2. Zorg dat alles er netjes uitziet (je mag CSS toevoegen).
    3. Test wat er gebeurt als je include("footer.php") verandert in require("footer.php") en het bestand bestaat niet.

    ๐Ÿง  Reflectie

    • Waarom is het handig om componenten zoals header/footer apart te houden?
    • Wat is het risico als je alles in รฉรฉn bestand zou houden?
    • Wanneer zou je date("Y"require() verkiezen boven include()?

    ๐Ÿ“ค Inleveren

    • ZoLever ja:index.php, begrijpheader.php en footer.php in.
    • Lever een reflectiedocument in (.txt of .pdf) met je hoeantwoorden.
    • dat
    werkt?

    9 LegValidatie heten kortVeiligheid uitbij inFormulieren

    je

    ๐ŸŽฏ eigenLeerdoelen

    woorden.
    • Je begrijpt waarom inputvalidatie belangrijk is.
    • Je kunt formulierinvoer controleren met PHP (server-side).
    • Je kent de risicoโ€™s van onveilige invoer (bijv. XSS, SQL-injectie).
    • Je kunt input veilig maken met functies zoals htmlspecialchars() en filter_var().

    Inleveren๐Ÿ’ก Uitleg

    Waarom valideren?

    Gebruikers kunnen fouten maken (of expres verkeerde dingen invullen). Als je invoer niet controleert, kan dat leiden tot bugs of zelfs beveiligingsproblemen.

    Soorten validatie

    • Client-side: Met HTML of JavaScript (bijv. required, type="email").
    • Server-side: Met PHP (altijd nodig, want je kunt client-side validatie omzeilen).

    Veiligheid: wat kan er misgaan?

    • XSS (Cross-Site Scripting): Als je niet ontsnapte HTML toont, kan iemand scripts injecteren.
    • SQL-injectie: Als je invoer rechtstreeks in een query zet (komt later aan bod).

    Voorbeeld inputcontrole

    <?php
    $naam = "";
    $fout = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (empty($_POST["naam"])) {
        $fout = "Naam is verplicht!";
      } else {
        $naam = htmlspecialchars($_POST["naam"]);
      }
    }
    ?>
    
    <form method="post">
      Naam: <input type="text" name="naam">
      <input type="submit" value="Verstuur">
    </form>
    
    <?php
    if ($fout) {
      echo "<p style='color:red;'>$fout</p>";
    } else if ($naam) {
      echo "<p>Welkom $naam</p>";
    }
    ?>
    

    ๐Ÿ› ๏ธ Opdracht 1 โ€“ formuliercontrole

    1. PHP08-jouw-naam.phpMaak meteen jouw aangepaste code
    2. Een PDF of Word-document met je antwoorden op de reflectievragen en jouw vergelijkingformulier met de AI-oplossingvolgende velden:
      • Naam (verplicht)
      • Email (verplicht, geldig e-mailadres)
      • Bericht (optioneel, max. 200 tekens)
    3. 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.
    4. 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).