Wat leer je deze week?

Vorige week kon je al één specifiek item ophalen uit de database.

Deze week maak je jouw editpagina echt werkend: je gaat bestaande data aanpassen met een UPDATE query.

Je leert hoe formulierdata terug naar de database gaat en waarom een WHERE in een UPDATE query super belangrijk is.

Kernconcepten (in normale mensentaal)

Een UPDATE query werkt eigenlijk als “overschrijven”.

Stel: je hebt een huiswerkapp.

Een gebruiker verandert een opdracht van:

Engels leren

naar:

Engels presentatie voorbereiden

Dan wil je niet een nieuw item maken.

Je wil het bestaande item aanpassen.

Daarom gebeurt de flow ongeveer zo:

gebruiker opent editpagina
↓
formulier wordt ingevuld met bestaande data
↓
gebruiker past iets aan
↓
formulier wordt verstuurd met POST
↓
PHP ontvangt de nieuwe data
↓
UPDATE query draait
↓
database slaat wijziging op
↓
redirect terug naar overzicht

Wat moet je kennen?

1. Formulierdata ontvangen met POST

Uitleg
De gebruiker past data aan in een formulier.
Daarna wordt die nieuwe data verstuurd via POST.

Wat moet je kennen

  • $_POST
  • method="POST"
  • veilig uitlezen met ?? ''

Voorbeeld

$title = $_POST['title'] ?? '';

Onthoud: POST gebruik je voor data die iets verandert in je applicatie.

2. Hidden inputs gebruiken

Uitleg
De gebruiker hoeft het id niet te zien, maar PHP heeft het wel nodig om te weten welk item aangepast moet worden.

Daarom gebruik je een hidden input.

Wat moet je kennen

  • type="hidden"
  • id meesturen in een formulier
  • data uit een associative array gebruiken

Voorbeeld

<input 
    type="hidden" 
    name="id" 
    value="<?= $item['id'] ?>"
>

Onthoud: Hidden betekent alleen onzichtbaar in de pagina. De waarde wordt nog steeds meegestuurd.

3. Een UPDATE query schrijven

Uitleg
Met UPDATE pas je bestaande data aan in de database.

Wat moet je kennen

  • UPDATE
  • SET
  • WHERE
  • prepared statements
  • placeholders ?

Voorbeeld

$stmt = $pdo->prepare("
    UPDATE items 
    SET title = ? 
    WHERE id = ?
");

$stmt->execute([$title, $id]);

Onthoud: SET bepaalt wat aangepast wordt. WHERE bepaalt WELKE rij aangepast wordt.

4. Waarom WHERE zo belangrijk is

Uitleg
Zonder WHERE weet de database niet welke rij aangepast moet worden.

Dat betekent dat ALLE rijen aangepast kunnen worden.

Ja. Echt allemaal 😭

Voorbeeld

❌ Zonder WHERE

UPDATE items
SET title = 'Kaasbroodje'

Resultaat:

ALLE titels worden:
Kaasbroodje

✅ Met WHERE

UPDATE items
SET title = 'Kaasbroodje'
WHERE id = 3

Resultaat:

Alleen item 3 verandert.

Onthoud: Een UPDATE zonder WHERE is gevaarlijk.

5. Redirect gebruiken na UPDATE

Uitleg
Na een succesvolle update stuur je de gebruiker meestal terug naar het overzicht.

Wat moet je kennen

  • header()
  • exit
  • redirect flow

Voorbeeld

header('Location: index.php');
exit;

Onthoud: Zonder redirect kan een refresh dezelfde update opnieuw uitvoeren.

Veelgemaakte fouten (met voorbeelden)

1. WHERE vergeten in de UPDATE query

Dit is waarschijnlijk de gevaarlijkste fout van deze week.

Fout

UPDATE items
SET title = ?

Beter

UPDATE items
SET title = ?
WHERE id = ?

2. Het id niet meesturen in het formulier

Dan weet PHP niet welk item aangepast moet worden.

Fout

<input type="text" name="title">

Beter

<input 
    type="hidden" 
    name="id" 
    value="<?= $item['id'] ?>"
>

3. POST gebruiken zonder fallback

Als een veld ontbreekt, krijg je warnings.

Fout

$title = $_POST['title'];

Beter

$title = $_POST['title'] ?? '';

4. De placeholders in verkeerde volgorde zetten

De volgorde van de array moet overeenkomen met de query.

Fout

$stmt->execute([$id, $title]);

Beter

$stmt->execute([$title, $id]);

5. Geen redirect gebruiken na UPDATE

Dan kan een refresh dezelfde query opnieuw uitvoeren.

Fout

echo "Opgeslagen!";

Beter

header('Location: index.php');
exit;

Snippets

POST-data uitlezen

$title = $_POST['title'] ?? '';

Hidden input maken

<input 
    type="hidden" 
    name="id" 
    value="<?= $item['id'] ?>"
>

UPDATE query uitvoeren

$stmt = $pdo->prepare("
    UPDATE items
    SET title = ?
    WHERE id = ?
");

$stmt->execute([$title, $id]);

Redirect gebruiken

header('Location: index.php');
exit;

Controleren of formulier verstuurd is

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

}

Video (coming soon)

Video komt eraan

Zodra de uitlegvideo beschikbaar is, wordt alleen de YouTube-ID vervangen.