## Invoeren

Stappenplan

- Maak twee routes aan in router.php
- Maak een controller items-create.php
- Maak een view items-create.view.php
- Maak een controller items-store.php

In router.php

    $route->get('items/create', 'controllers/items-create.php');
    $route->post('items', 'controllers/items-store.php');

In controller items.create.php

    <?php
    /*
    Indien je selectboxen hebt moet je hier waarschijnlijk gegevens
     uit de database ophalen om mee te geven aan de view.
    bv:
    $db = new Database();
    view('items-create',[
        'categories' => $db->query("SELECT * FROM categories")->fetchAll()
    ]);

    */
    view('items-create');

In view items-create.view.php

Hier komt een formulier met die kan worden verstuurd naar de route '/items' d.m.v. method=post

Versie zonder validatie en opnieuw invullen van velden

    <?php
    view("parts/header", ['title' => 'item toevoegen']);
    view("parts/navigatie-menu");
    ?>
        <h1 class="text-3xl my-4">Item toevoegen</h1>

        <form action="/items" method="post">
        <?= csrf(); ?>
        <label for="naam">Naam</label><br>
        <input type="text" name="naam" id="naam" placeholder="naam"><br>

        <label for="beschrijving">Beschrijving</label><br>
        <textarea name="beschrijving" id="beschrijving" cols="30" rows="3" placeholder="beschrijving"></textarea><br>

        <label for="prijs">Prijs</label><br>
        <input type="number" step="0.01" name="prijs" id="prijs" placeholder="prijs"><br>

        <input type="submit" value="Toevoegen" class="border b-gray-600 rounded py-1 px-2 hover:bg-gray-100 cursor-pointer">

    <?php
    view("parts/footer");

Versie met validatie en opnieuw invullen van velden

    <?php
    view("parts/header", ['title' => 'item toevoegen']);
    view("parts/navigatie-menu");
    ?>
        <h1 class="text-3xl my-4">Item toevoegen</h1>

        <form action="/items" method="post">
    <?= csrf(); ?>
        <label for="naam">Naam</label><br>
        <input type="text" name="naam" id="naam" placeholder="naam" value="<?= $_POST['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"><?= $_POST['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="<?= $_POST['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="Toevoegen" class="border b-gray-600 rounded py-1 px-2 hover:bg-gray-100 cursor-pointer">

    <?php
    view("parts/footer");

In controller items-store.php

- Validatie (voor regels zie cheatsheet)
- Terugsturen indien errors
- Invoeren in database
- Doorverwijzen naar andere pagina

    <?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-create', [
            'errors' => $errors
        ]);
        exit();
    }

    //indien validatie oké dan gegevens opslaan in de database
    $db = new Database();
    $db->query("INSERT INTO items (naam,beschrijving,prijs) VALUES (:naam,:beschrijving,:prijs)", [
        'naam' => $_POST['naam'],
        'beschrijving' => $_POST['beschrijving'],
        'prijs' => $_POST['prijs']
    ]); //id veld staat op auto increment dus hoeft niet meegegeven te worden

    flash("Item " . htmlspecialchars($_POST['naam']) . " is toegevoegd");
    //terugsturen naar de index pagina
    header("location: /items");

    //terugsturen naar de detail pagina van het item
    //header("location: /items/" . $db->lastInsertId());