CRUD - Challenge
8 CRUD Challenge – Te laat meldingen (AI-proof editie)
🎯 Leerdoelen
- Je kunt zelfstandig een volledige CRUD-toepassing bouwen met
PDOPHP enPHP.PDO. - Je
pastkuntinvoercontrolegebruikersinvoer controleren engebruikersinteractiefoutmeldingentoe in formulieren.afhandelen. - Je begrijpt
dewaaromrolveilige databasequery's belangrijk zijn. - Je kunt je eigen ontwerpkeuzes uitleggen en verdedigen.
- Je kunt AI gebruiken als hulpmiddel zonder afhankelijk te worden van
prepare(),execute(), en veilige query’s.AI.
💡 Uitleg
InJe deze challenge bouw jebouwt een complete toepassingwebapplicatie waarin te laat meldingen van studenten worden bijgehouden.geregistreerd. JeDe gebruiktapplicatie allesmoet watgegevens je geleerd hebt over forms, PDO, databaseverwerking en CRUD-operaties.
Het eindresultaat is een overzichtspagina met alle meldingen, waarin je nieuwe meldingen kuntkunnen toevoegen, bestaande meldingen kunttonen, wijzigen en meldingen kunt verwijderen (met bevestiging).verwijderen.
Voorbeeld
Je
Bekijkmag AI gebruiken tijdens deze opdracht. De beoordeling gaat echter niet alleen over het voorbeeldeindresultaat, op:maar stampwerk.nl.ook Probeerover jouw begrip van de knop 'Weer eentje te laat' en kijk wat er gebeurt.code.
DeTijdens bedoelingde isbeoordeling datkan een docent willekeurige vragen stellen over jouw code. Kun je eenniet CRUDuitleggen gaathoe maken.jouw Watoplossing iswerkt, eendan CRUD?kunnen Datpunten leggen we zo uit. Eerste het voorbeeld, dat kan je vinden op:
vervallen.
Wat is een CRUD?
CRUD staat voor Create, Read, Update en Delete.voor:

- Create → gegevens toevoegen
- Read → gegevens bekijken
- Update → gegevens wijzigen
- Delete → gegevens verwijderen
Deze vier functiesonderdelen zijnvormen samen de basisfunctiesbasis van veel webapplicaties.
🛠️ Opdracht
Gegevens die je opmoet een tabel uit de database kan uitvoeren. Stel je hebt een tabel student, je kunt een student toevoegen (Create), je kunt een overzicht krijgen van studenten (Read), je kunt de gegevens van een student aanpassen (Update) en als laatste kun je een student ook weer verwijderen.
De challenge is dat jij een CRUD gaat maken voor te laat meldingen. Maak daarvoor eerst een tabel in de database waarin je te laat meldingen kan registreren.
Als je naar het voorbeeld kijkt dan zie je dat je van een te laat melding de volgende gegevens wilt vastleggen:
naamNaam van de studentklasKlasaantalAantal minuten te laatde redenReden vanhette laatkomen.komen
Verplicht extra veld
Bedenk zelf minimaal één extra veld dat volgens jou nuttig is.
Voorbeelden:
- Datum
- Docent
- Lokaal
- Type melding
- Herhaald te laat
Je moet tijdens de beoordeling kunnen uitleggen waarom je dit veld hebt toegevoegd.
🛠️ Stappenplan
Stap 1 – Database maken
- Maak een database en
eentabelmeldingen. - Gebruik de
volgendeverplichtevelden:id(INT, AUTO_INCREMENT, PRIMARY KEY)student(VARCHAR)klas(VARCHAR)minuten(INT)reden(TEXT)
velden. - Voeg
zelfjeenkeleeigen(extra veld toe. - Voeg minimaal
3)5testregelstestrecordstoe via PHPMyAdmin.toe.
Ontwerpvraag
Leg in een tekstbestand van minimaal 100 woorden uit:
- Waarom heb je voor dit extra veld gekozen?
- Welke datatype heb je gekozen?
- Waarom past dit datatype bij jouw veld?
Stap 2 – Read:Read overzicht maken(Overzicht)
- Maak
eenread.phpwaarinoverzichtspagina. - Toon alle
meldingenveldentoontuitindeeen HTML-tabel.database. GebruikToontotaalrequirehet'connection.php'vooraantal meldingen boven dedatabaseverbinding.Gebruikquery()enfetchAll()om gegevens op te halen.tabel.- Voeg
bovenaanknoppen toe voor“toevoegen”toevoegen, wijzigen en“zoeken”. "zoeken" staat er als knop maar hoef je niet uit te werken.verwijderen.
Extra uitdaging
Bedenk zelf één extra functie voor het overzicht.
Voorbeelden:
- Sorteren op naam
- Sorteren op minuten te laat
- Kleurregels voor ernstige meldingen
- Totaal aantal minuten te laat tonen
- Laatste meldingen bovenaan
Je kiest zelf welke functie je bouwt.
Stap 3 – Create:Create melding toevoegen(Toevoegen)
- Maak
create.phpmeteen formulier. Voeg invoervelden toe voor student, klas, minuten en reden.- Sla
degegevens op met eenINSERT-querypreparedviastatement. - Gebruik
prepare()enexecute(). Controleer
Verplichte invoercontrole
geenGeen legeveldenvelden.minutenMinutenismoeteengroterpositiefzijngetaldan
Extra uitdaging (verplicht)
Bedenk zelf nog één extra validatie.
Voorbeeld:
- Klas moet beginnen met "SD"
- Reden moet minimaal 10 tekens bevatten
- Datum mag niet in de toekomst liggen
Stap 4 – Delete: melding verwijderenDelete
- Voeg
opread.phpeenknopverwijderknop“verwijder” toe per rij.toe. LaatVraagdezeeerstverwijzenomnaardelete.php?id=....bevestiging.- Toon
eerst een bevestigingspagina metde gegevens van demelding.melding Voervoordatpasdezenaverwijderdbevestiging deDELETE-query uit.wordt.
Extra uitdaging (verplicht)
Laat op de bevestigingspagina duidelijk zien welke student verwijderd gaat worden.
Voorkom dat een gebruiker zomaar een niet-bestaand ID kan verwijderen.
Stap 5 – Update
Voeg opMaak eenread.phpknop “wijzig” toe per rij.Laat deze verwijzen naarupdate.php?id=....wijzigpagina.- Controleer
op de update paginaof hetid is meeggegeven em of het idID bestaat. OntbreektToon foutmeldingen als hetidIDof is deze niet aanwezig dan laat je een foutmelding zien.ontbreekt.Haal deVul bestaande gegevensopautomatischmet eenSELECT-query.Toon een formulier met ingevulde waarden.in.- Werk de gegevens bij met een
UPDATE-UPDATE-query.
Extra uitdaging (verplicht)
Toon bovenaan de pagina welke melding wordt aangepast.
Bijvoorbeeld:
Melding #17 wijzigen Student: Max Janssen
🔒 Veiligheid
Je moet kunnen uitleggen:
- Waarom
prepare()veiliger is dan een gewone query. - Wat SQL-injection is.
- Waarom invoercontrole belangrijk is.
🤖 AI-verantwoording
Maak een bestand ai-gebruik.txt.
Beschrijf hierin:
- Welke AI-tool(s) je hebt gebruikt.
- Waarvoor je AI hebt gebruikt.
- Welke code je zelf hebt aangepast.
- Welke fout je bent tegengekomen en hoe je die hebt opgelost.
Minimaal 150 woorden.
🧠 ReflectieMondelinge controle
Tijdens de beoordeling kiest de docent willekeurig drie onderdelen uit jouw code.
Je moet kunnen uitleggen:
- Wat
hebde code doet. - Waarom je
geleerddezeoveroplossinghethebtwerken met databases in PHP? Wat ging er goed, en waar had je hulp bij nodig?Wat zou je in een volgend project anders aanpakken?gekozen.- Hoe
zorg je ervoor dat jede databaseveiligerbijblijftbetrokkenbij gebruikersinvoer?is.
📤 Inleveren
EénScreenshotscreenshot van je overzichtspagina (read.php).overzichtspagina.EénScreenshotscreenshot van je invoerpagina (create.php).invoerpagina.EénScreenshotscreenshotwijzigpagina.- SQL-export.
- Alle PHP-
bestanden, SQL-export van de database, en eventuele CSS.bestanden. Een reflectieverslag in .txt of .pdf met de bovenstaande vragen beantwoord.Reflectieverslag.Maak een afspraak met een docent die je uitlegt hoe je code werkt.ai-gebruik.txt.
update.php📊 Puntentelling
Je moet minimaal 81 van de 100 punten halen om deze opdracht succesvol af te ronden.
| Punten | Onderdeel |
|---|---|
| 5 | Read-overzicht |
| 10 | |
| 10 | |
| 5 | Delete inclusief |
| 10 | |
| 10 | |
| 10 | prepare(), execute() |
| 30 | Uitleg code |
Je moet minimaal 90 van de 100 punten halen om de opdracht succesvol af te ronden.