# New Page

## 8 CRUD Challenge – Te laat meldingen

[datasource](https://www.roc.ovh/books/software-development-2025/page/crud-challenge)

### 🎯 Leerdoelen

- Je kunt een volledige CRUD-toepassing bouwen met PDO en PHP.
- Je past invoercontrole en gebruikersinteractie toe in formulieren.
- Je begrijpt en gebruikt `prepare()` en `execute()` voor veilige query’s.

### 💡 Uitleg

In deze challenge bouw je een complete toepassing waarin te laat meldingen van studenten worden bijgehouden. Je gebruikt alles wat je hebt geleerd over formulieren, PDO, databaseverwerking en CRUD-operaties.

Het eindresultaat is een overzichtspagina met alle meldingen. Je kunt nieuwe meldingen toevoegen, bestaande meldingen aanpassen en meldingen verwijderen (met bevestiging).

#### Voorbeeld

Bekijk het voorbeeld op: [https://stampwerk.nl](https://stampwerk.nl). Probeer de knop *'Weer eentje te laat'* en kijk wat er gebeurt.

### Wat is een CRUD?

CRUD staat voor Create, Read, Update en Delete.

Dit zijn de vier basisbewerkingen op een database:

- Create: gegevens toevoegen
- Read: gegevens ophalen en tonen
- Update: gegevens aanpassen
- Delete: gegevens verwijderen

In deze opdracht maak je een CRUD-toepassing voor te laat meldingen. Je slaat per melding de volgende gegevens op:

- naam van de student
- klas
- aantal minuten te laat
- reden van het te laat komen

### 🛠️ Stappenplan

#### Stap 1 – Database maken

- Maak een database en een tabel `meldingen` met de volgende velden: 
    - `id` (INT, AUTO\_INCREMENT, PRIMARY KEY)
    - `student` (VARCHAR)
    - `klas` (VARCHAR)
    - `minuten` (INT)
    - `reden` (TEXT)
- Voeg zelf enkele testregels toe via PHPMyAdmin.

#### Stap 2 – Read: overzicht maken

- Maak `read.php` waarin je alle meldingen toont in een HTML-tabel.
- Gebruik `require 'connection.php'` voor de databaseverbinding.
- Gebruik `query()` en `fetchAll()` om gegevens op te halen.
- Voeg bovenaan knoppen toe voor “toevoegen” en “zoeken” (optioneel).

#### Stap 3 – Create: melding toevoegen

- Maak `create.php` met een formulier.
- Voeg invoervelden toe voor student, klas, minuten en reden.
- Sla de gegevens op met een `INSERT`-query via `prepare()` en `execute()`.
- Controleer invoer: 
    - geen lege velden
    - minuten is een positief getal
- Toon een foutmelding bij ongeldige invoer en een succesmelding bij correcte invoer.

#### Stap 4 – Delete: melding verwijderen

- Voeg op `read.php` een knop “verwijder” toe per rij.
- Laat deze verwijzen naar `delete.php?id=...`.
- Toon eerst een bevestigingspagina met de gegevens van de melding.
- Voer pas na bevestiging de `DELETE`-query uit.

#### Stap 5 – Update

- Voeg op `read.php` een knop “wijzig” toe per rij.
- Laat deze verwijzen naar `update.php?id=...`.
- Haal de bestaande gegevens op met een `SELECT`-query.
- Toon een formulier met ingevulde waarden.
- Werk de gegevens bij met een `UPDATE`-query.

### 🧠 Reflectie

- Wat heb je geleerd over het werken met databases in PHP?
- Wat ging goed en waar liep je tegenaan?
- Wat zou je de volgende keer anders aanpakken?
- Hoe zorg je voor veilige verwerking van gebruikersinvoer?

### 📤 Inleveren

- Screenshot van je overzichtspagina (`read.php`).
- Screenshot van je invoerpagina (`create.php`).
- Screenshot van je wijzigpagina (`update.php`).
- Alle PHP-bestanden, SQL-export en eventuele CSS.
- Een reflectieverslag (.txt of .pdf).
- Wees voorbereid om je code mondeling toe te lichten.

## 📊 Puntentelling

Je moet minimaal **81 van de 100 punten** halen om te slagen.

<table border="1" id="bkmrk-punten-onderdeel-10-" style="border-collapse: collapse; width: 100%;"><thead><tr><th>Punten</th><th>Onderdeel</th></tr></thead><tbody><tr><td>10</td><td>**Database**: juiste tabel, velden en datatypes.</td></tr><tr><td>10</td><td>**Read**: overzicht werkt correct.</td></tr><tr><td>10</td><td>**Layout**: duidelijke en verzorgde opmaak.</td></tr><tr><td>20</td><td>**Create**: toevoegen werkt inclusief validatie.</td></tr><tr><td>10</td><td>**Validatie**: ongeldige invoer wordt afgehandeld.</td></tr><tr><td>10</td><td>**Delete**: verwijderen werkt met bevestiging.</td></tr><tr><td>20</td><td>**Update**: aanpassen werkt correct.</td></tr><tr><td>10</td><td>**Codekwaliteit &amp; veiligheid**: gebruik van prepared statements en nette structuur.</td></tr></tbody></table>