Stappenplan
In de router.php
$route->get('items/{id}/edit', 'controllers/items-edit.php'); $route->put('items/{id}', 'controllers/items-update.php');
In controller items-edit.php
<?php $db = new Database(); view('items-edit', [ 'item' => $db->query("SELECT * FROM items WHERE id=?", [$_GET['id']])->fetch() ]);
In view items-edit.view.php
Zonder validatie
<?php view("parts/header", ['title' => 'item toevoegen']); view("parts/navigatie-menu"); ?> <h1 class="text-3xl my-4">Item <?= htmlspecialchars($item['naam']) ?> wijzigen</h1> <form action="/items/<?= $item['id'] ?>" method="post"> <?= csrf(); ?> <?= method_put() ?> <label for="naam">Naam</label><br> <input type="text" name="naam" id="naam" placeholder="naam" value="<?= htmlspecialchars($item['naam']) ?>"><br> <label for="beschrijving">Beschrijving</label><br> <textarea name="beschrijving" id="beschrijving" cols="30" rows="3" placeholder="beschrijving"><?= htmlspecialchars($item['beschrijving']) ?></textarea> <br> <label for="prijs">Prijs</label><br> <input type="number" step="0.01" name="prijs" id="prijs" placeholder="prijs" value="<?= htmlspecialchars($item['prijs']) ?>"> <br> <input type="submit" value="Wijzigen" class="border b-gray-600 rounded py-1 px-2 hover:bg-gray-100 cursor-pointer"> <?php view("parts/footer");
Met validatie
<?php view("parts/header", ['title' => 'item toevoegen']); view("parts/navigatie-menu"); ?> <h1 class="text-3xl my-4">Item <?= htmlspecialchars($item['naam']) ?> wijzigen</h1> <form action="/items/<?= $item['id'] ?>" method="post"> <?= csrf(); ?> <?= method_put() ?> <label for="naam">Naam</label><br> <input type="text" name="naam" id="naam" placeholder="naam" value="<?= htmlspecialchars($item['naam']) ?>"><br> <?php if (isset($errors['naam'])): ?> <p class="text-red-500 text-sm my-2"><?= $errors['naam'] ?></p> <?php endif; ?> <label for="beschrijving">Beschrijving</label><br> <textarea name="beschrijving" id="beschrijving" cols="30" rows="3" placeholder="beschrijving"><?= htmlspecialchars($item['beschrijving']) ?></textarea> <br> <?php if (isset($errors['beschrijving'])): ?> <p class="text-red-500 text-sm my-2"><?= $errors['beschrijving'] ?></p> <?php endif; ?> <label for="prijs">Prijs</label><br> <input type="number" step="0.01" name="prijs" id="prijs" placeholder="prijs" value="<?= htmlspecialchars($item['prijs']) ?>"> <br> <?php if (isset($errors['prijs'])): ?> <p class="text-red-500 text-sm my-2"><?= $errors['prijs'] ?></p> <?php endif; ?> <input type="submit" value="Wijzigen" class="border b-gray-600 rounded py-1 px-2 hover:bg-gray-100 cursor-pointer"> <?php view("parts/footer");
In controller items-update.php
<?php //validatie van de gegevens require "../src/Validator.php"; $errors = []; //lege array voor de foutmeldingen if (!Validator::required($_POST['naam'])) { $errors['naam'] = "Naam is verplicht"; } if (!Validator::length($_POST['naam'], 0, 50)) { $errors['naam'] = "Naam mag niet langer zijn dan 50 tekens"; } if (!Validator::between($_POST['prijs'], 0.01, 1000000)) { $errors['naam'] = "De prijs moet tussen 0,01 en 1.000.000 liggen"; } //voor alle validatie regels zie cheat-sheet //indien niet oké terugsturen naar de create pagina met foutmeldingen if (!empty($errors)) { view('items-edit', [ 'errors' => $errors, 'item' => $_POST, ]); exit(); } //wijzigen doorvoeren $db = new Database(); $db->query("UPDATE items SET naam = :naam, beschrijving = :beschrijving, prijs = :prijs WHERE id = :id", [ 'naam' => $_POST['naam'], 'beschrijving' => $_POST['beschrijving'], 'prijs' => $_POST['prijs'], 'id' => $_POST['id'] ]); flash("Item " . htmlspecialchars($_POST['naam']) . " is gewijzigd"); //terugsturen naar de detail pagina van het item header("location: /items/" . $_POST['id']);
Test wijzigen ga naar http://localhost/items/1/edit