Opgave 4

Menu en bestanden aanmaken

Video 01

Voeg toe in /views/parts/navigatie-menu.view.php

<a href="/klanten"
    class="<?= isUri("klanten") ? 'underline ' : '' ?>text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md font-medium">klanten</a>

Maak de bestanden

In onze router.php voegen we een route toe naar klanten.php

$route->get('klanten', "controllers/klanten.php");

Lijst met klanten maken

Video 02

Haal in de controller klanten.php alle klanten op uit de database en geef mee met de view

<?php
$db = new Database();

$result = $db->query("SELECT * FROM klanten ORDER BY achternaam")->fetchAll();

view('klanten', [
    'klanten' => $result
]);

In klanten.view.php maak je een loop door alle klanten heen en schrijft ze op het scherm

<ul>
    <?php foreach ($klanten as $klant): ?>
        <li>
           <?= $klant["voornaam"] . " " . $klant['tussenvoegsel'] . " " . $klant['achternaam'] ?>
        </li>
    <?php endforeach; ?>
</ul>

Lijst met klanten klikbaar maken

Video 04

Voeg een <a href toe zodat een klant klikbaar wordt. Of voeg een button toe achter/onder de klant.
Zorg ervoor dat er wordt verwezen naar /klanten-edit/<klant_id>

<ul>
    <?php foreach ($klanten as $klant): ?>
        <li>
            <a href="/klanten-edit/<?= $klant['id'] ?>" class="text-indigo-600">
                <?= $klant["voornaam"] . " " . $klant['tussenvoegsel'] . " " . $klant['achternaam'] ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>

Route naar edit pagina en controller toevoegen

Video 05

Route toevoegen aan router.php

$route->get('klanten-edit/{id}', "controllers/klanten-edit.php"); 

In de controller klanten-edit.php de klant gegevens ophalen

<?php
$request->validate([
    'id' => 'required'
]);

$db = new Database();

$result = $db->query("SELECT * FROM klanten WHERE id=?", [
    $request->id
])->fetch();

view('klanten-edit', [
    'klant' => $result
]);

Wijzigingsformulier maken

Video 06

In klanten-edit.view.php maken we het wijzigingsformulier

<form action="/klanten-update/<?= $klant['id'] ?>" method="post">
    <?= csrf() ?>
    <input type="text" name="voornaam" placeholder="Voornaam" value="<?= old('voornaam', $klant['voornaam']) ?>"
        class="border"><br>

    <input type="text" name="tussenvoegsel" placeholder="Tussenvoegsel"
        value="<?= old('tussenvoegsel', $klant['tussenvoegsel']) ?>" class="border"><br>

    <input type="text" name="achternaam" placeholder="Achternaam"
        value="<?= old('achternaam', $klant['achternaam']) ?>" class="border"><br>

    <input type="text" name="telefoonnr" placeholder="Telefoonnr"
        value="<?= old('telefoonnr', $klant['telefoonnr']) ?>" class="border"><br>

    <input type="submit" value="Opslaan" class="border">
</form>

Het formulier heeft vier tekst velden (voornaam, tussenvoegsel, achternaam, telefoonnr)
Als value gebruiken we old(... verstuurde waarde, ...waarde uit database)

Wijziging doorvoeren

Video 07

In controller klanten-update.php gaan we validatie doen en de wijziging in de database doorvoeren.

<?php
$request->validate([
    'id' => 'required',
    'voornaam' => 'required|min:2|max:50',
    'achternaam' => 'required|max:50',
    'telefoonnr' => 'max:15',
]);
//database object initialiseren
$db = new Database();

$db->query("UPDATE klanten 
SET voornaam =:voornaam, tussenvoegsel=:tussenvoegsel,achternaam=:achternaam,telefoonnr=:telefoonnr 
WHERE id = :id", [
    'voornaam' => $request->voornaam,
    'achternaam' => $request->achternaam,
    'tussenvoegsel' => $request->tussenvoegsel,
    'telefoonnr' => $request->telefoonnr,
    'id' => $request->id
]);

flash('Klant gegevens gewijzigd');

redirect('/klanten');

Validatie aan formulier toevoegen

Video 08

In het formulier klanten-edit.view.php voegen we validatie meldingen toe. Dit doen we in elk geval bij voornaam en achternaam, maar ook zeker bij tussenvoegsel en telefoonnr.

<form action="/klanten-update/<?= $klant['id'] ?>" method="post">
    <?= csrf() ?>
    <input type="text" name="voornaam" placeholder="Voornaam" value="<?= old('voornaam', $klant['voornaam']) ?>"
        class="border"><br>
    <?php if (errors('voornaam')): ?>
        <p class="text-red-500 text-sm my-2"><?= errors('voornaam') ?></p>
    <?php endif; ?>

    <input type="text" name="tussenvoegsel" placeholder="Tussenvoegsel"
        value="<?= old('tussenvoegsel', $klant['tussenvoegsel']) ?>" class="border"><br>

    <input type="text" name="achternaam" placeholder="Achternaam"
        value="<?= old('achternaam', $klant['achternaam']) ?>" class="border"><br>
    <?php if (errors('achternaam')): ?>
        <p class="text-red-500 text-sm my-2"><?= errors('achternaam') ?></p>
    <?php endif; ?>

    <input type="text" name="telefoonnr" placeholder="Telefoonnr"
        value="<?= old('telefoonnr', $klant['telefoonnr']) ?>" class="border"><br>

    <input type="submit" value="Opslaan" class="border">
</form>