Opgave 2

Bestanden aanmaken

Video 01

We maken de benodigde bestanden aan

Menu item aanmaken

Video 02

Toevoegen link aan navigatie-menu.view.php

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

Routes aanmaken

Video 03

Maak in router.php de volgende routes

$route->get('afspraak-create', "controllers/afspraak-create.php"); //(1p)
$route->post('afspraak-store', "controllers/afspraak-store.php");  //(1p)

Invoer formulier maken

Video 04

Maak in afspraak-create-view.php het formulier met de benodigde velden

<form action="/afspraak-store" method="post">
    <?= csrf() ?>

    <select name="klant_id" class="border">
        <?php foreach ($klanten as $klant): ?>
            <option value="<?= $klant['id'] ?>">
                <?= $klant['voornaam'] ?>     <?= $klant['tussenvoegsel'] ?>
                <?= $klant['achternaam'] ?>
            </option>
        <?php endforeach; ?>
    </select><br>

    Datum
    <input type="date" class="border" name="datum" placeholder="Datum" value="<?= old('datum') ?>"><br><!-- 1p -->
    Van tijd<input type="time" class="border" name="van" placeholder="van" value="<?= old('van') ?>"><br><!-- 1p -->
    Tot tijd<input type="time" class="border" name="tot" placeholder="Tot" value="<?= old('tot') ?>"><br><!-- 1p -->
    <textarea name="opmerking" class="border" placeholder="Opmerkingen"><?=old('opmerking')?></textarea><br><!-- 2p -->
    <input type="submit" class="border" value="Opslaan"><!-- 1p -->
</form>

Afspraak opslaan in database

Video 05

Vul de controller afspraak-store.php zodat een afspraak opgeslagen wordt in de database

<?php

$request->validate([
    'datum' => 'required', //1p
    'van' => 'required',   //1p
    'tot' => 'required',   //1p
    'klant_id' => 'required', //1p
]);

$db = new Database();

$db->query("INSERT INTO afspraken (van, tot, klant_id, opmerking) VALUES (?, ?, ?, ?)", [
    $request->datum . " " . $request->van,
    $request->datum . " " . $request->tot,
    $request->klant_id,
    $request->opmerking,
]);

flash("Afspraak is gemaakt", true, 3000);

redirect("/afspraak-create");

Validatie in view toevoegen

Video 06

Voeg de validatie meldingen toe aan afspraak-create.view.php

<form action="/afspraak-store" method="post">
    <?= csrf() ?>

    <select name="klant_id" class="border">
        <?php foreach ($klanten as $klant): ?>
            <option value="<?= $klant['id'] ?>">
                <?= $klant['voornaam'] ?>     <?= $klant['tussenvoegsel'] ?>
                <?= $klant['achternaam'] ?>
            </option>
        <?php endforeach; ?>
    </select><br>

    Datum
    <input type="date" class="border" name="datum" placeholder="Datum" value="<?= old('datum') ?>"><br><!-- 1p -->
      <?php if (errors('datum')): ?>
          <p class="text-red-500 text-sm my-2"><?= errors('datum') ?></p>
      <?php endif; ?>
    Van tijd<input type="time" class="border" name="van" placeholder="van" value="<?= old('van') ?>"><br><!-- 1p -->
      <?php if (errors('van')): ?>
          <p class="text-red-500 text-sm my-2"><?= errors('van') ?></p>
      <?php endif; ?>
    Tot tijd<input type="time" class="border" name="tot" placeholder="Tot" value="<?= old('tot') ?>"><br><!-- 1p -->
      <?php if (errors('tot')): ?>
          <p class="text-red-500 text-sm my-2"><?= errors('tot') ?></p>
      <?php endif; ?>
    <textarea name="opmerking" class="border" placeholder="Opmerkingen"><?=old('opmerking')?></textarea><br><!-- 2p -->
    <input type="submit" class="border" value="Opslaan"><!-- 1p -->
</form>

Voor selecteren selectbox

Video 07

Een selectbox option wordt standaard geselecteerd met de tekst 'selected' als attribute

<option value="1" selected>Piet</option>

Dus wij willen de tekst 'selected' toevoegen als de klant uit de loop overeen komt met de klant die was geselecteerd.

<?= ($klant['id'] == old('klant_id') ? 'selected' : '') ?>

De volledige code wordt dan

<select name="klant_id" class="border">
    <?php foreach ($klanten as $klant): ?>
        <option <?= ($klant['id'] == old('klant_id') ? 'selected' : '') ?> value="<?= $klant['id'] ?>">
            <?= $klant['voornaam'] ?>     <?= $klant['tussenvoegsel'] ?>
            <?= $klant['achternaam'] ?>
        </option>
    <?php endforeach; ?>
</select><br>