Een krant als voorbeeld

Een krant is een mooi voorbeeld om uit te leggen hoe een databankgestuurde website nu precies werkt. We gebruiken HLN.be als een voorbeeld.

Elk artikel in deze online krant, bevat een aantal terugkerende elementen. De belangrijkste structuuronderdelen heb ik naast de foto opgesomd.


Bron: https://www.hln.be/de-krant/aannemer-licht-gezinnen-op-voor-honderdduizenden-euro-s~a74fc6fc/

Een spreadsheet als "instap" naar een databank

Je zou in een rekenbladprogramma als LibreOffice Calc of MS Excel een lijst kunnen maken met deze gegevens van een "aantal" artikels die je op HLN.be vindt. 

Het zou er zo kunnen uitzien:


Een databank is echter veel meer dan enkel maar een rekenblad. In een databank bewaar je gegevens evenzeer in rijen en kolommen. Een databank kan echter hele reeksen tabellen bevatten die je eveneens met elkaar kan koppelen. Het wordt duidelijk in de volgende stap.

Artikels bewaren in een databank

Een relationele databank heeft niets te maken met een datingsite. Alhoewel ze voor een datingsite vermoedelijk ook wel een relationele databank zullen gebruiken om de profielen van de gebruikers met elkaar in verbinding te brengen. Ik gebruik nog steeds het voorbeeld van de krant om duidelijk te maken wat een databank nu precies is.

Net zoals in het rekenblad bewaren we de gegevens in een "tabel". Data die "meerdere" keren kunnen voorkomen, zoals de naam van de auteur, nemen we echter niet op. Dit doen we op een "andere manier".

Ik geef Engelstalige veldnamen aan de kolommen. Niet omdat dit moet, maar omdat het wat de gewoonte is. Waarom ik niet gewoon "date" en "time" gebruik, leg ik later nog wel uit.  Je merkt dat ik geen "veldnaam" geef aan de eerste en de laatste kolom en dat het veld "author" ontbreekt. 

De tabel "articles"

...titlearticledatearticletimecovercontent...
...Sinterklaas komt om het leven05/12/201806/12/2018 10:22:10images/sint.jpgOp 5 december viel Sinterklaas van een dak. Hij kwam hierbij om het leven......
...Trump laat haar kleuren03/01/201904/01/2079 11:10:20images/kuif.jpgTrump gaat voortaan door het leven met bruin haar......
...............
...

De tabel "authors"

Omdat een auteur meerdere artikels kan schrijven, en we van elke auteur eveneens wat informatie willen bewaren (zoals zijn/haar naam, e-mailadres enz.), maken we voor de auteurs een afzonderlijke tabel aan. 

Achteraf gaan we de tabel "articles" linken aan de tabel "authors".

idnameemail
1Joske Janssensjoske.janssens@leukekrant.be
2Louisa Peeterslouisa.peeters@leukekrant.be
3Achmed Birandouniachmed.birandouni@leukekrant.be

Je merkt dat elke rij in de tabel "authors" een kolom met de naam "id" heeft gekregen. Dit "id" is een uniek nummer. Elke keer je aan de tabel een rij toevoegt, wordt dit id met één verhoogt. Als je een rij verwijdert, behouden de andere rijen hun nummer. Als je rij met id 2 zou verwijderen, zal rij 3 gewoon het id "3" blijven houden.

Relaties leggen tussen beide tabellen

We noemen de eerste kolom van de tabel "articles" eveneens id. Ook deze kolom heeft de hierboven beschreven kenmerken. Je merkt dat de laatste kolom de benaming "authorid" heeft gekregen. 

idtitlearticledatearticletimecovercontentauthorid
1Sinterklaas komt om het leven05/12/201806/12/2018 10:22:10images/sint.jpgOp 5 december viel Sinterklaas van een dak. Hij kwam hierbij om het leven...1
2Trump laat haar kleuren03/01/201904/01/2079 11:10:20images/kuif.jpgTrump gaat voortaan door het leven met bruin haar...3
...............
...

Het artikel met id 1 heeft als authorid 1, artikel met id 2 krijgt als authorid 3. D.w.z. dat "Sinterklaas komt om het leven" geschreven is door Joske Janssens. Het artikel over Trump is dan weer geschreven door de auteur met id "3" oftewel Achmed Birandouni.

Aan de slag met MySQL

De meeste hostingmaatschappijen bieden standaard MySQL aan als databanksoftware. De hierboven beschreven tabellen, kan je aanmaken in een databank op je hostingpakket. Als een hostingmaatschappij MySQL aanbiedt, dan kan je de databank over het albemeen beheren via een online tool met de naam PHPMyAdmin. De interface schrikt op het eerste zicht wat af. Maar toch is het vrij makkelijk om de twee tabellen hier boven in PHPMyAdmin aan te maken. 

Opgelet: Niet iedereen kan de databank openen en bekijken. Je moet over een gebruikersnaam en wachtwoord beschikken om tabellen te kunnen aanmaken. Die kan je zelf instellen in je persoonlijke hostingaccount. 

In PHPMyAdmin maak je een nieuwe tabel aan door aan de linkerkant op "Nieuw" te klikken. 


Je kan het aantal benodigde kolommen invoeren en een naam geven aan de tabel.  

Bij "Naam" voer je de naam in van de kolom. Bij "type" bepaal je welk type informatie je in die kolom wil opslaan.

Een ID (de eerste kolom in onze beide tabellen) krijgt als "type" int. Een int of integer is een positief geheel getal (een natuurlijk getal). Je vinkt ook de optie "AI" aan (staat voor "auto increment" om de waarde automatish te laten verhogen. Vervolgens krijg je het onderstaande venster te zien. Klik op "Starten".


Velden zoals "title" en "content" (in de tabel "articles") en "name" en "email" (in de tabel "authors") krijgen als type "text" , "mediumtext" of "longtext" (afhankelijk van de hoeveelheid data die je per veld wil bewaren. Als je de optie "Leeg" aanvinkt, dan geef je aan dat het veld niet "moet" ingevuld worden, dat het ook leeg mag blijven. 

Gereserveerde woorden

Voor "articledate" kozen we als naam niet simpelweg voor "date" omdat dit problemen zou kunnen opleveren. Date en time... zijn wat men noemt "gereserveerde woorden", woorden die MySQL intern gebruikt om bepaalde types van data aan te duiden. Net zoals "text" en "integer" ook interne benamingen zijn. Die gebruik je dus best nooit als veldnaam. 

Standaardwaarde

Voor articledate kiezen we als type "date", voor "articletime" selecteren we het type "datetime". Het verschil is dat we de gebruiker/journalist zelf een datum willen laten invoeren voor het artikel. Bij "articletime" voert MySQL zelf een datum in, nl. de datum waarop het nieuwe artikel aan de databank is toegevoegd. 

Voor dat veld stellen we een standaardwaarde in. Opgelet: als je een standaardwaarde (in dit geval timestamp) kiest, dan mag je de optie "leeg" niet aanvinken.



Gegevens toevoegen aan de databank

Via de tab "invoegen" kan je informatie aan elke tabel toevoegen. De bedoeling is dat we hiervoor achteraf een invoerformulier aan onze site toevoegen. Op die manier moet de "journalist" niet rechtstreeks in PHPMyAdmin aan de slag. Hij/zij kan via een eenvoudig invoerformulier (na wachtwoordtoegang) informatie toevoegen aan de tabellen. 


De tabel "articles" omzetten in HTML

Tijd voor automatisering. In een volgende stap genereren we automatisch een HTML-pagina met de inhoud van de tabel "articles".

Webontwikkeling met PHP

home