Wat leer je deze week?

In periode 3 kon je al meerdere items uit de database ophalen en tonen op een pagina.

Deze week ga je een stap verder: je haalt één specifiek item op.

Dat heb je nodig voor een editpagina, want voordat je iets kunt aanpassen, moet je eerst weten welk item je gaat aanpassen.

Kernconcepten (in normale mensentaal)

Een editpagina werkt eigenlijk als een formulier dat al is ingevuld.

Stel: je hebt een lijst met huiswerkopdrachten.

Als je op “bewerken” klikt bij één opdracht, moet PHP weten welke opdracht je bedoelt. Daarom geef je het id van dat item mee in de URL.

Bijvoorbeeld:

edit.php?id=3

PHP leest dat id, zoekt in de database naar item 3 en vult daarna het formulier met de bestaande data.

De flow is dus:

klik op bewerken
↓
id gaat mee in de URL
↓
PHP leest het id uit met $_GET
↓
database zoekt het juiste item
↓
formulier wordt ingevuld met bestaande data

Wat moet je kennen?

1. GET parameters uitlezen

Uitleg
GET-data staat in de URL.
Je gebruikt dit bijvoorbeeld om een id mee te sturen naar een detailpagina of editpagina.

Wat moet je kennen

  • $_GET
  • query string met ?id=3
  • veilig uitlezen met ?? ''

Voorbeeld

URL:

edit.php?id=3

PHP:

$id = $_GET['id'] ?? '';

echo $id;

Onthoud: GET-data is zichtbaar in de URL. Gebruik het dus niet voor wachtwoorden of geheime informatie.

2. Een editlink maken

Uitleg
Op je overzichtspagina toon je meerdere items.
Bij elk item maak je een link naar de editpagina en stuur je het juiste id mee.

Wat moet je kennen

  • link maken met <a>
  • id uit een database-array gebruiken
  • ?id=... toevoegen aan de URL

Voorbeeld

<a href="edit.php?id=<?= $item['id'] ?>">
    Bewerken
</a>

Onthoud: Zonder id weet de editpagina niet welk item aangepast moet worden.

3. Eén item ophalen met SELECT WHERE

Uitleg
In periode 3 gebruikte je SELECT om meerdere items op te halen.
Nu wil je één specifiek item ophalen. Daarvoor gebruik je WHERE.

Wat moet je kennen

  • SELECT * FROM
  • WHERE id = ?
  • prepare()
  • execute()
  • fetch(PDO::FETCH_ASSOC)

Voorbeeld

<?php
require 'includes/db.php';

$id = $_GET['id'] ?? '';

$stmt = $pdo->prepare("SELECT * FROM items WHERE id = ?");
$stmt->execute([$id]);

$item = $stmt->fetch(PDO::FETCH_ASSOC);
?>

Onthoud: WHERE filtert je query. Je zegt eigenlijk: geef mij alleen de rij waarvan het id klopt.

4. fetch() gebruiken voor één resultaat

Uitleg
Als je meerdere items ophaalt, gebruik je fetchAll().
Als je één item ophaalt, gebruik je fetch().

Wat moet je kennen

  • fetch(PDO::FETCH_ASSOC)
  • verschil tussen één rij en meerdere rijen
  • associative array uitlezen

Voorbeeld

$item = $stmt->fetch(PDO::FETCH_ASSOC);

echo $item['title'];

Onthoud: fetch() geeft één associative array terug. Je hoeft hier dus geen foreach voor te gebruiken.

5. Een formulier vooraf invullen

Uitleg
Op een editpagina wil je dat de bestaande data alvast in het formulier staat.
Dat doe je met het value attribuut.

Wat moet je kennen

  • value=""
  • PHP shorthand <?= ?>
  • data uit een associative array tonen

Voorbeeld

<input 
    type="text" 
    name="title" 
    value="<?= $item['title'] ?>"
>

Onthoud: Je haalt data uit de database en zet die terug in het formulier.

Veelgemaakte fouten (met voorbeelden)

1. Het id niet meesturen in de link

Als je geen id meestuurt, weet edit.php niet welk item opgehaald moet worden.

Fout

<a href="edit.php">Bewerken</a>

Beter

<a href="edit.php?id=<?= $item['id'] ?>">
    Bewerken
</a>

2. $_GET['id'] gebruiken zonder fallback

Als id niet in de URL staat, krijg je een warning.

Fout

$id = $_GET['id'];

Beter

$id = $_GET['id'] ?? '';

3. Alle items ophalen in plaats van één item

Voor een editpagina wil je niet de hele tabel ophalen.

Je wil alleen het item dat bij het id hoort.

Fout

$stmt = $pdo->query("SELECT * FROM items");

Beter

$stmt = $pdo->prepare("SELECT * FROM items WHERE id = ?");
$stmt->execute([$id]);

4. fetchAll() gebruiken voor één item

fetchAll() geeft een lijst met resultaten terug.

Voor een editpagina wil je juist één resultaat.

Fout

$item = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo $item['title'];

Beter

$item = $stmt->fetch(PDO::FETCH_ASSOC);

echo $item['title'];

5. Vergeten om bestaande data in het formulier te tonen

Dan ziet de gebruiker een leeg formulier en weet die niet wat er aangepast wordt.

Fout

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

Beter

<input 
    type="text" 
    name="title" 
    value="<?= $item['title'] ?>"
>

Snippets

ID uitlezen uit de URL

$id = $_GET['id'] ?? '';

Editlink maken

<a href="edit.php?id=<?= $item['id'] ?>">
    Bewerken
</a>

Eén item ophalen

$stmt = $pdo->prepare("SELECT * FROM items WHERE id = ?");
$stmt->execute([$id]);

$item = $stmt->fetch(PDO::FETCH_ASSOC);

Data tonen in een formulier

<input 
    type="text" 
    name="title" 
    value="<?= $item['title'] ?>"
>

Controleren of er een item gevonden is

if (!$item) {
    echo "Item niet gevonden.";
    exit;
}

Video (coming soon)

Video komt eraan

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