Week 6 – INSERT & Redirect (PRG);

In week 6 voeg je data toe aan je database.
Je leert veilig INSERT-queries uitvoeren en dubbele invoer voorkomen met een redirect.

Wat moet je kennen (samenvatting)

  • prepare() gebruiken
  • execute() uitvoeren
  • Named placeholders (:title)
  • Waarom prepared statements veilig zijn
  • Redirect na POST
  • header("Location: ...")
  • exit; na header

1. Prepared statements (veilig INSERT)

Uitleg
Je plaatst nooit variabelen direct in je SQL-string.
Met prepared statements scheid je SQL en data. Dat voorkomt SQL-injectie.

Wat moet je kennen

  • $pdo->prepare()
  • $stmt->execute()
  • :placeholder
  • Associatieve array meegeven aan execute

Voorbeeld

$title = trim($_POST['title'] ?? '');

$stmt = $pdo->prepare("INSERT INTO items (title) VALUES (:title)");
$stmt->execute([
    'title' => $title
]);
Onthoud:

SQL en data blijven gescheiden.

2. Waarom geen variabelen direct in SQL?

Uitleg
Als je variabelen direct in je query zet, kan een gebruiker je query manipuleren.

Fout voorbeeld

$pdo->query("INSERT INTO items (title) VALUES ('$title')");

Goed voorbeeld

$stmt = $pdo->prepare("INSERT INTO items (title) VALUES (:title)");
$stmt->execute(['title' => $title]);

3. Redirect na POST (PRG pattern)

Uitleg
Na een POST-request redirect je naar een andere pagina.
Zo voorkom je dat een refresh opnieuw een INSERT uitvoert.

Wat moet je kennen

  • header("Location: index.php")
  • exit;
  • POST → Redirect → GET

Voorbeeld

header("Location: index.php");
exit;
Onthoud:

POST → INSERT → redirect → klaar.

Veelgemaakte fouten (kort)

1. Geen prepared statement gebruiken

❌ Variabele direct in SQL-string zetten

✅ Gebruik altijd prepare() en execute()

2. Geen redirect gebruiken

❌ Refresh = dubbele insert

✅ Altijd redirect na succesvolle INSERT

3. exit vergeten na header()

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

Video

Uitleg volgt hier.