Periode 4 · Week 1
Week 1 – Edit pagina & één item ophalen;
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 eenidmee 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 juisteidmee.
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 jeSELECTom meerdere items op te halen.
Nu wil je één specifiek item ophalen. Daarvoor gebruik jeWHERE.
Wat moet je kennen
SELECT * FROMWHERE 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:
WHEREfiltert 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 jefetchAll().
Als je één item ophaalt, gebruik jefetch().
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 geenforeachvoor 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 hetvalueattribuut.
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.