# Read Me

In de map 00_Basis zitten alle uitwerkingen van de medewerkers CRUD applicatie. Ze zijn opvolgend genummerd van heel basaal tot steeds logischer georganiseerd. De CSS map bevat de basis CSS die tevens in iedere subfolder wordt hergebruikt (voor makkelijker overnemen). In 00 en 01 is deze echter nog vrij basaal. Vanaf 02 wordt dezelfde gebruikt...

## mw_00_crud_book

Dit is de basic Medewerkers applicatie, met alle CRUD acties (Create, Read, Update en Delete) compleet zoals in het cursusboek wordt besproken. Op de overzicht pagina fungeert het id als hyperlink naar een aanpas pagina die de de update en delete actie combineert.

Niet erg fraai, maar wel snel te realiseren en laat ook zien dat je een andere actie kunt uitvoeren wanneer er op een andere submit knop wordt geklikt...

Het verwijderen wordt enkel beveiligd met een eenvoudige JavaScript confirm...
Echo's worden nog gedaan met `<?php echo $var; ?>`.

## mw_01_crud_basic_actions

Als 00 maar nu met actie links op het overzicht en een server-side bevestiging voor verwijdering.

De zichtbare pagina's hebben met HTML-code als laatste onderdeel van de PHP Web Page een naam die in het nederlands de te maken bewerking aangeeft zoals medewerker_toevoegen.php (het invoerformulier). De bijbehorende PHP-only form-handler die de query uitvoert heeft de naam van de query: (`medewerker_insert.php`).

NB: Op verwijder bevestig pagina kun je het beste het record weer tonen voordat je het verwijdert... (Dit doen we later vanaf 04 mooi met de `get_medewerker()` functie)

Kortom, het werkt, maar veel herhaling van code op de PHP Web pages (dit kan weliswaar snel met copy & paste) maar ze zijn daardoor lastig aan te passen.

## mw_02_crud_includes

Dit is de Medewerkers applicatie maar nu herschreven met gebruik van een 2-dimensionale array en templates voor het tonen van de data en een config met constanten voor aanpassen van database configuratie en andere sitewide zaken zoals de bedrijfsnaam.

Voor een consistente lay-out wordt vanaf hier gebruik gemaakt van geneste templates (via een header en een footer). De body gebruikt nu een `<div class="container">` in combinatie met een uitgebreidere stylesheet. In de header staat een navigatiemenu dat ook naar de (toegevoegde) homepage en about en contact pagina's leidt.

Op dezelfde manier kunnen nu ook database errors getoond worden... Alle variabelen worden vanaf hier met short echo's (`<?= $var ?>`) weggeschreven. Met spaties voor de leesbaarheid maar wel zonder puntkomma.

## mw_03_crud_selfsubmit

Dit is de array/template variant maar nu uitgebreid met self-submitting forms.

## mw_04_crud_functions

Deze variant is uitgebreid met functies. Voor de database connectie wordt `db_connect()` gebruikt en voor
het uitvoeren van queries wordt `db_query()` gebruikt. Je kunt nu aanpassingen zoals `echo $query` of `die($query)` op een centrale plek doen. Bijkomend voordeel is nog verdere database abstractie.

Tevens wordt gebruik gemaakt van een `redirect()` functie voor de redirects. Na een `header('location: ...')` moet eigenlijk altijd een `die()` of `exit()` gebruikt worden.

Voor het insluiten van de templates wordt de functie `include_template()` gebruikt. Dit maakt het makkelijker om het insluiten van de templates op een centrale plek te kunnen regelen. Nadeel is wel dat je nu de data voor de template als argument mee moet geven...

in de template zelf kun je voor het simpel in een tabel tonen van elke 2-dimensionale array gebruik maken van de hulp functie `html_table()`.

## mw_04_crud_functions_new

Dit is een verbetere functies variant, zoals we die min of meer in de cursus hebben opgebouwd, maar met wat extra's...

- De templates map is hernoemd naar views en de data map naar models.
- Variabelen voor view worden gelijk als associatieve array meegegeven (en niet eerst verzameld in $data).
- In het model worden geen `mysqli_*` functies meer gebruikt, alles is weg geabstraheerd in `db_*` functies zodat deze in principe op een plaats zijn aan te passen naar bijvoorbeeld `sqlite_*` of `pg_*` functies. Maar beter is natuurlijk om dat met PDO te doen (zie vervolg cursus). ook het insluiten van de error templates gebeurt nu op een plek, namelijk in `db_query()`
- Alle echo statements worden met short echo `<?= $var ?>` gedaan. Met spaties voor de leesbaarheid maar zonder puntkomma.
- Self submitting form checks worden nu met `is_postback()` functie gedaan.
- De escape functie wrappers voor HTML en SQL heten simpelweg `html()` en `sql()`. Alternatieven zijn `e()` en `quote()` of `html_escape()` en `sql_escape()`.

## mw_05_crud_login

Dit is de versie met login functionaliteit. Dat gebeurt tegen een vaste usr/pwd combinatie van a/b. De link naar medewerkers komt pas in het menu wanneer de gebruiker is ingelogd. De login link verandert dan in logout. Na uitloggen wordt de gebruiker naar de login pagina gestuurd.

## mw_06_crud_login_db

nu met login. De users zijn nu hashed opgeslagen in de database en hebben verschillende user roles:

guest/guest heeft userlevel 1
user/user heeft userlevel 2
admin/admin heeft userlevel 3

Zo kunnen de rechten makkelijk gestapeld worden:

userlevel >= 1 : select
userlevel >= 2 : idem + insert, update
userlevel >= 3 : idem + delete (+ afdelingen beheer)

## exercises

uitwerkingen van oefeningen

## demo

demo files
