Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen...

97
Universiteit Gent Faculteit Ingenieurswetenschappen Vakgroep Telecommunicatie en Informatieverwerking Voorzitter: Prof. Dr. Ir. Herwig Bruneel Opzetten van een databank met website voor IAAS Liesbeth Vanderstraeten Heidi Vanparys Promotor: Prof. Dr. Guy De Tr´ e Begeleider: Ir. Tom Matth´ e Scriptie ingediend tot het behalen van de academische graad van Master in de Toegepaste Informatica Academiejaar 2006-2007

Transcript of Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen...

Page 1: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Universiteit GentFaculteit Ingenieurswetenschappen

Vakgroep Telecommunicatie en InformatieverwerkingVoorzitter: Prof. Dr. Ir. Herwig Bruneel

Opzetten van een databank met website voor IAAS

Liesbeth VanderstraetenHeidi Vanparys

Promotor: Prof. Dr. Guy De TreBegeleider: Ir. Tom Matthe

Scriptie ingediend tot het behalen van de academische graad vanMaster in de Toegepaste Informatica

Academiejaar 2006-2007

Page 2: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb
Page 3: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Universiteit GentFaculteit Ingenieurswetenschappen

Vakgroep Telecommunicatie en InformatieverwerkingVoorzitter: Prof. Dr. Ir. Herwig Bruneel

Opzetten van een databank met website voor IAAS

Liesbeth VanderstraetenHeidi Vanparys

Promotor: Prof. Dr. Guy De TreBegeleider: Ir. Tom Matthe

Scriptie ingediend tot het behalen van de academische graad vanMaster in de Toegepaste Informatica

Academiejaar 2006-2007

Page 4: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

De auteurs geven de toelating deze scriptie voor consultatie beschikbaar te stellen en delenvan de scriptie te kopieren voor persoonlijk gebruik. Elk ander gebruik valt onder de

beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bronuitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie.

Page 5: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Dankwoord

In dit dankwoord willen we enkele mensen onze dank betuigen voor hun steun bij hetschrijven van deze thesis. In de eerste plaats gaat onze dank uit naar onze promotor,prof. dr. Guy De Tre, omdat hij ons en IAAS de mogelijkheid heeft gegeven om dezethesis te maken, en voor de feedback tijdens het schrijven van de thesis.

We richten ons dankwoord ook aan onze begeleider ir. Tom Matthe voor het adviesover het ontwerpen van EER-diagrammen en voor het nalezen van de thesis.

Allereerst wil ik mijn ouders bedanken. Jullie hebben het mij mogelijk gemaakt omdeze extra opleiding te volgen. Ik denk daarbij niet alleen aan de financiele kant, maarook aan de morele steun en het vertrouwen dat jullie mij tot op het einde schonken.

Vervolgens zou ik ook mijn dank willen betuigen aan al mijn medestudenten voorhet leuke jaar, in het bijzonder aan Erika en Didier, voor jullie steun, gastvrijheid engezellige koffiepauzes tijdens het maken van de thesis.

Last but not least wil ik ook een dankwoord richten aan mijn collega Heidi, vanwegede vlotte samenwerking. Ik heb vele nieuwe snufjes van je bijgeleerd in de afgelopenweken. Dankzij je inventiviteit werd de website een echt pareltje en je grote expertisevan LATEX maakte van deze thesis een waar meesterwerk.

Liesbeth Vanderstraeten

Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregenheb met het volgen van dit extra jaar. Hierdoor heb ik me kunnen verdiepen in de zakendie mij het meeste interesseren en heb ik een nieuwe richting kunnen inslaan.

Het maken van de databank en de website was een plezier, dit voor een grootdeel dankzij de leuke tijd die Liesbeth en mezelf hadden met Erika en Didier in hetTechnicum.

Ik zou graag iedereen van IAAS bedanken voor de leuke momenten die ik al methen beleefd heb de voorbije jaren. In het bijzonder wil ik de mensen van het EC en CCvan dit jaar vermelden, Matjaz, Rachael, Julia, Ala, Wouter, Vincent en Erin, voor hunsteun aan dit project en voor hun feedback. Jo, de IT-man van IAAS, speelde uiteraardeen grote rol bij het helpen uitdenken van de functionaliteit die de website zou moetenbieden, onder andere het idee voor een interactief vertaalsysteem hebben we aan hem

i

Page 6: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

DANKWOORD

te danken. En bij deze wil ik dan ook George bedanken voor de vertaling naar hetRussisch.

Verder zou ik ook graag de comites van Frankrijk, Duitsland en Zwitserland nogeens complimenteren met de organisatie van de RM en de GA prep, het deed deugdtoen om er even tussenuit te zijn, om daarna weer met nieuwe energie verder te doen.

De belangrijkste persoon, Liesbeth, hou ik tot op het laatste: IAAS en mezelf appre-cieren het heel erg dat je hebt willen meehelpen om ons project te realiseren, zonderjou hadden we nog niet de helft van wat we nu hebben. Ik vond de samenwerking meerdan geslaagd, ’t was een fijne tijd!

Heidi Vanparys

ii

Page 7: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Overzicht

Opzetten van een databank met website voor IAASLiesbeth VanderstraetenHeidi Vanparys

Scriptie ingediend tot het behalen van de academische graad vanMaster in de Toegepaste Informatica

Academiejaar 2006-2007

Promotor: Prof. Dr. Guy De TreBegeleider: Ir. Tom Matthe

Faculteit IngenieurswetenschappenUniversiteit Gent

Vakgroep Telecommunicatie en InformatieverwerkingVoorzitter: Prof. Dr. Ir. Herwig Bruneel

Samenvatting Om een beter overzicht te hebben van de leden en comites van deInternational Association of Students in Agricultural and Related Sciences (IAAS) enom binnen deze organisatie een aantal taken te automatiseren werd een databankontworpen en aangemaakt in het relationele databasemanagementsysteem MySQL.Rond deze databank werd een website gebouwd met behulp van PHP.

Trefwoorden IAAS, EER-model, relationeel databasemodel, PHP, MySQL

iii

Page 8: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Inhoudsopgave

Dankwoord i

Overzicht iii

Inhoudsopgave iv

Lijst van Acroniemen vi

Inleiding 1

1 Achtergrond 21.1 Nationale structuur van IAAS . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Internationale structuur van IAAS . . . . . . . . . . . . . . . . . . . . . . . 21.3 Bijeenkomsten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Partners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.5 Alumni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.6 Bijdragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Ontwerp van de databank 52.1 Behoeften van IAAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Conceptueel ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Logisch ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4 Fysiek ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Functionaliteit van de website 133.1 Bezoekers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Authenticatiesysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 Agenda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.4 Contact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.5 Sponsors en partners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.6 Meertaligheid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Website: implementatie 194.1 Markuptaal, programmeertaal en databank . . . . . . . . . . . . . . . . . 194.2 Databankconnectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

iv

Page 9: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

INHOUDSOPGAVE

4.3 Bestandsstructuur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.4 Meertaligheid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.5 PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.6 Authenticatiesysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.7 Nieuwssectie en webfeed . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.8 Beveiliging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Besluit 41

Bijlagen 42

A Databaseontwerp 43A.1 EER-diagrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43A.2 Omzetting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47A.3 SQL-code voor het aanmaken van de database . . . . . . . . . . . . . . . 55

B Broncode van DB en DB Result 67

C Gebruikte programma’s 75

Lijst van figuren 79

Lijst van tabellen 81

Literatuurlijst 82

v

Page 10: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Lijst van Acroniemen

AC Advisory CommitteeAPI applicatieprogramma-interfaceBEST Board of European Students of TechnologyBNP Bruto Nationaal ProductCC Control CommitteeCSS Cascading Style SheetsDBMS DatabasemanagementsysteemEC Executive CommitteeEQB Exchange Quality BoardEER Enhanced Entity-RelationshipFAO Food and Agriculture Organization of the United NationsGA General AssemblyGIMP GNU Image Manipulation ProgramHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolIAAS International Association of Students in Agricultural and Related SciencesICA Interuniversity Consortium for Agriculture and Related Sciences in EuropeIETF Internet Engineering Task ForceLC Local CommitteeLD Local DirectorLE Local Exco (Local Exchange Coordinator)NC National CommitteeND National DirectorNE National Exco (National Exchange Coordinator)OC Organising CommitteePEAR PHP Extension and Application RepositoryPHP PHP: Hypertext PreprocessorRD Regional DirectorSQL Structured Query LanguageUML Unified Modeling LanguageUNESCO United Nations Educational, Scientific and Cultural OrganizationUTF-8 8-bit Unicode Transformation FormatXHTML Extensible HyperText Markup LanguageXML Extensible Markup Language

vi

Page 11: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Inleiding

De International Association of Students in Agricultural and Related Sciences (IAAS)is een studentenorganisatie die leden heeft over de hele wereld. Het doel van IAASis promotie van de uitwisseling van kennis, informatie en ideeen onder studenten enverbetering van het wederzijdse begrip tussen landen en culturen.

Er is binnen IAAS al een aantal jaar sprake van de ontwikkeling van een ‘integra-ted web management solution’ om bepaalde taken efficienter te laten verlopen en omde informatiestromen van en naar de leden te verbeteren, maar er zijn nooit concretestappen ondernomen die een blijvend resultaat als gevolg hadden. Het doel van dezethesis is dan ook een eerste stap te zetten naar een toepassing die wel gebruikt kan enzal worden door alle leden.

Na een korte achtergrond te schetsen over IAAS in hoofdstuk 1, wordt er in hettweede hoofdstuk een conceptueel ontwerp gemaakt van de organisatie. Vanuit ditconceptueel ontwerp wordt het databaseschema opgesteld volgens het relationele da-tabasemodel. Als laatste stap wordt het databasemanagementsysteem MySQL geko-zen waarmee het fysiek ontwerp afgewerkt wordt.

Er wordt voor IAAS een nieuwe website ontworpen. Via deze webapplicatie wordter gewerkt met de databank. In hoofdstuk 3 wordt er dieper ingegaan op de functio-naliteit van de website, terwijl in het laatste hoofdstuk op de technische details wordtingezoomd.

1

Page 12: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Hoofdstuk 1

Achtergrond

De International Association of Students in Agricultural and Related Sciences (IAAS)brengt al vijftig jaar studenten in de landbouw en aanverwante wetenschappen vanover de hele wereld bij elkaar. Haar doelen zijn ‘to promote the exchange of knowled-ge, information and ideas among students, and to improve the mutual understandingbetween countries and cultures’.1

1.1 Nationale structuur van IAAS

Aan elke universiteit waar IAAS aanwezig is, is een Local Committee (LC) verbonden,en elk lid van een LC is automatisch ook lid van het National Committee (NC) van datland (figuur 1.1).

IAAS Belgie

IAAS Gent IAAS Leuven IAAS Louvain-la-Neuve

Figuur 1.1: Structuur van IAAS Belgie. Belgie heeft drie LC’s, meerbepaald Gent, Leuvenen Louvain-la-Neuve, en samen vormen de leden van deze comites het NCIAAS Belgie

Elk LC wordt geleid door een Local Director (LD); elk NC wordt geleid door eenNational Director (ND) en moet ook iemand kiezen die verantwoordelijk is voor hetuitwisselingsprogramma,2 de National Exco (NE). Andere functies zoals bijvoorbeeldeen penningmeester, of een Local Exco (LE) kunnen bestaan. In principe kan een LDook de ND zijn van een bepaald land, hetzelfde geldt voor de exco’s.

1.2 Internationale structuur van IAAS

Volgens de statuten bestaan de leden van IAAS uit de verschillende NC’s. Een lid kaneen vol lid zijn, een kandidaat-lid, of een corresponderend lid. Aan een vol lid of een

1http://www.iaasworld.org2Exchange Program, afgekort expro

2

Page 13: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 1. ACHTERGROND

kandidaat-lid kan de bevroren toestand zijn toegekend.3

Aan alle leden wordt een categorie toegekend (A, B, C of D), op basis waarvande volle leden meer of minder lidmaatschapsgeld moeten betalen aan IAAS. Dit lid-maatschapsgeld wordt een keer per jaar geınd. Kandidaat-leden en corresponderendeleden betalen geen lidmaatschapsgeld.

Om administratieve redenen worden de leden ingedeeld in regio’s. Elke regio moetuit minstens twee volle leden bestaan (figuur 1.2). Per regio is een Regional Director(RD) aangesteld die verantwoordelijk is voor het contact tussen de landen van zijn/haarregio en die als tussenpersoon fungeert naar het Executive Committee (EC) toe.

Regio’s worden op hun beurt gegroepeerd in interregio’s (figuur 1.3).

Noordwest-Europa

IAAS Belgie IAAS Frankrijk IAAS Duitsland IAAS Polen

Figuur 1.2: Belgie behoort samen met Frankrijk, Duitsland en Polen tot de regioNoordwest-Europa

Europa

Noordwest-Europa Noordoost-Europa Centraaloost-Europa Zuid-Europa

Figuur 1.3: De interregio Europa bestaat uit de regio’s Noordwest-Europa, Noordoost-Europa, Centraaloost-Europa en Zuid-Europa.

IAAS wordt bestuurd door het EC. Dit bestaat momenteel uit vijf leden, namelijk dePresident, de Vice-President Communication, de Vice-President Exchanges, de Vice-President Finances en de Vice-President Partnership. Het jaar na hun termijn in hetEC, zetelen zij voor een jaar in het Advisory Committee (AC), dat als taak heeft hetnieuwe EC bij te staan.

Het Control Committee (CC) waakt over het goede verloop van alles binnen deorganisatie, en bestaat momenteel uit drie personen.

De leden van het EC en CC worden verkozen op de General Assembly (GA) vanhet jaarlijkse wereldcongres. Deze GA kan ook beslissen om de structuur van IAAS teveranderen en bijvoorbeeld meer of minder personen te hebben in EC of CC. Iemandkan niet tegelijkertijd in zowel EC als CC zetelen.

1.3 Bijeenkomsten

Het hele jaar door worden verschillende soorten bijeenkomsten georganiseerd doorcomites. Dit kunnen seminaries zijn, uitwisselingsweken tussen twee of drie landen,

3Zie http://www.iaasworld.org/site/iaas members.php voor een overzicht van de huidige situatie

3

Page 14: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 1. ACHTERGROND

regionale bijeenkomsten, interregionale bijeenkomsten, een wereldcongres, enzovoort.Daarnaast kunnen werkgroepen zoals bijvoorbeeld de Exchange Quality Board (EQB)ook bijeenkomsten organiseren. Sinds vorig jaar is de structuur van IAAS veranderd enwerken de EC-leden van thuis uit, maar een aantal keer per jaar komen ze bij elkaar,meestal in het hoofdkwartier in Leuven.

Een bijeenkomst hoeft niet door te gaan in het land van het organiserende comite,zo organiseerde Denemarken in de zomer van 2006 een wereldcongres in Maleisie.

Voor de meeste bijeenkomsten wordt een deelnameprijs gevraagd, die meestal af-hankelijk is van de categorie van het NC waartoe de deelnemer behoort.

1.4 Partners

IAAS werkt samen met een aantal internationale organisaties zoals de Food and Agri-culture Organization of the United Nations (FAO) en United Nations Educational, Scien-tific and Cultural Organization (UNESCO), en met andere studentenorganisaties zoalsde Board of European Students of Technology (BEST).

1.5 Alumni

Ex-leden kunnen zich, tegen betaling, officieel laten registreren als alumnus voor eenperiode afhankelijk van de formule waarvoor gekozen werd. Dit geeft hen het rechtom deel te nemen aan alle IAAS-activiteiten. Een alumnus kan zijn/haar partner ookofficieel laten registreren zodat deze mee kan deelnemen.

1.6 Bijdragen

Zoals al aangehaald betaalt elk vol lid lidmaatschapsgeld. Daarnaast betalen volle le-den en kandidaat-leden jaarlijks een bijdrage voor de publicatie van het IAAS magazine.Ten slotte moet elk lid een bijdrage betalen afhankelijk van het aantal geplaatste en ont-vangen expro-studenten. Corresponderende leden kunnen enkel studenten plaatsen,niet ontvangen.

4

Page 15: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Hoofdstuk 2

Ontwerp van de databank

Het opbouwen van een databank is een proces dat uit verschillende stappen bestaat.Figuur 2.1 geeft hier een overzicht van.

Figuur 2.1: De fasen van het databaseontwerpproces (De Tre, 2007a)

2.1 Behoeften van IAAS

Voor een internationale organisatie zoals IAAS is het belangrijk om een goede data-bank op te zetten. Belangrijke informatie die in de databank moet terecht komen is decontactinformatie van elk comite. Momenteel kan de contactinformatie van elk NC enLC gevonden worden via de website. Comites kunnen deze informatie echter niet zelfwijzigen, dit gebeurt door iemand van het EC.

Het is echter ook van belang om een accuraat overzicht te krijgen van hoeveelactieve en passieve leden elk comite telt. Via een registratiesysteem moeten ledenzich veilig kunnen inschrijven voor IAAS. Er moet een profiel aangemaakt worden perlid, dat belangrijke gegevens bevat zoals naam, geboortedatum en nationaliteit. De

5

Page 16: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

gegevens komen in de databank terecht en kunnen gebruikt worden om een idee tekrijgen over het ledenaantal van IAAS.

Als een comite een evenement organiseert moet het nu nog zelf een inschrijvings-systeem ontwerpen, waarbij leden telkens opnieuw alle persoonlijke gegevens moeteninvullen. Via een online inschrijvingsformulier zouden geregistreerde leden zich moe-ten kunnen inschrijven voor een evenement, waarna het organiserende comite eenoverzicht krijgt van wie heeft ingeschreven. Hierbij moeten de gegevens van de le-den automatisch uit de databank worden gehaald. Het organiserende comite kan deinschrijvingen verwerken en alle informatie van de ingeschreven leden nauwkeurig bij-houden.

Niet alle informatie in de databank mag zichtbaar zijn voor iedereen. Er moetenafzonderlijke pagina’s aangemaakt worden afhankelijk van de functie binnen het IAAS.Hiervoor moet er een tabel ‘functies’ in de databank opgenomen worden die controleertwelke functie een lid heeft. Het EC moet een extra link krijgen voor het administratievegedeelte binnen IAAS.

Comites en evenementen worden vaak gesponsord door bedrijven. In de databankmoet een overzicht bijgehouden worden van alle bedrijven (met eventuele contactper-sonen) die in het verleden gecontacteerd geweest zijn. Zo zullen de mensen die binnentwee jaar in IAAS zullen zitten een overzicht kunnen opvragen van welke bedrijven inhet verleden al betrokken zijn geweest bij de organisatie.

Om de website zo toegankelijk mogelijk te maken voor iedereen, niet alleen vooruniversiteitsstudenten maar ook voor bijvoorbeeld mensen die een stageplaats op hunboerderij kunnen aanbieden, zou een systeem dat meerdere talen toelaat handig zijn.Bij voorkeur kan de vertaling gebeuren door om het even welk lid van IAAS dat dezetaal spreekt.

2.2 Conceptueel ontwerp

De fase van het conceptueel ontwerp resulteert ten eerste in een plan, een abstrac-te voorstelling, van de database, onafhankelijk van om het even welk databasemodel(De Tre, 2007a). Daarnaast wordt ook een functionele beschrijving opgesteld.

2.2.1 Conceptueel model

Als basis voor de te maken databank werd een Enhanced Entity-Relationship (EER)-diagram opgesteld. Bij dit soort modellering wordt de werkelijkheid voorgesteld doorentiteiten en relaties tussen deze entiteiten (Chen, 1976).

Gemeenschappelijke karakteristieken van entiteiten, ook attributen genoemd, kun-nen voorgesteld worden zoals in figuur 2.2a. Een relatie kan worden voorgesteld zoalsin figuur 2.2b.1

1De notatie gebruikt in deze scriptie voor de EER-diagrammen komt grotendeels overeen met denotatie gebruikt in De Tre (2007a). Dubbele lijnen worden hier echter voorgesteld door dikke lijnen, en het⊂-symbool bevindt zich niet in het midden maar op het einde van de verbindingslijnen

6

Page 17: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

Entiteittype

attribuutsleutelattribuut

samengesteld attribuut meerwaardig attribuut

afgeleid attribuut

(a)

Entiteittype 1

Entiteittype 2

relatie attribuut

M

N

(b)

Figuur 2.2: a: Entiteittype met verschillende soorten attributen ; b: Binaire ‘meerdere-op-meerdere’ relatie waarbij entiteittype 1 partieel participeert en entiteittype 2volledig participeert

De structuur van IAAS kan voorgesteld worden als in figuur 2.3. Hierbij zijn debelangrijkste entiteittypes ‘Person’, ‘Group’ en ‘Event’. De EER-modellen van de enti-teittypes met hun attributen bevinden zich in bijlage A.1.

2.2.2 Functionele beschrijvingen

Omdat een EER-diagram geen mogelijkheden biedt om functionaliteiten weer te geven,moeten deze apart bijgehouden worden.

Voor alle entiteittypes geldt dat bij het toevoegen van gegevens aan de databank ge-controleerd moet worden op de correctheid en dat sommige attributen verplicht ingevuldmoeten worden. Hieronder worden de functionele beschrijvingen van de belangrijksteentiteittypes besproken.

Person

Bij de registratie moet een persoon een gebruikersnaam en tweemaal een paswoordingeven. Er moet gecontroleerd worden of beide paswoorden overeenkomen en of degebruikersnaam uniek is. Op die manier kan er een onderscheid gemaakt worden tus-sen elk lid. Het ingegeven e-mailadres moet uniek zijn en om te controleren of hetwerkelijk gebruikt wordt, moet de registratieprocedure een e-mail sturen met een acti-vatielink. Pas nadat op de link geklikt wordt, kan de persoon ook effectief inloggen. Degeboortedatum die de persoon opgeeft zal vergeleken worden met de huidige datum,zodat te jonge kandidaten zich niet kunnen inschrijven. Er moet controle zijn op dejuiste invoer van telefoonnummers.

Group

Interregion, Region, NC en LC moeten een unieke naam krijgen. NC, LC en EC moetendaarnaast een uniek e-mailadres hebben. Per land kan er slechts een NC zijn. Er moetcontrole zijn op de juiste invoer van telefoonnummers, faxnummers en url’s.

7

Page 18: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

Figu

ur2.

3:D

est

ruct

uur

van

IAA

Svo

orge

stel

dm

etbe

hulp

van

een

EE

R-m

odel

.E

nkel

bij

dere

latie

type

szi

jnat

trib

uten

wee

rgeg

even

,vo

orde

attr

ibut

enva

nde

entit

eitty

pes,

zie

appe

ndix

sect

ieA

.1

8

Page 19: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

Event

Bij het invoeren van evenementen moeten de start- en einddatum gecontroleerd wor-den. De datums mogen niet in het verleden vallen. Daarbovenop moet de startdatumvoor de einddatum komen. Wanneer een url wordt ingevuld, moet er gecontroleerdworden of deze correct ingegeven werd.

2.3 Logisch ontwerp

Aan de hand van een omzettingsalgoritme kan het EER-diagram uit de conceptuelefase geconverteerd worden naar een databaseschema. De functionele beschrijvingenworden daarbij omgezet naar gedragsspecificaties.

Er werd gekozen om het EER-diagram om te zetten naar een relationeel database-schema. Het omzettingsalgoritme hiervoor bestaat uit negen stappen. Een voor eenworden de entiteit- en relatietypes omgezet tot basisrelaties, waar geleidelijk attributenaan worden toegevoegd. De omzetting is in detail uitgeschreven in bijlage A.2.

Tijdens de omzetting werd duidelijk dat in verschillende basisrelaties attributen zo-als woonplaats, nationaliteit en geboorteplaats voorkomen. Daarom werd ervoor ge-kozen om van deze attributen vreemde sleutels te maken die verwijzen naar een re-latie ‘Countries’ (figuur 2.4). Deze relatie heeft als primaire sleutel de landcode zoalsgedefinieerd in ISO (2007). Een tuple van deze relatie is bijvoorbeeld (be, Belgium,Belgie/Belgique/Belgien, 32). Deze stap is uitgewerkt in paragraaf A.2.10 van bijlage A.

Tabel CountriesCode: NameEnglish: NameNative: CallingCodechar(2) varchar(50) varchar(50) smallint(3)

Figuur 2.4: Hoofding van de relatie ‘Countries’

Deze aanpassing beınvloedt het EER-diagram. Een extra entiteittype ‘Country’wordt aangemaakt, en nieuwe relatietypes tussen ‘Country’ en andere entiteiten moe-ten toegevoegd worden (figuur 2.5). Deze stap is een illustratie van ‘reverse enginee-ring’, ook voorgesteld door de pijlen in figuur 2.1 die van beneden naar boven wijzen.

Het resultaat van de volledige omzetting is weergegeven in figuur 2.6.

2.4 Fysiek ontwerp

Het fysieke ontwerp omvat de feitelijke implementatie van het logisch databaseontwerp.Er werd gekozen voor MySQL als Databasemanagementsysteem (DBMS).

2.4.1 MySQL

MySQL is een relationeel DBMS dat ontwikkeld en verdeeld wordt door het commer-ciele bedrijf MySQL AB. Het gebruik van MySQL is uitvoerig beschreven in MySQL AB

9

Page 20: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

Figuur 2.5: Uitbreiding van het EER-diagram. Om de figuur niet onnodig te belasten, werdhier enkel het nieuwe entiteittype ‘Country’ en de nieuwe relatietypes gemodel-leerd.

(n.d.c). Hierna volgen enkele opmerkingen bij het gebruik van MySQL.

Namen van databanken en tabellen

Databanken in MySQL worden opgeslagen in de bestandsstructuur. Elke tabel in eendatabank komt overeen met minstens een bestand in de directory.2 Het onderliggendebesturingssysteem bepaalt de hoofdlettergevoeligheid van tabel- en databanknamen.Databank- en tabelnamen zijn hoofdlettergevoelig in Unix, maar niet in Windows.3

Opslagmachines

Een opslagmachine is een programma dat gebruikt wordt door een DBMS om data opte halen, te verwijderen, . . . , uit de database.

MyISAM is de default opslagmachine (‘storage engine’) voor MySQL. Het is geba-seerd op de oudere ISAM code maar heeft veel extra mogelijkheden. Elke tabel wordtopgeslagen in drie bestanden met als bestandsnaam de naam van de tabel. De exten-sies van de bestanden zijn .frm, .MYD (MYDate) en .MYI (MYIndex) die respectievelijkde tabeldefinitie, gegevens en index bevatten (Wikipedia, 2007).

2Het aantal bestanden is afhankelijk van de gebruikte opslagmachine (zie MyISAM)3Mac OS X is gebaseerd op Unix maar gebruikt een default bestandssysteem (HFS+) dat niet hoofd-

lettergevoelig is. Daarbovenop ondersteunt Mac OS X eveneens UFS volumes, die wel hoofdlettergevoeligzijn (MySQL AB, 2007)

10

Page 21: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

InnoDB is op dit moment de enige opslagmachine van MySQL die het gebruik vanvreemde sleutels ondersteunt. Voor de meeste tabellen werd dan ook voor deze op-slagmachine gekozen.

Om aan te duiden welke opslagmachine er gebruikt moet worden, gebruikt men‘ENGINE’ of ‘TYPE’. Bijvoorbeeld om de opslagmachine van een tabel te veranderennaar InnoDB kan de volgende code gebruikt worden:

ALTER TABLE t ENGINE = InnoDB

2.4.2 Omzetting in MySQL

De code voor het aanmaken van de tabellen in MySQL is weergegeven in bijlage A.3.In MySQL kunnen integriteitsregels gespecificeerd worden in de CREATE TABLE-

instructies maar ze worden nog niet geactiveerd.4 Om zeker te zijn dat de databaseenkel integere data bevat zal foute invoer bijgevolg in de webapplicatie moeten tegen-gehouden worden.

4‘The CHECK clause is parsed but ignored by all storage engines’ (MySQL AB, n.d.b)

11

Page 22: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 2. ONTWERP VAN DE DATABANK

Figu

ur2.

6:O

verz

icht

van

alle

tabe

llen

met

hun

prim

aire

envr

eem

desl

eute

ls.D

epr

imai

resl

eute

lszi

jnon

derli

jnd,

devr

eem

desl

eute

lszi

jnom

kade

rden

met

een

pijl

isaa

nged

uid

naar

wel

keta

belz

eve

rwijz

en

12

Page 23: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Hoofdstuk 3

Functionaliteit van de website

3.1 Bezoekers

Verschillende onderdelen van de website zijn beschikaar voor de gewone bezoeker,deels om informatieve redenen, maar ook om interesse op te wekken voor IAAS. Dezeonderdelen zijn beschikbaar via de navigatiebalk (zie figuur 3.1) en bevatten volgendepagina’s: ‘Over IAAS’, ‘Nieuws’, ‘Agenda’, ‘Exchange Program’, ‘Downloads’, ‘FAQ’ en‘Contact’.1 Om de veiligheid en de privacy van de leden te garanderen, moeten debezoekers zich registreren als ze meer informatie willen zien.

Figuur 3.1: De navigatiebalk van de website

3.2 Authenticatiesysteem

IAAS-leden kunnen zich registreren via de website. In de loginbox staat een link naarde registratieprocedure, die uit twee stappen bestaat. Bij het invullen van het regi-stratieformulier moet verplicht een e-mailadres worden opgegeven. Er wordt naar dite-mailadres een mail gestuurd met een activatielink. Na het bevestigen kan de persooninloggen via de loginbox.2 Na het inloggen verschijnen er extra links in de loginbox, af-hankelijk van de functie binnen IAAS (zie figuur 3.2a en 3.2b).

Leden kunnen hun eigen profiel zien en veranderen. Als lid krijg je meer toegang totde databank dan gewone bezoekers. Via een link in de loginbox kunnen leden doorklik-ken naar hun ledensectie waar informatie over de andere leden van het IAAS te vindenzijn. Om de privacy van de andere leden te garanderen is enkel de naam, geslacht,geboortedatum en e-mail te zien. Leden kunnen zich via de ledensectie inschrijven

1Momenteel bevindt zich nog geen informatie op ‘Downloads’ en ‘FAQ’ wegens tijdgebrek. Dit wordtlater aangevuld.

2De technische details over het programmeren van de registratieprocedure worden uitgelegd in hetvolgende hoofdstuk.

13

Page 24: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 3. FUNCTIONALITEIT VAN DE WEBSITE

(a) (b)

Figuur 3.2: a: Via de loginbox kan er geregistreerd en ingelogd worden; b: Afhankelijk vande functie binnen IAAS verschijnen meerdere links in de loginbox

voor een event en nakijken wie reeds ingeschreven staat. Een tabel toont voor welkeevenementen de deelname reeds bevestigd is (zie paragraaf 3.3).

Afhankelijk van de functie binnen het IAAS kunnen naast de ledensectie anderesecties beschikbaar komen. De adminsectie is toegelaten voor het EC. Het EC zorgtvoor het beheer van de data in de databank, waardoor het de rol van data-administratortoebedeeld krijgt. Enkele mogelijkheden voor het EC:

- groepen toevoegen, aanpassen en verwijderen- leden toevoegen en verwijderen uit een groep- statistische gegevens opvragen in verband met de leden- berichten op de nieuwspagina posten- functies aan leden toekennen, aanpassen en verwijderenDe ND-sectie is enkel toegelaten voor de National Director. In de toekomst zal er

eveneens een LD-sectie komen die enkel toegankelijk is voor de Local Director. Enkelemogelijkheden voor de ND:

- Lokale Comites toevoegen, aanpassen en verwijderen- evenementen toevoegen- inschrijvingen van leden verwerken

3.3 Agenda

Als een comite vroeger een evenement organiseerde moest het zelf een inschrijvings-systeem ontwerpen, waarbij leden telkens opnieuw alle persoonlijke gegevens moesteninvullen.

De nieuwe website bevat een online inschrijvingsformulier (figuur 3.3). Het inschrij-vingsformulier is enkel voor geregistreerde leden toegankelijk, dit om kwaad opzet tevermijden. Leden moeten naam, login en paswoord ingeven. Ze selecteren via een lijsthet evenement waarvoor ze zich willen inschrijven. Hun persoonlijke gegevens worden

14

Page 25: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 3. FUNCTIONALITEIT VAN DE WEBSITE

gecontroleerd met de informatie die beschikbaar is in de databank. Wanneer er eenfout is opgetreden, zal de inschrijving niet opgeslagen kunnen worden.

Figuur 3.3: Geregistreerde leden kunnen zich via dit formulier inschrijven voor een evene-ment

De inschrijving wordt goedgekeurd door de National Director. Hij kan via de ND-sectie nieuwe inschrijvingen bekijken en de waarden voor ‘Approved’, ‘Confirmed’ en‘Paid’ op 1 zetten. De leden kunnen hun inschrijvingen bekijken via de ledensectie encontroleren of de inschrijving goedgekeurd, bevestigd en betaald is (figuur 3.4).

Figuur 3.4: Leden kunnen hun inschrijvingen controleren via de ledensectie

Via de ledensectie kan opgezocht worden wie reeds ingeschreven staat voor eenevenement. De leden van het comite dat het evenement organiseert, ook wel het Or-ganising Committee (OC) genoemd, kunnen alle gegevens van de leden zien. Op diemanier kan de informatie correct worden bijgehouden. Leden uit andere comites kun-nen enkel de naam van de persoon en het land zien.

Om ook niet-leden aan te spreken, werd de agenda zichtbaar voor alle bezoekers.De evenementen die georganiseerd worden, kunnen geraadpleegd worden door zowelleden als bezoekers en er kan gezocht worden naar een specifiek evenement op basisvan jaar, type en/of locatie.

Nieuwe evenementen kunnen worden toegevoegd door de National Director. In

15

Page 26: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 3. FUNCTIONALITEIT VAN DE WEBSITE

de toekomst zal de website verder uitgebreid worden, zodat ook de Local Director demogelijkheid heeft om evenementen toe te voegen aan de databank.

3.4 Contact

Contactgegevens van het hoofdkwartier van IAAS kunnen geraadpleegd worden viade link ‘Contact’ in de navigatiebalk. Er staan ook gegevens over wie in het EC enCC zetelt. Er is een zoekfunctie beschikbaar om volgens Nationaal comite te zoeken,waarbij de gegevens van het Nationaal Comite en de bijhorende Lokale Comites uit dedatabank worden gehaald.

3.5 Sponsors en partners

Groepen en evenementen krijgen van bedrijven en vaak ook van lokale, nationale ofinternationale overheden financiele steun, waardoor het mogelijk is om projecten enevenementen te organiseren. Op de website staan de belangrijkste sponsors met hunlogo weergegeven aan de zijkant (zie figuur 3.5). Op die manier worden ze bedanktvoor hun betrokkenheid met IAAS. Via de link bij de afbeelding kan er meer informatieopgevraagd worden over een sponsor.

Figuur 3.5: Logo’s van de sponsors en partners van IAAS

Boven de sponsors staan ook enkele partners vermeld op de website. Partnersgeven geen financiele steun, maar werken samen met IAAS voor onder andere evene-menten of om informatie uit te wisselen. Onder de partners bevinden zich studentenor-ganisaties en internationale organisaties. Enkele voorbeelden:

- Food and Agriculture Organization of the United Nations (FAO)- Interuniversity Consortium for Agriculture and Related Sciences in Europe (ICA)- United Nations Educational, Scientific and Cultural Organization (UNESCO)- Board of European Students of Technology (BEST)

16

Page 27: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 3. FUNCTIONALITEIT VAN DE WEBSITE

3.6 Meertaligheid

IAAS is een internationale organisatie met leden die samen een heel aantal talen spre-ken. Een website die in verschillende talen beschikbaar is, vormt bijgevolg een plus-punt. Om de mogelijkheid hiervoor te voorzien werd gebruik gemaakt van een aan-gepaste versie van SiteTranslator, een collectie PHP-klassen (Eberhardt, 2004). Metbehulp van SiteTranslator kan een website volledig dynamisch gemaakt worden. Deimplementatie hiervan wordt besproken in paragraaf 4.4.

Als een bezoeker voor de eerste keer op de site komt, wordt deze weergegevenvolgens de taalvoorkeuren die deze bezoeker aangeduid heeft in zijn webbrowser.3 Alsaan deze taalvoorkeuren niet voldaan kan worden, wordt de site in een standaardtaalweergegeven, vastgelegd door de ontwikkelaar. Voor de IAAS-website werd Engelsingesteld als standaardtaal. Een bezoeker kan altijd de taal van de site veranderendoor op de bijhorende vlag te klikken (figuur 3.6).

Figuur 3.6: Taalkeuze

Vertalers kunnen interactief werken: eenmaal ze ingelogd zijn, kunnen stukken tekstdie ze wensen te vertalen aangeklikt worden (figuur 3.7a), waarna ze op een vertaal-pagina terecht komen (figuur 3.7b). De vertaalde tekst is onmiddellijk beschikbaar. Alsde redacteur van de site een stuk tekst van de standaardtaal aanpast, kan hij ervoorzorgen dat deze tekst in de andere talen gemarkeerd wordt als ‘heeft een update nodig’.

Nog niet vertaalde tekstblokken worden weergegeven in de standaardtaal.

3Zie ook http://www.w3.org/International/questions/qa-lang-priorities.en.php

17

Page 28: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 3. FUNCTIONALITEIT VAN DE WEBSITE

(a) (b)

Figuur 3.7: a: Stukken tekst die beschikbaar zijn voor vertaling worden gemarkeerd; b: devertaalpagina’s

18

Page 29: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Hoofdstuk 4

Website: implementatie

De website is gemaakt met behulp van PHP, ingebed in XHTML, en de achterliggendedatabank is een MySQL-databank. In dit hoofdstuk wordt besproken hoe de site inelkaar zit, hoe de website en database communiceren en welke veiligheidsmaatregelengetroffen zijn. Ook een aantal extra functionaliteiten komen aan bod.

4.1 Markuptaal, programmeertaal en databank

Extensible HyperText Markup Language (XHTML) (W3C, 2002) is de opvolger van Hy-perText Markup Language (HTML) (Raggett et al., 1999c), de taal die algemeen ge-bruikt wordt voor internetpagina’s. Beide talen zijn markuptalen, d.w.z. talen die tekstzelf en informatie over die tekst combineren. Bij de IAAS-website werd gekozen voorXHTML 1.0 Strict:

< !DOCTYPE html PUBLIC ” − / /W3C/ / DTD XHTML 1.0 S t r i c t / / EN”” h t t p : / / www.w3 . org /TR/ xhtml1 /DTD/ xhtml1−s t r i c t . dtd ”>

PHP: Hypertext Preprocessor (PHP) (The PHP Group, n.d.) is een server-sidescripttaal, dit houdt in dat de verwerking gebeurt door een webserver en niet door debrowser van een gebruiker. Met PHP kunnen webpagina’s dynamisch gemaakt wordenin plaats van statisch, dit wil zeggen dat de inhoud van een pagina afhangt van eenaantal voorwaarden, een dynamische pagina wordt dan ook pas aangemaakt op hetmoment dat deze opgevraagd wordt. PHP kan op zowat alle platformen en serversgedraaid worden en is vrij beschikbaar, wat meteen ook het belangrijkste argumentwas bij de keuze voor PHP.

Voor de achterliggende databank werd gekozen voor MySQL (MySQL AB, n.d.c)wegens het vrij beschikbaar zijn van MySQL en de goede integratie tussen MySQL enPHP. Om de databank op te zetten werd gebruik gemaakt van phpMyAdmin. Het iseen programma geschreven in PHP om MySQL-databanken via internet te beheren.Het programma kan eenvoudig databanken, tabellen en gegevensvelden aanmakenen verwijderen. Er kunnen zonder moeilijkheden aanpassingen in de databank gedaanworden. Het grote voordeel is het importeren en exporteren van een volledige databank(phpMyAdmin Developers Team, 2007).

19

Page 30: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

Om lokaal te kunnen testen werd gebruikt gemaakt van MAMP1 en WAMP,2 pro-gramma’s die Apache Hypertext Transfer Protocol (HTTP) Server, PHP, MySQL enphpMyAdmin installeren en meteen alle instellingen goed zetten.

4.2 Databankconnectie

Een interface staat in voor de communicatie tussen twee systemen. Zo wordt bijvoor-beeld een interface tussen een computer en een gebruiker een user interface genoemd.Een applicatieprogramma-interface (API) is nodig om applicaties met databanksyste-men te laten communiceren. Een ingebouwde API om vanuit PHP te communicerenmet MySQL werd ontwikkeld door de PHP-gemeenschap (The PHP Group, 2007c,d).Een aantal van deze functies zijn weergegeven in tabel 4.1.

Tabel 4.1: MySQL-gerelateerde functies in PHP (The PHP Group, 2007c)

functie omschrijvingmysql connect() maak een verbinding met een MySQL-servermysql select db() selecteer een MySQL-databasemysql query() verstuur een MySQL-querymysql insert id() geef de id die gegenereerd werd door de vorige insert-querymysql error() geef de tekst van het foutbericht van de vorige MySQL-operatiemysql close() sluit de MySQL-verbinding

Voor het opzetten van de verbinding met de databank vanuit PHP en de verwer-king van de resultaten van MySQL werd gebruik gemaakt van twee klassen, DB enDB Result, geschreven door Corbyn (2006). De (aangepaste) broncode van deze klas-sen bevindt zich in bijlage B.

De klasse DB staat in voor de verbinding met de databank. In index.php (zie pa-ragraaf 4.3) wordt een connectie opgezet door een variabele van het type DB aan temaken.

$db = new DB( $mysqlServer , $mysqlUsername , $mysqlPassword , $mysqlDb ) ;

Met de functie query() van de klasse DB kunnen operaties uitgevoerd worden op dedatabank.

$ r e s u l t = $db−>query ( ”SELECT * FROM nat iona l commi t tees ORDER BYName” ) ;

Deze functie geeft een variabele van het type DB Result terug:

p u b l i c f u n c t i o n query ( $query ){ . . .r e t u r n new DB Result ( . . . ) ;}

1voor Macintosh (living-e AG, n.d.)2voor Windows (Pierre de Geyer et al., n.d.)

20

Page 31: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

De klasse DB Result biedt iteratormethoden, zo kan het resultaat van de query op devolgende manier doorlopen worden:

for ( $ resu l t−> f i r s t ( ) ; ! $ resu l t−>end ( ) ; $ resu l t−>next ( ) ) {$NC[ $ resu l t−>NC ID ] = $ resu l t−>Name;

}

4.3 Bestandsstructuur

De website is opgebouwd uit verschillende modules, gebaseerd op het voorbeeld uitUllman (2007a). Dezelfde indexpagina blijft staan, maar afhankelijk van de waardendoorgegeven via de url, wordt een andere module ingevoegd. Daarnaast worden inindex.php de bestanden nodig voor de configuratie en opmaak van de website, voor deconnectie met de database en voor de authenticatie van gebruikers opgevraagd. Eenoverzicht van de structuur van de site is weergegeven in figuur 4.1.

Figuur 4.1: Bestandsstructuur van de website. Het bestand PEAR.php en de mappenPEAR en HTML zijn PEAR-pakketten (zie paragraaf 4.5) en werden manueelingevoegd

21

Page 32: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

4.3.1 Configuratiebestand

Bij het ontwikkelen van een website worden webpagina’s vaak eerst lokaal aangemaakten getest en daarna pas geupload naar de online webserver. Beide omgevingen verei-sen verschillende instellingen.

Om te bepalen of de website lokaal gedraaid wordt of niet wordt in config.inc.php ge-test op het adres van de server. Voorbeelden van lokale adressen zijn http://localhost,http://10.0.0.2 en 192.168.0.2.3

i f ( s t r i s t r ($ SERVER[ ’HTTP HOST ’ ] , ’ l o c a l ’ )| | ( substr ($ SERVER[ ’HTTP HOST ’ ] , 0 , 7) == ’ 192.168 ’ )| | ( substr ($ SERVER[ ’HTTP HOST ’ ] , 0 , 3) == ’ 10. ’ ) ) {

$ l o c a l = TRUE ;} else {

$ l o c a l = FALSE ;}

Afhankelijk van de waarde van $local worden de foutmeldingen op het scherm ge-toond (lokaal) of via mail verstuurd (online) en worden de waarden van BASE URI enBASE URL aangepast. BASE URI is het absolute pad naar de rootmap van de site opde server, BASE URL is de hostnaam, plus eventueel een map, waarin het hoofdbe-stand (bijvoorbeeld index.php) staat. Bijvoorbeeld een PHP redirect naar de hoofdpa-gina ziet er dan als volgt uit:

header ( ’ Locat ion : ’ .BASE URL ) ;

Bij het verplaatsen van de website naar een andere webserver moeten dan enkel dewaarden van BASE URI en BASE URL in het configuratiebestand aangepast worden.

Met behulp van de my error handler()- en set error handler()-functies kan de manierwaarop omgegaan wordt met fouten aangepast worden. config.inc.php zorgt ervoordat, wanneer er een fout optreedt, een boodschap gegenereerd wordt met daarin denaam van het bestand waarin de fout gebeurt en het tijdstip van de fout. Daarnaastwordt ook elke bestaande variabele toegevoegd, met als doel over zoveel mogelijkinformatie te beschikken om daarmee de oorzaak van de fout te kunnen achterhalen.

4.3.2 Database

De bestanden nodig om toegang te krijgen tot de database bevinden zich boven derootmap van de site op de server ter extra beveiliging.

4.3.3 HTML-sjabloon

Alle HTML-code die hetzelfde is voor elke pagina staat in aparte bestanden die dan in-gevoegd worden in index.php. Het bestand header.inc.php heeft de volgende structuur:

3Het eerste adres verwijst rechtstreeks naar ‘deze computer’, de laatste twee adressen zijn voorbeel-den van adressen van computers in een privaat netwerk, zie ook Rekhter et al. (1996)

22

Page 33: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

< !DOCTYPE html PUBLIC ” − / /W3C/ / DTD XHTML 1.0 S t r i c t / / EN”” h t t p : / / www.w3 . org /TR/ xhtml1 /DTD/ xhtml1−s t r i c t . dtd ”><html xmlns= ” h t t p : / / www.w3 . org /1999/ xhtml ” xml : lang= ” en ” lang= ” en ”><head>

. . .< / head>

<body id= ” body ”><div id= ” f l a g s ”> . . .< / div>

<div id= ” header ”> . . .< / div>

<div id= ” s idebar ”> . . .< / div>

<div id= ” content ”>

In footer.inc.php moeten dan nog enkele tags afgesloten worden.

< / div>

< / body>< / html>

Opmaak

De opmaak werd gedaan met Cascading Style Sheets (CSS) (W3C, 2007). Het menuvan de site bevat een vakje met daarin een overzicht van de beschikbare stijlen:

<div id= ” s t y l e s w i t c h e r ”><p>Choose your s t y l e :<br />&nbsp ;&nbsp ;&nbsp ;<a href= ” Sty leSwi tcher . php?set=iaasRenewed ”>IAAS look< / a><br />&nbsp ;&nbsp ;&nbsp ;<a href= ” Sty leSwi tcher . php?set= iaas2 ”>IAAS look I I< / a>< / p>

< / div>

De keuze van de gebruiker wordt bijgehouden in een cookie (StyleSwitcher.php).

$set = $ GET [ ’ se t ’ ] ;$set = preg replace ( ’ # [ ˆ a−zA−Z0−9 −]# ’ , ’ ’ , $set ) ;setcookie ( ’ s i t e s t y l e ’ , $set , time ( )+31536000);header ( ’ Locat ion : ’ . $ SERVER[ ’HTTP REFERER ’ ] . ’ ’ ) ;

Deze cookie wordt gelezen in het head-gedeelte van de HTML-code. Indien hij niet isingesteld wordt iaasRenewed.css genomen als opmaakbestand.

<l i nk r e l = ” s t y l eshee t ” href= ” css<?php echo ( ! i s s e t ($ COOKIE[ ” s i t e s t y l e ” ] ) ) ? ” / iaasRenewed ” : ” / ” . $ COOKIE [ ” s i t e s t y l e ” ] ?>.css ” type= ” t e x t / css ” media= ” a l l ” />

Voorgaande code is gebaseerd op Asmussen (2005).

4.3.4 Modularisering

Elke link binnen de website neemt de vorm ‘BASE URLindex.php?p=module’ aan. ‘p’is een voorbeeld van een GET-variabele. index.php bepaalt aan de hand hiervan welke

23

Page 34: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

module ingevoegd moet worden.

i f ( isset ( $ GET [ ’ p ’ ] ) ) {$p = $ GET [ ’ p ’ ] ; / / u r l

}e l s e i f ( isset ($ POST [ ’ p ’ ] ) ) { / / form

$p = $ POST [ ’ p ’ ] ;}else {

$p = NULL ;}

Met behulp van een switch wordt bepaald welke pagina en paginatitel getoond moetenworden.

switch ( $p ) {case ’ about ’ :

$page = ’ about . i nc . php ’ ;$ p a g e t i t l e = ’ About IAAS ’ ;break ;

case ’ r e g i s t r a t i o n ’ :$page = ’ r e g i s t r a t i o n . i nc . php ’ ;$ p a g e t i t l e = ’ R e g i s t r a t i o n Pages ’ ;break ;

. . .defaul t :

$page = ’ main . i nc . php ’ ;$ p a g e t i t l e = ’Home Page of the I n t e r n a t i o n a l

Assoc ia t ion o f Students i n A g r i c u l t u r a l and Related Sciences ’ ;break ;

}

Instellen van een defaultpagina is belangrijk om te vermijden dat url’s zoals in-dex.php?p=link/naar/een/gevaarlijk/script.php uitgevoerd kunnen worden, bij zulke po-gingen wordt dan gewoon main.inc.php ingevoegd.

Een extra beveiliging bestaat erin na te gaan of de opgegeven module effectiefbestaat, als niet dit zo is, wordt main.inc.php ingevoegd.

i f ( ! f i l e e x i s t s ( ’ . / modules / ’ . $page ) ) {$page = ’ main . i nc . php ’ ;$ p a g e t i t l e = ’Home Page of the I n t e r n a t i o n a l Assoc ia t ion

o f Students i n A g r i c u l t u r a l and Related Sciences ’ ;}

Als de module rechtstreeks opgevraagd wordt, moet de gebruiker doorverwezenworden naar de hoofdpagina. Dit kan bijvoorbeeld door na te gaan of de constanteBASE URL gedefinieerd is of niet, aangezien deze enkel in config.inc.php gedefinieerdwordt. Na deze code volgt dan de inhoud van de webpagina, ofwel nog een switch, diedan werkt met een andere GET-variabele.

24

Page 35: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

i f ( ! defined ( ’BASE URL ’ ) ) {

requ i re once ( ’ . . / i nc ludes / con f i g . i nc . php ’ ) ;

$ u r l = BASE URL . ’ index . php ’ ;header ( ” Locat ion : $ u r l ” ) ;ex i t ;

}

<h1>T i t e l< / h1><p> t e k s t< / p>

Meerdere GET-variabelen

Bepaalde karakters hebben een speciale betekenis in HTML en/of XHTML en moe-ten daarom gecodeerd worden voorgesteld indien de letterlijke betekenis gevraagd is.Dit geldt bijvoorbeeld voor het ‘<’-teken in HTML en XHTML, dat het begin van eentag aanduidt. Om ‘<’ te schrijven in de betekenis van ‘is kleiner dan’ moet dan ‘&lt;’gebruikt worden. ‘&lt;’ wordt een ‘entity reference’ genoemd (Raggett et al., 1999a).Veel browsers laten incorrect gebruik van ampersands toe, ze vervangen ze namelijkdoor een letterlijke ampersand indien de hele code niet op een ‘entity reference’ lijkt. InXHTML kan dit echter niet meer (W3C, 2002).

In PHP worden ampersands gebruikt bij het scheiden van GET-variabelen in eenurl, en bij sessies. Om een XHTML-document correct te laten valideren moeten al dezeampersands gecodeerd worden in de XHTML-code met behulp van ‘&amp;’, en hetkarakter dat PHP gebruikt om argumenten te scheiden moet veranderd worden. Ditkan via het aanpassen van het bestand php.ini, door de PHP-instellingen te wijzigen ineen .htaccess-bestand of door in een PHP-bestand zelf bepaalde code mee te geven(Dorward, 2005).

Een andere mogelijkheid is om meteen het karakter te veranderen naar bijvoorbeeldeen puntkomma, die niet gecodeerd moet worden. Dit werd bij deze thesis gebruikt. Deinstellingen werden veranderd via een .htaccess bestand:

<I fModule mod php5 . c>php value arg separa to r . output ” ; ”php value arg separa to r . i npu t ” ; ”</ I fModule>

4.4 Meertaligheid

Om de website te kunnen aanbieden in verschillende talen werd gebruik gemaaktvan een aangepaste versie van SiteTranslator, een collectie PHP-klassen (Eberhardt,2004). Om ook ondersteuning te bieden voor talen die niet met het Romeinse schriftgeschreven worden, werd gekozen voor UTF-8.

25

Page 36: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

4.4.1 Unicode - UTF-8

Een computer werkt enkel met enen en nullen. Om karakters voor te stellen moet daar-om aan elk karakter een bitsequentie toegekend worden. Hiervoor bestaan verschillen-de manieren, vaak afhankelijk van de karakterset (Latijns schrift, Cyrillisch schrift, enzo-voort). Aangezien de website moet werken met zoveel mogelijk verschillende schriftenwerd gekozen voor Unicode.

De Unicode-standaard is ontworpen om aan om het even welk karakter een unieknummer toe te kennen. Zo komt bijvoorbeeld het karakter ‘A’ (Latin capital letter a withgrave) overeen met de code 00C0 (The Unicode Consortium, 2006). Dit karakter, ofdeze code, moet dan nog worden omgezet naar een bitsequentie. Hiervoor bestaanverschillende codeersystemen. Een daarvan is 8-bit Unicode Transformation Format(UTF-8). UTF-8 bevat een, twee, drie of vier bytes per teken. Zo wordt geen ruimteverspild bij korte tekens, zoals de letters van het Latijnse alfabet. Ter illustratie: ‘A’wordt in UTF-8 weergegeven door C3 80, ofwel 11000011 10000000.

De volgende paragrafen zijn voor een deel gebaseerd op Round (2007) en WACTDevelopment Team (2007).

HTML/XHTML en UTF-8

Om een document correct te laten weergeven in een webbrowser, moet de codering al-tijd gedeclareerd worden. Een eerste manier is het meegeven van de informatie over dekarakterset in de HTTP-header. Als een bezoeker de pagina opvraagt (HTTP-request)dan zal in de HTTP-response de juiste karakterset van de opgevraagde pagina getoondworden. In PHP wordt dit bekomen door de volgende code op te nemen:4

header ( ’ Content−Type : t e x t / html ; charset=UTF−8 ’ ) ;

Daarnaast kan de karaktersetspecificatie in het document zelf opgenomen worden viaeen meta-tag, die best zo hoog mogelijk in de head-tag geplaatst wordt.

<head>

<meta ht tp−equiv= ” Content−type ” content= ” t e x t / html ; charset=UTF−8” />< t i t l e>IAAS< / t i t l e>

< / head>

In XHTML-documenten moet boven de DOCTYPE-declaratie een Extensible MarkupLanguage (XML)-declaratie opgenomen zijn:

<?xml version= ” 1.0 ” encoding= ”UTF−8” ?>

of binnen PHP:

echo ’<?xml vers ion = ”1 .0 ” encoding =”UTF−8”?> ’ ;

Als alle methodes toegepast worden, zijn de prioriteitsregels als volgt (Ishida, 2007):1. HTTP Content-Type2. XML-declaratie4Dit moet bovenaan in de code komen maar wel na eventuele code die session start() aanroept

26

Page 37: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

3. declaratie in de meta-tag

Met het attribuut ‘accept-charset’ van de form-tag wordt aangeduid welke coderingaanvaard wordt door de server die het formulier moet verwerken. Als dit attribuut weg-gelaten wordt, wordt de standaardwaarde ”unknown” ingevuld. Browsers kunnen dezewaarde interpreteren als de waarde die gebruikt werd bij het doorsturen van het be-stand dat het formulier bevat (Raggett et al., 1999b). Met de volgende regel wordtingevulde informatie zeker in UTF-8-codering verstuurd:

<form accept−charset= ”UTF−8”>

Om zoveel mogelijk te verzekeren dat alle browsers de inhoud correct zullen weer-geven en dat alle ingevoerde informatie correct verwerkt zal worden, werd bij de IAAS-website al het voorgaande toegepast. Om de juiste ‘Content-Type’-header te bekomenwerd de volgende code geplaatst:

i f ( s t r i s t r ($ SERVER[ ’HTTP ACCEPT ’ ] , ’ a p p l i c a t i o n / xhtml+xml ’ )| | s t r i s t r ($ SERVER[ ’HTTP USER AGENT ’ ] , ’ W3C Validator ’ ) ) {

header ( ’ Content−Type : a p p l i c a t i o n / xhtml+xml ; charset=UTF−8 ’ ) ;} else {

header ( ’ Content−Type : t e x t / html ; charset=UTF−8 ’ ) ;}

Op deze manier wordt aan browsers die XML kunnen parsen, en dus het mime-type‘application/xhtml+xml’ aanvaarden, doorgegeven dat het om een XML-document gaat,terwijl aan browsers die geen XML kunnen parsen, het mime-type ‘text/html’ doorgege-ven wordt (figuur 4.2).

Figuur 4.2: Pagina-info van de IAAS-website. Firefox herkent XML, bij ‘Type’ staat dan ook‘application/xhtml+xml’. Dit heeft voorrang op de declaratie in de meta-tag

MySQL en UTF-8

Goede Unicode-ondersteuning is aanwezig in MySQL vanaf versie 4.1 (Winstead, n.d.).Bij het aanmaken van een databank of een tabel moeten zowel de karakterset als de

27

Page 38: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

manier van sorteren van stukjes tekst (collation)5 opgegeven worden. Dit gebeurt metde sleutelwoorden DEFAULT CHARACTER SET, COLLATE en CHARSET (zie sec-tie 4.4.2 voor meer uitleg over tabel ‘text gb’):

CREATE iaasDatabaseDEFAULT CHARACTER SET u t f 8COLLATE u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ t ex t en ‘ (‘ textKey ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL,‘ tex tValue ‘ t e x t col la te u t f 8 u n i c o d e c i NOT NULL,‘ lastUpdate ‘ datet ime NOT NULL defaul t ’ 0000−00−00 00:00:00 ’ ,

PRIMARY KEY ( ‘ textKey ‘ )) ENGINE=MyISAM DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

PHP en UTF-8

Om in PHP met strings te werken die gecodeerd zijn volgens een karakterset waarin(een deel van) de karakters door meer dan een byte voorgesteld worden, zoals UTF-8,is de mbstring-bibliotheek6 ontworpen (The PHP Group, 2007b). Om met UTF-8 tewerken moeten aan het begin van de code de volgende regels opgenomen worden:

mb language ( ’ un i ’ ) ;mb internal encoding ( ’UTF−8 ’ ) ;

Tenslotte moeten PHP en MySQL nog met elkaar communiceren in UTF-8. Ditwordt bereikt door het volgende te plaatsen na de code voor het maken van de connec-tie met MySQL:

mysql query ( ”SET NAMES ’ u t f 8 ’ COLLATE ’ u t f 8 u n i c o d e c i ’ ” ) ;

Hiermee wordt aan de databank duidelijk gemaakt dat toekomstige boodschappen af-komstig van de webserver in UTF-8 gecodeerd zullen zijn. De databank zal dan ookUTF-8 gebruiken voor het terugsturen van antwoorden (MySQL AB, n.d.a).

4.4.2 SiteTranslator

Webpagina’s

Alle statische tekst die zich normaal gezien bevindt in HTML- of XHTML-code wordt nuin een databank geplaatst. Elk stukje tekst wordt gekenmerkt door een korte omschrij-ving, en met behulp van deze sleutelwaarde kan de bijhorende tekst uit de databankopgevraagd worden. Zo wordt bijvoorbeeld

5Bijvoorbeeld in het Duits komt de o voor de z, in het Zweeds is het omgekeerd. Zie Davis & Whistler(2006) voor meer informatie over het Unicode Collation Algorithm

6mbstring is niet standaard geınstalleerd (The PHP Group, 2007b), met phpinfo() kan gecontroleerdworden of mbstring geactiveerd is of niet

28

Page 39: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

<div id= ” o b j e c t i v e ”>To promote the exchange of experience , knowledge and ideas ,and to improve the mutual understanding between studentsi n the f i e l d o f a g r i c u l t u r e and r e l a t e d sciencesa l l over the world< / div>

vervangen door

<div id= ” o b j e c t i v e ”><?php echo $ t r a n s l a t o r −>getLoca l i sedText ( ” IAASobject ive ” )?>

< / div>

Databank

Bij elke taal hoort een tabel met dezelfde structuur als die van de standaardtaal (fi-guur 4.3). De naam van elke tabel moet opgesteld zijn volgens het formaat ‘text #’,waarbij # staat voor de code van de taal volgens de specificaties van de Internet Engi-neering Task Force (IETF).7 De sleutelwaarden moeten in elke tabel dezelfde zijn, enals een sleutelwaarde niet aanwezig is in de tabel van de opgevraagde taal, wordt detekst van de standaardtaal weergegeven.

Tabel text entextKey: textValue: lastUpdate:varchar(50) text datetime

Tabel text nltextKey: textValue: lastUpdate:varchar(50) text datetime

Figuur 4.3: Hoofding van de tabellen in de databank van SiteTranslator. Tabel ‘text en’bevat de Engelse tekst, tabel ‘text nl’ de Nederlandse vertalingen

Als een vertaler of redacteur inlogt en daarna op een vertaallink bij een stuk tekstklikt, komt hij terecht op een vertaalpagina. De achterliggende code zorgt ervoor datalle ingevoerde tekst naar de databank gaat, samen met de datum en het uur van dewijziging, en meteen weergegeven kan worden op de website.

De klassen van SiteTranslator

SiteTranslator bestaat uit vijf klassen. De samenhang tussen deze klassen en hunvariabelen en methoden zijn weergegeven in figuur 4.4.

• SiteTranslatorConfig: klasse die de informatie over de vertalers en een lijst vande ondersteunde talen bevat.

• SiteTranslator: elke pagina die meertalige inhoud bevat moet een instantie aan-maken van deze klasse. De klasse bepaalt de meest geschikte taal voor de ge-bruiker, maar de taal kan daarna aangepast worden door de gebruiker zelf. Demeest gebruikte methode van deze klassen is getLocalisedText(), zie hierboven.

• LocalisedTextBase: een abstracte klasse die zorgt voor persistentie.

7Zie Ishida (2006) voor meer informatie

29

Page 40: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

Figuur 4.4: De klassen van SiteTranslator. Overerving wordt voorgesteld door —B, en 99Kstelt een ‘gebruikt’ (‘uses’) -relatie voor, conform de UML-notatie

• LocalisedTextBaseMySQL: klasse die persistentie aanbiedt aan de hand van eenMySQL-databank

• SiteTranslatorAdmin: klasse die overerft van SiteTranslator en een aantal functiesaanbiedt voor vertalers en redacteurs.

4.5 PEAR

PHP Extension and Application Repository (PEAR) is een project dat ontstaan is kortnadat PHP werd ontwikkeld. Het bestaat uit veel delen, maar het meest gebruikte iseen bibliotheek van open source PHP-code onder de vorm van pakketten. Elk PEAR-pakket heeft zijn eigen programmeurs en documentatie (The PHP Group, 2007a). Eenpakket wordt verdeeld als een tar-bestand met een XML bestand (package.xml) datinformatie bevat over het betreffende pakket. Via de PEAR Package Manager kunnen

30

Page 41: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

pakketten automatisch gedownload, geınstalleerd en verwijderd worden. De PEARpakketten kunnen ook manueel geınstalleerd worden.8

Doordat de PEAR-pakketten kwalitatief zeer goed zijn, verhoogt het zowel de her-bruikbaarheid als de betrouwbaarheid van de eigen geschreven code. PEAR-pakkettenworden geschreven bovenop de bestaande PHP-functies en ze hebben vaak een ob-jectgeorienteerde stijl (met klassen). De modules worden in de php-bestanden via eeninclude()- of require()-statement ingevoerd.

4.5.1 HTML QuickForm

HTML QuickForm is een PEAR-pakket dat gebruikt wordt om HTML-formulieren temaken(Apress Publishing, 2004). Het wordt geınstalleerd in de map HTML, die zich ophetzelfde niveau bevindt als de map PEAR (zie ook figuur 4.1). Om gebruik te makenvan het pakket, moet er in de php-file een verwijzing gebeuren aan de hand van eenrequire()- of include()-statement:

require ( ’HTML/ QuickForm . php ’ ) ;

De gebruikelijke form-tag in de HTML-code wordt vervangen door een constructor,waaraan verschillende argumenten kunnen worden meegegeven. Het eerste argumentis de naam van het formulier. Het tweede argement bepaalt de HTTP-methode waarophet formulier wordt doorgestuurd. Default staat deze waarde op ‘post’. Hierbij wordende gegevens van het formulier doorgegeven via de body, dit in tegenstelling tot de ‘get’-HTTP-methode waarbij de waarden achter de url geplaatst worden, gescheiden dooreen scheidingsteken (zie ook paragraaf 4.3.4). Het derde argument duidt het bestandaan dat de verwerking van de gegevens verzorgt.

$form = new HTML QuickForm ( ’ addevent ’ , ’ post ’ , ’ event . php ’ ) ;

Er bestaan meer dan twintig bouwstenen om een formulier op te stellen, waaronderde gekende elementen select, text, radio, button en checkbox (zie tabellen 4.2 en 4.3voor een overzicht). Met de functie addElement() van HTML QuickForm kunnen zowelhet element als het label aangemaakt worden. In een array kunnen extra opties gede-finieerd worden. Voor het maken van een tekstveld met naam ‘name’, label ‘Name’ eneen maximum lengte van 50 karakters wordt volgende regel gebruikt:

$form−> addElement ( ’ t e x t ’ , ’name ’ , ’Name ’ , ’ maxlength ’ => 50 ) ;

Het grote voordeel van HTML QuickForm is het werken met ingebouwde validatie-regels (zie tabel 4.4 voor een overzicht). Deze validatieregels kunnen gebruikt wordenom de integriteitsregels (die in MySQL niet ondersteund worden) te implementeren.Een handige regel is de controle op invoer: ‘required’. Er wordt een rood sterretje ge-plaatst bij het veld waar invoer verplicht is zodat gebruikers geen belangrijke gegevensvergeten in te vullen. De foutboodschap kan verschijnen via een pop-upvenster (ziefiguur 4.5a) of wordt aangeduid op het formulier met een rood kader rond het veld (zie

8Om de pakketten manueel te installeren, kan de PEAR manual geraadpleegd worden. Zie ook figuur4.1

31

Page 42: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

Tabel 4.2: Formulierelementen van QuickForm die standaard aanwezig zijn in HTML (Ullman,2007b)

Naam Resultaatbutton knopcheckbox aankruisvakfile tekstveld plus bladerknophidden verborgen invoerimage afbeelding als knoppassword wachtwoordveldradio keuzerondjereset resetknopselect keuzelijstsubmit submitknoptext tekstveldtextarea tekstvak

Tabel 4.3: Formulierelementen van QuickForm die niet aanwezig zijn in HTML (Ullman, 2007b)

Naam Resultaatadvcheckbox slim aankruisvak, zorgt ervoor dat een waarde wordt doorgegeven

ook als het aankruisvak niet aangekruist isautocomplete Javascript-aangestuurd tekstveld dat vooraf vastgelegde waarden

kan suggererendate serie keuzelijsten voor dag, maand en jaargroup groep elementen die samenhorenheader titel van een onderdeel van een formulierhiddenselect verborgen keuzelijsthierselect voegt keuzelijsten toe waarbij de mogelijke waarden van de ene

keuzelijst afhangen van die van een andere lijsthtml voegt HTML-code toelink plaatst een link in het formulierstatic voegt statische tekst toe aan het formulier, bv. uitleg bij een be-

paald element

figuur 4.5b). Het vierde argument bepaalt of de informatie doorgestuurd wordt naareen frame of venster. Wanneer geen gebruik gemaakt wordt van een argument kan denull-waarde ingevuld worden.

$form−> addRule ( ’name ’ , ’ Enter a name ’ , ’ requ i red ’ , n u l l , ’ c l i e n t ’ ) ;

Een veel gebruikte regel is de regex-regel. Hiermee kan gecontroleerd worden of deingave van velden correct is. Regexregels werden onder andere toegepast op telefoon-nummers, faxnummers en url-adressen. Naast de ingebouwde validatieregels kunnenook zelf geschreven functies gebruikt worden. De functie moet dan eerst geregistreerdworden vooraleer hij kan toegepast worden op een veld.

$form−> addRule ( ’ u r l ’ , ’ Enter a c o r r e c t u r l ’ , ’ regex ’ , ’ formule ’ ,’ c l i e n t ’ ) ;

32

Page 43: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

Tabel 4.4: Validatieregels van QuickForm (Ullman, 2007b)

Naam Betekenisrequire moet ingevuld of aangeduid wordenmaxlength kan niet meer karakters hebben dan deze waardeminlength moet minstens zoveel karakters tellenrangelength moet binnen een bepaalde lengte liggenregex moet overeenkomen met een bepaalde reguliere uitdrukkingemail is een geldig e-mailadresemailorblank is een geldig e-mailadres of is leeglettersonly bestaat uit enkel lettersalphanumeric bestaat uit enkel letters en cijfersnumeric bestaat uit enkel cijfersnopunctuation alles behalve interpunctienonzero een nummer dat niet met 0 begintcompare vergelijk een of meerdere elementenuploadedfile het element moet een geupload bestand bevattenmaxfilesize het geuploade bestand mag niet groter zijn dan deze waarde (in

bytes)mimetype het geuploade bestand moet dit als mime-type hebbenfilename het geuploade bestand moet een bestandsnaam hebben die vol-

doet aan een bepaalde reguliere uitdrukking

$form−> r eg i s t e rRu le ( ’ name unique email ’ , ’ f u n c t i o n ’ ,’ f unc t i on un ique ema i l ’ ) ;$form−> addRule ( ’ emai l ’ , ’ Enter an other e−mai l ’ ,’ name unique email ’ ) ;

Als alle elementen van het formulier aangemaakt zijn met bijhorende validatieregels,kan het formulier weergegeven worden:

$form−> d i sp lay ( ) ;

Wanneer aan alle regels voldaan is, kan het verwerken van het formulier beginnen.Er wordt gebruik gemaakt van de functie validate() om dit te controleren. Wanneer nietvoldaan is aan een regel, zal het (ingevulde) formulier opnieuw getoond worden. Hetophalen van de gegevens van het formulier gebeurt via $form->exportValues() waarbijde waarden opgeslagen worden in een rij met als indices de namen van de elementen.

4.5.2 Vreemde sleutels en hierselect

In sommige gevallen werd gebruik gemaakt van een klasse van HTML QuickForm omvreemde sleutels te selecteren: ‘HTML QuickForm hierselect’. Met deze klasse is hetmogelijk om dynamische lijsten te maken. Afhankelijk van de keuze in de eerste lijst,verandert de inhoud van een tweede en eventueel ook derde lijst. Om de hierselect vanfiguur 4.6 te bekomen, werd het onderstaande stuk code gebruikt.

$ r e s u l t = $db−>query ( ”SELECT NC ID , LC ID , Name FROM loca l commi t tees

33

Page 44: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

(a)

(b)

Figuur 4.5: a: Validatie aan de clientzijde: de boodschap verschijnt in een pop-upvenstergebruikmakend van JavaScript; b: Validatie aan de serverzijde: de boodschapverschijnt in een rood kader

INNER JOIN groupsON LC ID = Group ID WHERE Act i ve = 1 ORDER BY Name” ) ;

for ( $ resu l t−> f i r s t ( ) ; ! $ resu l t−>end ( ) ; $ resu l t−>next ( ) ) {$LCperNC [ $ resu l t−>NC ID ] [ $ resu l t−>LC ID ] = $ resu l t−>Name;

}

$ r e s u l t = $db−>query ( ”SELECT Person ID , FirstName , LastName ,persons . LC ID AS ’ LCID ’ ,NC ID FROM persons INNER JOIN loca l commi t tees USING ( LC ID )ORDER BY FirstName ” ) ;

for ( $ resu l t−> f i r s t ( ) ; ! $ resu l t−>end ( ) ; $ resu l t−>next ( ) ) {$ l i s tO fPersons [ $ resu l t−>NC ID ] [ $ resu l t−>LCID ] [ $ resu l t−>Person ID ]= <<< EONAME

$resu l t−>FirstName $resu l t−>LastNameEONAME;

34

Page 45: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

(a)

(b)

Figuur 4.6: a: In de eerste lijst moet een NC gekozen worden; b: een tweede en derde lijstworden beschikbaar na het aanklikken van IAAS Belgium vzw

}

$sel =& $form−>addElement ( ’ h i e r s e l e c t ’ , ’ person ’ , ’ Person ( s e l e c t v iaNat iona l and Local Committee ) ’ ) ;$sel−>setOpt ions ( array ($NC, $LCperNC , $ l i s tO fPersons ) ) ;

De arrays worden respectievelijk opgevuld met de nationale comites, lokale comitesen personen die in de databank opgeslaan zijn. De indices van de arrays werdensteeds ingevuld door een primaire sleutel. Het zijn namelijk deze indices die wordendoorgegeven eenmaal het formulier gevalideerd is.

De voorgaande code bevat een interessante methode van PHP om een string tespecifieren: de heredoc-syntax. Deze syntax is erg nuttig voor het schrijven van groteblokken tekst gecombineerd met variabelen, omdat deze niet moeten geescaped wor-den. De operator in de heredoc-syntax is <<<. Direct erna wordt een label zonderaanhalingstekens verwacht dat het begin aanduidt van een meerregelige string. PHPzal doorgaan met het invoegen van volgende regels totdat hetzelfde label aan het beginvan een regel opnieuw voorkomt. Dit eindelabel mag niet inspringen, anders wordt hetals tekst gezien (The PHP Group, 2007e).

4.5.3 HTML QuickForm Renderer Tableless

HTML QuickForm Renderer Tableless is een uitbreiding van HTML QuickForm. Hetvervangt de default vertaler van HTML QuickForm, gebruikt enkel CSS en XHTML entoont het formulier zonder het gebruik van table-tags. Om dit pakket te gebruiken, moetopnieuw een include()- of require()-statement gebruikt worden. Het weergeven van hetformulier gebeurt via de variabele $renderer.

$renderer =& new HTML QuickForm Renderer Tableless ( ) ;$form−>accept ( $renderer ) ;echo $renderer−>toHtml ( ) ;

35

Page 46: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

4.6 Authenticatiesysteem

Het ontwerp van het authenticatiesysteem is gebaseerd op Converse et al. (2006).

4.6.1 Registratie

Figuur 4.7: Registratieformulier

Bij registratie wordt aan de gebruiker gevraagd om enkel de velden in te vullen dieniet null mogen zijn in de databank (figuur 4.7), de andere velden kunnen later ingevuldworden, bij het aanpassen van het profiel. Naast het verplicht zijn van alle velden in ditregistratieformulier gelden nog de volgende restricties:

• een loginnaam die enkel uit letters en cijfers bestaat en minimum drie karakterslang is, die nog niet voorkomt in de tabel ‘persons’ en die niet in de volgende lijstvoorkomt: root, bin, daemon, adm, lp, sync, shutdown, halt, mail, news, uucp,operator, games, mysql, httpd, nobody, dummy, www, cvs, shell, ftp, irc, debian,ns, download, anoncvs

• een geldig e-mailadres (dit wordt gecontroleerd aan de hand van een reguliereuitdrukking) dat nog niet voorkomt in de tabel ‘persons’

• een wachtwoord dat minimum 6 karakters lang is

Het wachtwoord wordt geencrypteerd opgeslagen in het veld Password door ereerst de MD5-hash van te berekenen (Rivest, 1992). Dit houdt in dat het wachtwoord

36

Page 47: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

Tabel 4.5: MD5-hashfunctie (Rivest, 1992)

invoer uitvoerLaTeX 5766dea037e9097ac6869424b65fe7b6authenticatie 8a3bb914236cdae1e2158c887156a0d3

omgezet wordt in een string van 32 karakters (tabel 4.5). Daarnaast wordt ook deMD5-hash van de string bestaande uit de concatenatie van het e-mailadres en een ge-heime string berekend, deze wordt ingevuld in het veld ConfirmHash. Deze geheimestring wordt gedefinieerd in een bestand dat in index.php ingevoegd wordt. Het veldIsConfirmed wordt op 0 gezet.

Vervolgens wordt een e-mail verstuurd naar het opgegeven e-mailadres met daarineen link waarmee de registratie bevestigd kan worden. Deze link bevat twee GET-variabelen, ‘hash’ en ‘email’. Hash is de waarde ingevuld in ConfirmHash, email ishet opgegeven e-mailadres, waarbij @ werd omgezet naar %40 met behulp van dePHP-functie urlencode().

4.6.2 Bevestiging van de registratie

In de pagina die opgeroepen wordt met de link in de e-mail wordt gecontroleerd of deMD5-hash van de GET-variabele ‘email’ met de geheime string gelijk is aan de GET-variabele ‘hash’. Hiermee wordt nagegaan of er niet geknoeid is met het e-mailadresin de link. Als deze twee strings gelijk zijn aan elkaar wordt IsConfirmed op 1 gezet, enkan de gebruiker inloggen.

4.6.3 Inloggen

Bij het inloggen wordt aan de hand van de volgende query gekeken of de opgegevenwaarden van login en wachtwoord zich in de databank bevinden:

SELECT Login , IsConfirmed , FirstName FROM persons WHERE Login =’ $ log in ’ AND Password = ’ $passwordmd5 ’

Als er een rij als resultaat wordt teruggeven en IsConfirmed op 1 staat, wordentwee cookies ingesteld, ‘login’ en ‘loginHash’, waarbij ‘loginHash’ de hash is van deloginnaam en de geheime string. Daarna volgt een redirect naar de hoofdpagina.

Het bestand login.php bevindt zich in dezelfde map als index.php en is dus geenmodule. Het instellen van cookies en het uitvoeren van een redirect kan namelijk nietplaatsvinden als de HTTP-headers al verzonden zijn, en dit gebeurt al in index.php bijhet verzenden van de ‘Content-Type’-header (zie paragraaf 4.4.1).

4.6.4 Toegangsbeperkingen

Sommige delen van de website zijn enkel toegankelijk voor ingelogde leden. Dezedelen worden afgeschermd door de inhoud enkel weer te geven als de functie userIs-

37

Page 48: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

LoggedIn() ‘true’ teruggeeft. Deze functie neemt de waarden van de cookies ‘login’ en‘loginHash’, berekent een nieuwe hash op basis van ‘login’ en de geheime string, encontroleert of de uitkomst daarvan overeenkomt met ‘loginHash’.

Voor sommige pagina’s is de toegang afhankelijk van de functie van de persoon.Hiervoor werden functies zoals userIsAdmin(), userIsEC(), userIsND(), . . . geschreven.Het resultaat van de functie hangt af van de waarden in de tabel ‘functies’.

4.6.5 Veranderen van persoonlijke gegevens

Elke gebruiker kan zijn persoonlijk profiel aanpassen. Een nieuw wachtwoord kan geko-zen worden, en als de gebruiker zijn wachtwoord vergeten is, wordt een nieuw, automa-tisch gegenereerd wachtwoord gemaild. Het e-mailadres kan ook veranderd worden, erwordt dan een mail uitgestuurd met de vraag om bevestiging (IsConfirmed wordt eerstopnieuw op 0 gezet, en bij de bevestiging terug op 1).

4.6.6 Uitloggen

Bij het uitloggen worden de cookies ‘login’ en ‘loginHash’ leeggemaakt waarna eenredirect naar de hoofdpagina plaatsvindt. Net zoals login.php bevindt logout.php zichop hetzelfde niveau als index.php.

4.7 Nieuwssectie en webfeed

Leden van het EC kunnen nieuwsberichten plaatsen op de website. Deze wordenbijgehouden in de tabel ‘news’ (zie figuur 4.8). Op dit moment wordt de tekst die onlineingevuld wordt zowel in de kolom ‘short’ als in de kolom ‘full’ geplaatst, maar eventueelkan het formulier later nog uitgebreid worden met een veld voor een korte samenvattingvan het bericht, die dan in ‘short’ terecht moet komen. De url, nodig voor de webfeed,wordt aangemaakt op basis van de waarde van de kolom ‘key’, die op autoincrementingesteld staat, en is van de vorm BASE URLindex.php?p=news;mode=view#key$key

Tabel newskey: title: url: short: full: newdate: author:int(11) varchar(255) varchar(255) text text datetime varchar(255)

Figuur 4.8: De tabel met de nieuwsberichten

Telkens een nieuwsbericht toegevoegd wordt, wordt de webfeed van de site auto-matisch bijgewerkt.9 Voor de implementatie hiervan werd gebruik gemaakt van eenaangepaste versie van de PHP-klasse FeedCreator (Blankenhorn et al., 2005), die ver-schillende formaten ondersteunt. Voor de IAAS-website werd gekozen voor Atom 1.0(Nottingham & Sayre, 2005).

9Hiervoor moeten de lees-, schrijf- en uitvoerrechten van het XML-bestand minstens op 666 ingesteldworden

38

Page 49: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

4.8 Beveiliging

In paragrafen 4.3 en 4.6 werden al een aantal veiligheidsaspecten besproken. In dezeparagraaf wordt verder ingegaan op invoer via formulieren en op het uploaden vanbestanden.

4.8.1 Formulieren

Formulieren zijn altijd een zwakke plek in een website aangezien op dat moment invoervan een gebruiker het systeem binnenkomt. Daarom is het belangrijk om, in de matevan het mogelijke, beperkingen op te leggen aan wat ingegeven kan worden.

In QuickForm zijn al een heel aantal regels ingebouwd waarmee foute invoer kantegengehouden worden (zie paragraaf 4.5.1) en daarnaast kunnen nog extra regelstoegevoegd worden. Verder kan invoer van tekstvelden en -vakken gefilterd wordenvooraleer het opgeslagen wordt in de databank. Op al deze elementen werd de volgen-de filter toegepast:

f u n c t i o n escape data ( $data ) {i f ( get magic quotes gpc ( ) ) {

$data = s t r i p s l a s h e s ( $data ) ;}r e t u r n mysq l rea l escape s t r i ng ( tr im ( $data ) ) ;

}$form−>a p p l y F i l t e r ( ’ ALL ’ , ’ escape data ’ ) ;

De functie mysql real escape string() transformeert strings zodat die veilig gebruiktkunnen worden in een Structured Query Language (SQL)-statement. Witruimte (spa-ties, tabs, . . . ) aan het begin en aan het einde wordt verwijderd door trim(). Alsget magic quotes gpc() ‘true’ teruggeeft, zal PHP automatisch slashes toevoegen bij$ GET-, $ POST- en $ COOKIE-variabelen. Deze mogen terug weggehaald wordenmet stripslashes(), aangezien de gegevens dus met mysql real escape string(trim())gefilterd worden.

4.8.2 Uploaden van bestanden

In de website is de mogelijkheid voorzien voor leden om een foto van zichzelf online teplaatsen bij hun profiel. Om de risico’s zoveel mogelijk te beperken werden restrictiesopgelegd voor de bestandsgrootte en het mime-type. Door te eisen dat de bestands-naam van de form mijnloginnaam.jpg of mijnloginnaam.jpeg moet zijn, gelden hier ookde restricties die oorspronkelijk bij het registreren werden opgelegd aan de loginnaam,namelijk dat deze tussen de 6 en 50 karakters lang moet zijn en enkel uit letters encijfers mag bestaan.

$formPic = new HTML QuickForm ( ’ changePic form ’ , ’ post ’ ,’ index . php?p= p r o f i l e ; mode=change#changePic ’ , ’ ’ , array( ’ accept−charset ’ => ’UTF−8 ’ , ’ enctype ’ => ’ m u l t i p a r t / form−data ’ ) ,

39

Page 50: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE

true ) ;

$formPic−>addElement ( ’ f i l e ’ , ’ avatar ’ , ’ Avatar ’ ) ;$formPic−>addElement ( ’ submit ’ , ’ submitPic ’ , ’ Upload p i c t u r e ’ ) ;

$formPic−>setMaxFi leSize (50000) ;$formPic−>addRule ( ’ avatar ’ , ’ Please upload a f i l e ’ , ’ up l oaded f i l e ’ ) ;$formPic−>addRule ( ’ avatar ’ , ’ Please choose an avatar o f maximum50 kB ’ , ’ max f i l e s i ze ’ , ’ 50000 ’ , ’ c l i e n t ’ ) ;$formPic−>addRule ( ’ avatar ’ , ’ Please only upload jpg− f i l e s ’ ,’ mimetype ’ , ’ image / jpeg ’ , ’ c l i e n t ’ ) ;$regexPic =’ / ( ˆ ’ . $ COOKIE [ ” l o g i n ” ] . ’ . jpg$ ) | ( ˆ ’ . $ COOKIE [ ” l o g i n ” ] . ’ . jpeg$ ) / ’ ;$formPic−>addRule ( ’ avatar ’ , ’ Please rename your avatar to” myloginname . jpg or myloginname . jpeg ” ’ , ’ f i lename ’ , $regexPic ,’ c l i e n t ’ ) ;

De lees-, schrijf- en uitvoerrechten van de map waarin de foto’s terechtskomen moe-ten op 777 ingesteld staan.

40

Page 51: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Besluit

Met deze thesis is de basis gelegd voor een webtoepassing voor IAAS. Aan de handvan onder andere een EER-diagram en de daaruit afgeleide databankstructuur is eenraamwerk opgezet voor zowel de databank als de website.

Extra functies moeten nog geımplementeerd worden in de site. De verschillendesecties voor de verantwoordelijken binnen IAAS moeten verder ontwikkeld worden, hetsysteem van lid- en deelnamegelden is nog niet uitgewerkt, er is vraag naar het onlineaanmaken van verslagen, enzovoort.

De (voorlopig) laatste stap zal erin bestaan het huidige systeem voor de inschrij-vingen voor het uitwisselingsprogramma van IAAS aan te passen zodat dit binnen hetontwerp van deze website komt. Daarmee zal de ‘integrated web management solution’zo goed als volledig zijn.

41

Page 52: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Bijlagen

Page 53: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Bijlage A

Databaseontwerp

A.1 EER-diagrammen

Het globaal EER-diagram, met de relaties tussen de verschillende entiteiten, is weer-gegeven in de figuren 2.3 en 2.5. In deze paragraaf bevinden zich de EER-diagrammenvan de belangrijkste entiteiten, zoals ze eruit zien na de ‘reverse engineering’ beschre-ven in paragraaf A.2.10, dus zonder de attributen land, land van geboorte en nationali-teit.

Figuur A.1: EER-diagram voor het entiteittype ‘Person’

43

Page 54: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Figuur A.2: EER-diagram voor het entiteittype ‘Event’

Figuur A.3: EER-diagram voor het entiteittype ‘Sponsor’

Figuur A.4: EER-diagram voor het entiteittype ‘Partner’

44

Page 55: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Figuur A.5: EER-diagram voor het entiteittype ‘Fee’

Figuur A.6: EER-diagram voor het entiteittype ‘ContactPerson’

45

Page 56: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Figu

urA

.7:

EE

R-d

iagr

amvo

orhe

tent

iteitt

ype

‘Gro

up’

46

Page 57: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

A.2 Omzetting

In negen stappen kunnen de EER-diagrammen van figuur 2.3 en de EER-diagrammenvan de verschillende entiteiten omgezet worden tot een relationeel databaseschema(De Tre, 2007b). Deze stappen worden beschreven in de volgende paragrafen. Ophet einde is nog een tiende stap toegevoegd, waarin een extra relatie ‘Countries’ ge-definieerd wordt en waarin vreemde sleutels gemaakt worden van alle attributen uit deandere basisrelaties die informatie bevatten gerelateerd aan een land.

A.2.1 Omzetting van de reguliere entiteittypes

Voor elk regulier entiteittype wordt een basisrelatie aangemaakt. De enkelvoudige,enkelwaardige en niet-afgeleide attributen van het entiteittype worden hieraan toege-voegd, van de samengestelde attributen worden enkel de enkelvoudige, enkelwaardigeen niet-afgeleide componentattributen opgenomen.

(1.0) Person (Person ID, FirstName, MiddleNames, LastName, Gender, DateOfBirth,CityPlaceOfBirth, StateOrProvincePlaceOfBirth, CountryPlaceOfBirth, Nationali-ty, Email, NrPassport, DateOfIssuePassport, DateOfExpiryPassport, Authority-Passport, StreetHouseNr, PostalCode, City, StateOrProvince, Country, Current-Study, DietaryRestriction, MedicalInfo)Primaire sleutel: {Person ID}

(2.0) InternationalPartner (InternationalPartner ID, FirstName, MiddleNames, LastNa-me, Gender, DateOfBirth, CityPlaceOfBirth, StateOrProvincePlaceOfBirth, Coun-tryPlaceOfBirth, NrPassport, Nationality, Email, DateOfIssuePassport, DateOfEx-piryPassport, AuthorityPassport, StreetHouseNr, PostalCode, City, StateOrPro-vince, Country, CurrentStudy, DietaryRestriction, MedicalInfo)Primaire sleutel: {InternationalPartner ID}

(3.0) Group (Group ID, Active)Primaire sleutel: {Group ID}

(4.0) GeographicalGroup ()

(5.0) ThematicGroup ()

(6.0) Alumni ()

(7.0) LocalCommittee (Name, StreetHouseNr, EMail, Website, PostalCode, City, Sta-teOrProvince, Country, CallingCodePhoneNr, LocalPhoneNr, CallingCodeFaxNr,LocalFaxNr, NameUniversity, WebsiteUniversity)

(8.0) NationalCommittee (Name, StreetHouseNr, PostalCode, City, StateOrProvince,Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr, CallingCodeFax-Nr, LocalFaxNr, MemberType, Status, Category, Debt)

(9.0) Region (Name)

47

Page 58: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

(10.0) Interregion (Name)

(11.0) ExecutiveCommittee ()

(12.0) ControlCommittee ()

(13.0) AdvisoryCommittee ()

(14.0) WorkingGroup (Topic)

(15.0) Event (Event ID, StartDate, EndDate, Type, Title, Website, EMail, ContactPer-son, Description)Primaire sleutel: {Event ID}

(16.0) Sponsor (Sponsor ID, Name, EMail, Website, StreetHouseNr, PostalCode, Ci-ty, StateOrProvince, Country, CallingCodePhoneNr, LocalPhoneNr, CallingCode-FaxNr, LocalFaxNr, Description)Primaire sleutel: {Sponsor ID}

(17.0) Partner (Partner ID, FullName, Abbreviation, Website, EMail, CallingCodePho-neNr, LocalPhoneNr, CallingCodeFaxNr, LocalFaxNr, Description)Primaire sleutel: {Partner ID}

(18.0) ContactPerson (ContactPerson ID, FirstName, LastName, Gender, Nationality,EMail, CallingCodePhoneNr, LocalPhoneNr, CallingCodeFaxNr, LocalFaxNr, De-scription)Primaire sleutel: {ContactPerson ID}

A.2.2 Omzetting van de zwakke entiteittypes

Met elk zwak entiteittype komt een basisrelatie overeen. De attributen van zowel hetzwakke entiteittype zelf als van het relatietype tussen het zwakke entiteittype en het bij-horende reguliere entiteittype worden aan deze basisrelatie toegevoegd. Hierbij geldendezelfde regels als bij de reguliere entiteittypes. De primaire sleutel van ‘Fee’ kan nogniet aangemaakt worden aangezien ‘NationalCommittee’ betrokken is in een speciali-satie.

(19.0) Fee (Amount, Paid, DatePayment, StartDate, EndDate)

(20.0) Membership Fee ()

(21.0) Publication Fee ()

(22.0) Exchange Fee ()

A.2.3 Omzetting van de specialisaties en generalisaties met eensupertype

Omzetting van de generalisatie met als supertype ‘Group’

Voor de omzetting van ‘Group’ zal afgeweken worden van het EER-diagram. ‘Group’is betrokken in drie relatietypes zodat de basisrelatie van ‘Group’ wordt behouden. In

48

Page 59: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

het EER-diagram bestaat het supertype ‘Group’ uit 3 subtypes, namelijk ‘Alumni’, ‘Ge-ographicalGroup’ en ‘ThematicGroup’. Deze 2 laatste subtypes zijn zelf supertypes.In de omzetting worden de basisrelaties van ‘GeographicalGroup’ en ‘ThematicGroup’weggelaten. Er wordt gebruik gemaakt van een typeattribuut bij ‘Group’ om de subtypesaan te duiden.

(3.1) Group (Group ID, Type, Active)Primaire sleutel: {Group ID}

‘NationalCommittee’, ‘LocalCommittee’, ‘Region’, ‘Interregion’, ‘WorkingGroup’ en‘ExecutiveCommittee’ hebben extra attributen, waardoor een aparte tabel wordt op-gesteld voor deze basisrelaties. ‘Alumni’, ‘ControlCommittee’ en ‘AdvisoryCommittee’hebben geen extra attributen, waardoor hun basisrelaties verwijderd worden.

De primaire sleutel van ‘Group’, Group ID, wordt als primaire sleutel toegevoegdaan de subtypes. Group ID is dan meteen ook een vreemde sleutel die verwijst naar‘Group’. Omdat sommige subtypes betrokken zijn in een relatie, krijgt de primaire sleu-tel meteen een andere naam.

(7.1) LocalCommittee (LC ID, Name, StreetHouseNr, PostalCode, City, StateOrProvin-ce, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr, CallingCode-FaxNr, LocalFaxNr, NameUniversity, WebsiteUniversity)Primaire sleutel: {LC ID}Vreemde sleutel: {LC ID} verwijst naar Group

(8.1) NationalCommittee (NC ID, Name, StreetHouseNr, PostalCode, City, StateOr-Province, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr, Calling-CodeFaxNr, LocalFaxNr, MemberType, Status, Category, Debt)Primaire sleutel: {NC ID}Vreemde sleutel: {NC ID} verwijst naar Group

(9.1) Region (Region ID, Name)Primaire sleutel: {Region ID}Vreemde sleutel: {Region ID} verwijst naar Group

(10.1) Interregion (Interregion ID, Name)Primaire sleutel: {Interregion ID}Vreemde sleutel: {Interregion ID} verwijst naar Group

(11.1) ExecutiveCommittee (EC ID, Name, StreetHouseNr, PostalCode, City, StateOr-Province, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr, Calling-CodeFaxNr, LocalFaxNr)Primaire sleutel: {EC ID}Vreemde sleutel: {EC ID} verwijst naar Group

(14.1) WorkingGroup (WGroup ID, Topic)Primaire sleutel: {WGroup ID}Vreemde sleutel: {WGroup ID} verwijst naar Group

49

Page 60: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Omzetting van de specialisatie met als supertype ‘Fee’

Nu ‘NationalCommittee’ een primaire sleutel gekregen heeft, is ook de primaire sleutelvan ‘Fee’ gekend.

(19.1) Fee (NC ID, Amount, Paid, DatePayment, StartDate, EndDate)Primaire sleutel: {NC ID, StartDate}Vreemde sleutel: {NC ID} verwijst naar NationalCommittee

De supertype/subtype-verwantschap wordt weergegeven door een extra typeattri-buut toe te voegen aan de basisrelatie van het supertype ‘Fee’. De waarde van dittypeattribuut geeft aan tot welk subtype een bepaald tuple behoort. De basisrelatiesvan de subtypes ‘MembershipFee’, ‘PublicationFee’ en ‘ExchangeFee’ worden verwij-derd.

(19.2) Fee (NC ID, Amount, Paid, DatePayment, Type, StartDate, EndDate)Primaire sleutel: {NC ID, Type, StartDate}Vreemde sleutel: {NC ID} verwijst naar NationalCommittee

A.2.4 Omzetting van de categorieen

Er bevinden zich geen categorieen in het diagram.

A.2.5 Omzetting van de binaire een-op-een relatietypes

Er is slechts een binaire een-op-een relatie, namelijk ‘partner of’ tussen ‘Person’ en‘InternationalPartner’. Het samenvoegen van beide basisrelaties tot een basisrelatiezou voor veel null-waarden zorgen aangezien de meerderheid van de leden niet gere-gistreerd staat als alumnus en dus sowieso zijn/haar partner niet kan laten registreren.Zowel ‘Person’ als ‘InternationalPartner’ worden behouden, zonder evenwel een extrabasisrelatie te creeren.

De primaire sleutel van ‘Person’ wordt toegevoegd aan ‘InternationalPartner’ alsvreemde sleutel en niet omgekeerd aangezien ‘InternationalPartner’ totaal participeertin de relatie.

(2.1) InternationalPartner (Person ID, InternationalPartner ID, FirstName, MiddleNa-mes, LastName, Gender, DateOfBirth, CityPlaceOfBirth, StateOrProvincePlace-OfBirth, CountryPlaceOfBirth, NrPassport, Nationality, Email, DateOfIssuePas-sport, DateOfExpiryPassport, AuthorityPassport, StreetHouseNr, PostalCode, Ci-ty, StateOrProvince, Country, CurrentStudy, DietaryRestriction, MedicalInfo)Primaire sleutel: {InternationalPartner ID}Vreemde sleutel: {Person ID} verwijst naar Person

A.2.6 Omzetting van de binaire een-op-meerdere relatietypes

Er zijn zeven binaire een-op-meerdere relatietypes (het zwakke relatietype dat tussen‘Fee’ en ‘NationalCommittee’ staat, werd reeds bij stap 2 herwerkt). De primaire sleutel

50

Page 61: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

van de basisrelatie van het entiteittype met kardinaliteit 1 wordt als vreemde sleuteltoegevoegd aan de basisrelatie van het entiteittype met kardinaliteit N. Waar nodigworden de namen van de primaire sleutels aangepast.

Omzetting van ‘consists of members of’ tussen ‘LocalCommittee’ en‘NationalCommittee’

(7.2) LocalCommittee (LC ID, NC ID, Name, EMail, Website, StreetHouseNr, Postal-Code, City, StateOrProvince, Country, CallingCodePhoneNr, LocalPhoneNr, Call-ingCodeFaxNr, LocalFaxNr, NameUniversity, WebsiteUniversity)Primaire sleutel: {LC ID}Vreemde sleutel: {NC ID} verwijst naar NationalCommittee

Omzetting van ‘belongs to’ tussen ‘Region’ en ‘NationalCommittee’

(8.2) NationalCommittee (NC ID, Region ID, Name, StreetHouseNr, PostalCode, City,StateOrProvince, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr,CallingCodeFaxNr, LocalFaxNr, MemberType, Status, Category)Primaire sleutel: {NC ID}Vreemde sleutel: {Region ID} verwijst naar Region

Omzetting van ‘belongs to’ tussen ‘Region’ en ‘Interregion’

(9.2) Region (Region ID, Interregion ID, Name)Primaire sleutel: {Region ID}Vreemde sleutel: {Interregion ID} verwijst naar Interregion

Omzetting van ‘is member of’ tussen ‘Person’ en ‘LocalCommittee’

(1.1) Person (Person ID, LC ID, FirstName, MiddleNames, LastName, Gender, Da-teOfBirth, CityPlaceOfBirth, StateOrProvincePlaceOfBirth, CountryPlaceOfBirth,NrPassport, Nationality, Email, DateOfIssuePassport, DateOfExpiryPassport, Au-thorityPassport, StreetHouseNr, PostalCode, City, StateOrProvince, Country, Fiel-dOfStudy, DietaryRestriction, MedicalInfo, Paid, Status)Primaire sleutel: {Person ID}Vreemde sleutel: {LC ID} verwijst naar LocalCommittee

Omzetting van ‘is registrered as Alumnus’ tussen ‘Person’ en ‘Alumni’

De basisrelatie van ‘Alumni’ werd verwijderd bij de omzetting van de generalisatie‘Group’. Er wordt gekozen om een extra basisrelatie toe te voegen die ‘Person’ inverband brengt met ‘Alumni’.

(23.0) RegistrationAlumni (Person ID, Group ID, StartDateRegistration, Registration-Type, CompanyName)Primaire sleutel: {Person ID, Group ID}

51

Page 62: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Vreemde sleutel: {Person ID} verwijst naar PersonVreemde sleutel: {Group ID} verwijst naar Group

Omzetting van ‘works at’ tussen ‘ContactPerson’ en ‘Sponsor’

(18.1) ContactPerson (ContactPerson ID, Sponsor ID, FirstName, LastName, Gender,Nationality, EMail, CallingCodePhoneNr, LocalPhoneNr, CallingCodeFaxNr, Lo-calFaxNr, Description)Primaire sleutel: {ContactPerson ID}Vreemde sleutel: {Sponsor ID} verwijst naar Sponsor

Omzetting van ‘works at’ tussen ‘ContactPerson’ en ‘Partner’

(18.2) ContactPerson (ContactPerson ID, Sponsor ID, Partner ID, FirstName, LastNa-me, Gender, Nationality, EMail, CallingCodePhoneNr, LocalPhoneNr, CallingCode-FaxNr, LocalFaxNr, Description)Primaire sleutel: {ContactPerson ID}Vreemde sleutel: {Sponsor ID} verwijst naar SponsorVreemde sleutel: {Partner ID} verwijst naar Partner

Omzetting van ‘is contact person for’ tussen ‘Person’ en ‘Event’

(15.1) Event (Event ID, StartDate, EndDate, Type, Title, Website, EMail, ContactPer-son, Description)Primaire sleutel: {Event ID}Vreemde sleutel: {ContactPerson} verwijst naar Person

A.2.7 Omzetting van de binaire meerdere-op-meerdere relatietypes

Omzetting van ‘has function in’ tussen ‘Person’ en ‘Group’

Binnen een groep kunnen meerdere functies bestaan, en een persoon kan meer daneen functie opnemen binnen een groep. Bijgevolg moet de primaire sleutel naast deID’s van de persoon en de groep ook de naam van de functie bevatten.

Een functie in een groep kan niet tegelijkertijd door meer dan een persoon bekleedworden. Aangezien het belangrijk is dat de geschiedenis van alle functies bijgehoudenwordt, en dat iemand eenzelfde functie kan opnemen in twee verschillende periodes,moet de startdatum eveneens opgenomen worden in de primaire sleutel.

(24.0) Function (Person ID, Group ID, Name, StartDate, EndDate)Primaire sleutel: {Person ID, Group ID, Name, StartDate}Vreemde sleutel: {Person ID} verwijst naar PersonVreemde sleutel: {Group ID} verwijst naar Group

52

Page 63: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Omzetting van ‘applies for’ tussen ‘Person’ en ‘Event’

(25.0) Application (Person ID, Event ID, Approved, Confirmed, Paid, Options, Topic)Primaire sleutel: {Person ID, Event ID}Vreemde sleutel: {Person ID} verwijst naar PersonVreemde sleutel: {Event ID} verwijst naar Event

Omzetting van ‘is member of’ tussen ‘Person’ en ‘ThematicGroup’

De basisrelatie ‘ThematicGroup’ werd in een vorige stap verwijderd (A.2.3). Hierdoormoet er een restrictieregel opgelegd worden zodat deze relatie enkel geldig is voor debasisrelaties ‘AdvisoryCommittee’, ‘ControlCommittee’, ‘ExecutiveCommittee’ en ‘Wor-kingGroup’.

(26.0) Membership (Person ID, Group ID)Primaire sleutel: {Person ID, Group ID}Vreemde sleutel: {Person ID} verwijst naar PersonVreemde sleutel: {Group ID} verwijst naar Group

Omzetting van ‘category determines fee’ tussen ‘NationalCommittee’ en ‘Event’

(27.0) DeterminationFee (NC ID, Event ID, Fee, Currency)Primaire sleutel: {NC ID, Event ID}Vreemde sleutel: {NC ID} verwijst naar NationalCommitteeVreemde sleutel: {Event ID} verwijst naar Event

Omzetting van ‘organises’ tussen ‘Group’ en ‘Event’

(28.0) OrganisingCommittee (Event ID, Group ID)Primaire sleutel: {Event ID, Group ID}Vreemde sleutel: {Group ID} verwijst naar GroupVreemde sleutel: {Event ID} verwijst naar Event

Omzetting van ‘is directly sponsored by’ tussen ‘Group’ en ‘Sponsor’

(29.0) GroupSponsoring (Sponsor ID, Group ID, Amount, Currency, Date)Primaire sleutel: {Sponsor ID, Group ID, Date}Vreemde sleutel: {Group ID} verwijst naar GroupVreemde sleutel: {Sponsor ID} verwijst naar Sponsor

Omzetting van ‘sponsors’ tussen ‘Sponsor’ en ‘Event’

(30.0) EventSponsoring (Sponsor ID, Event ID, Amount, Currency, Date)Primaire sleutel: {Sponsor ID, Event ID}Vreemde sleutel: {Event ID} verwijst naar EventVreemde sleutel: {Sponsor ID} verwijst naar Sponsor

53

Page 64: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

A.2.8 Omzetting van de meerwaardige attributen

(31.0) LocationEvents (Event ID, City, StateOrProvince, Country)Primaire sleutel: {Event ID, City}Vreemde sleutel: {Event ID} verwijst naar Event

A.2.9 Omzetting van de n-aire relatietypes waarbij n>2

Er bevinden zich geen n-aire relatietypes (waarbij n>2) in het diagram.

A.2.10 Toevoegen van de relatie ‘Countries’

Verschillende van de hierboven beschreven basisrelaties hebben attributen zoals woon-plaats, nationaliteit en geboorteplaats. Om de databank consistenter te maken werdervoor gekozen om van deze attributen vreemde sleutels te maken die verwijzen naarde relatie ‘Countries’. Nadien werd deze stap opgenomen in het EER-diagram (figuur2.4).

(32.0) Countries (Code, NameEnglish, NameNative, CallingCode)Primaire sleutel: {Code}

(1.2) Person (Person ID, LC ID, FirstName, MiddleNames, LastName, Gender, Da-teOfBirth, CityPlaceOfBirth, StateOrProvincePlaceOfBirth, CountryPlaceOfBirth,NrPassport, Nationality, Email, DateOfIssuePassport, DateOfExpiryPassport, Au-thorityPassport, StreetHouseNr, PostalCode, City, StateOrProvince, Country, Fiel-dOfStudy, DietaryRestriction, MedicalInfo, Paid, Status)Primaire sleutel: {Person ID}Vreemde sleutel: {LC ID} verwijst naar LocalCommitteeVreemde sleutel: {Nationality} verwijst naar CountriesVreemde sleutel: {Country} verwijst naar CountriesVreemde sleutel: {CountryPlaceOfBirth} verwijst naar Countries

(2.2) InternationalPartner (Person ID, InternationalPartner ID, FirstName, MiddleNa-mes, LastName, Gender, DateOfBirth, CityPlaceOfBirth, StateOrProvincePlace-OfBirth, CountryPlaceOfBirth, NrPassport, Nationality, Email, DateOfIssuePas-sport, DateOfExpiryPassport, AuthorityPassport, StreetHouseNr, PostalCode, Ci-ty, StateOrProvince, Country, CurrentStudy, DietaryRestriction, MedicalInfo)Primaire sleutel: {InternationalPartner ID}Vreemde sleutel: {Person ID} verwijst naar PersonVreemde sleutel: {Nationality} verwijst naar CountriesVreemde sleutel: {Country} verwijst naar CountriesVreemde sleutel: {CountryPlaceOfBirth} verwijst naar Countries

(7.3) LocalCommittee (LC ID, NC ID, Name, StreetHouseNr, PostalCode, City, Sta-teOrProvince, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr, Call-ingCodeFaxNr, LocalFaxNr, NameUniversity, WebsiteUniversity)

54

Page 65: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

Primaire sleutel: {LC ID}Vreemde sleutel: {NC ID} verwijst naar NationalCommitteeVreemde sleutel: {Country} verwijst naar Countries

(8.3) NationalCommittee (NC ID, Region ID, Name, StreetHouseNr, PostalCode, City,StateOrProvince, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr,CallingCodeFaxNr, LocalFaxNr, MemberType, Status, Category)Primaire sleutel: {NC ID}Vreemde sleutel: {Region ID} verwijst naar RegionVreemde sleutel: {Country} verwijst naar Countries

(11.2) ExecutiveCommittee (EC ID, Name, StreetHouseNr, PostalCode, City, StateOr-Province, Country, EMail, Website, CallingCodePhoneNr, LocalPhoneNr, Calling-CodeFaxNr, LocalFaxNr)Primaire sleutel: {EC ID}Vreemde sleutel: {EC ID} verwijst naar GroupVreemde sleutel: {Country} verwijst naar Countries

(16.1) Sponsor (Sponsor ID, Name, EMail, Website, StreetHouseNr, PostalCode, Ci-ty, StateOrProvince, Country, CallingCodePhoneNr, LocalPhoneNr, CallingCode-FaxNr, LocalFaxNr, Description)Primaire sleutel: {Sponsor ID}Vreemde sleutel: {Country} verwijst naar Countries

(31.1) LocationEvents (Event ID, City, StateOrProvince, Country)Primaire sleutel: {Event ID, City}Vreemde sleutel: {Event ID} verwijst naar EventVreemde sleutel: {Country} verwijst naar Countries

A.2.11 Relationeel databaseschema

Het uiteindelijke relationele databaseschema wordt samengesteld door de meest re-cente versies van de overblijvende basisrelaties, meerbepaald de relaties (1.2), (2.2),(3.1), (7.3), (8.3), (9.2), (10.1), (11.2), (14.1), (15.1), (16.1), (17.0), (18.2), (19.2), (22.0),(23.0), (24.0), (25.0), (26.0), (27.0), (28.0), (29.0), (30.0), (31.1) en (32.0).

A.3 SQL-code voor het aanmaken van de database

Het eerste deel bevat de instructies voor het aanmaken van de tabellen, in het tweededeel worden de vreemde sleutels toegevoegd.

A.3.1 Aanmaken van de tabellen

55

Page 66: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

CREATE TABLE ‘ app l i ca t i ons ‘ (‘ Person ID ‘ smal l int ( 6 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Event ID ‘ mediumint ( 8 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ OptionsChosen ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ TopicFollowed ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Approved ‘ t i n y i n t ( 1 ) NOT NULL defaul t ’ 0 ’ ,‘ Confirmed ‘ t i n y i n t ( 1 ) NOT NULL defaul t ’ 0 ’ ,‘ Paid ‘ t i n y i n t ( 1 ) NOT NULL defaul t ’ 0 ’ ,

PRIMARY KEY ( ‘ Person ID ‘ , ‘ Event ID ‘ ) ,KEY ‘ Event ID ‘ ( ‘ Event ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ contact persons ‘ (‘ ContactPerson ID ‘ smal l int ( 5 ) unsigned NOT NULL auto increment ,‘ Sponsor ID ‘ smal l int ( 5 ) unsigned defaul t NULL,‘ Par tner ID ‘ smal l int ( 5 ) unsigned defaul t NULL,‘ FirstName ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ LastName ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Gender ‘ char ( 1 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ N a t i o n a l i t y ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Descr ip t ion ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) unsigned defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) unsigned defaul t NULL,‘ Call ingCodeFaxNr ‘ smal l int ( 4 ) unsigned defaul t NULL,‘ LocalFaxNr ‘ b i g i n t (15) unsigned defaul t NULL,

PRIMARY KEY ( ‘ ContactPerson ID ‘ ) ,UNIQUE KEY ‘ Email ‘ ( ‘ EMail ‘ ) ,KEY ‘ Par tner ID ‘ ( ‘ Par tner ID ‘ ) ,KEY ‘ Sponsor ID ‘ ( ‘ Sponsor ID ‘ )KEY ‘ N a t i o n a l i t y ‘ ( ‘ N a t i o n a l i t y ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ coun t r ies ‘ (‘ name english ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ code ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ name native ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ ca l l i ng code ‘ smal l int ( 3 ) unsigned NOT NULL defaul t ’ 0 ’ ,

PRIMARY KEY ( ‘ code ‘ )) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ de te rmina t ion fees ‘ (‘ NC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Event ID ‘ mediumint ( 8 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Fee ‘ decimal (10 ,2 ) unsigned NOT NULL defaul t ’ 0.00 ’ ,‘ Currency ‘ varchar (20) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

56

Page 67: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

PRIMARY KEY ( ‘ NC ID ‘ , ‘ Event ID ‘ ) ,KEY ‘ Event ID ‘ ( ‘ Event ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ events ‘ (‘ Event ID ‘ mediumint ( 8 ) unsigned NOT NULL auto increment ,‘ Group ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ ContactPerson ‘ smal l int ( 6 ) unsigned defaul t NULL,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Website ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Star tDate ‘ datet ime NOT NULL defaul t ’ 0000−00−00 00:00:00 ’ ,‘ EndDate ‘ datet ime NOT NULL defaul t ’ 0000−00−00 00:00:00 ’ ,‘ T i t l e ‘ varchar (200) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Type ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Descr ip t ion ‘ t e x t col la te u t f 8 u n i c o d e c i ,

PRIMARY KEY ( ‘ Event ID ‘ ) ,KEY ‘ Group ID ‘ ( ‘ Group ID ‘ ) ,KEY ‘ ContactPerson ‘ ( ‘ ContactPerson ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ event sponsor ing ‘ (‘ Sponsor ID ‘ smal l int ( 5 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Event ID ‘ mediumint ( 8 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Amount ‘ decimal (10 ,2 ) defaul t NULL,‘ Currency ‘ varchar (20) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Date ‘ date defaul t NULL,

PRIMARY KEY ( ‘ Sponsor ID ‘ , ‘ Event ID ‘ ) ,KEY ‘ Event ID ‘ ( ‘ Event ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ execut ive commit tee ‘ (‘ EC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ StreetHouseNr ‘ t e x t col la te u t f 8 u n i c o d e c i NOT NULL,‘ PostalCode ‘ varchar (10) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ Country ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Website ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) defaul t NULL,‘ Call ingCodeFaxNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalFaxNr ‘ b i g i n t (15) defaul t NULL,

PRIMARY KEY ( ‘ EC ID ‘ ) ,UNIQUE KEY ‘ EMail ‘ ( ‘ EMail ‘ ) ,KEY ‘ Country ‘ ( ‘ Country ‘ )

57

Page 68: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ fees ‘ (‘ NC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Star tDate ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ EndDate ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ Amount ‘ decimal (10 ,2 ) NOT NULL defaul t ’ 0.00 ’ ,‘ Paid ‘ t i n y i n t ( 1 ) NOT NULL defaul t ’ 0 ’ ,‘ DatePayment ‘ date defaul t NULL,‘ Type ‘ varchar ( 6 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ NC ID ‘ , ‘ Star tDate ‘ , ‘ Type ‘ )) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ f unc t ions ‘ (‘ Person ID ‘ smal l int ( 6 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Group ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Star tDate ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ EndDate ‘ date defaul t NULL,‘Name‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ Person ID ‘ , ‘ Group ID ‘ , ‘ Star tDate ‘ , ‘Name‘ ) ,KEY ‘ Group ID ‘ ( ‘ Group ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ groups ‘ (‘ Group ID ‘ i n t (10) unsigned NOT NULL auto increment ,‘ Type ‘ char ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Act ive ‘ t i n y i n t ( 1 ) unsigned NOT NULL defaul t ’ 1 ’ ,

PRIMARY KEY ( ‘ Group ID ‘ )) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ group sponsor ing ‘ (‘ Group ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Sponsor ID ‘ smal l int ( 5 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Amount ‘ decimal (10 ,2 ) defaul t NULL,‘ Currency ‘ varchar (20) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Date ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,

PRIMARY KEY ( ‘ Group ID ‘ , ‘ Sponsor ID ‘ , ‘ Date ‘ ) ,KEY ‘ Sponsor ID ‘ ( ‘ Sponsor ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ i n t e r n a t i o n a l p a r t n e r s ‘ (‘ I n t e r n a t i o n a l P a r t n e r I D ‘ smal l int ( 5 ) unsigned NOT NULL

auto increment ,‘ Person ID ‘ smal l int ( 6 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ FirstName ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ MiddleName ( s ) ‘ varchar (100) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ LastName ‘ varchar (100) col la te u t f 8 u n i c o d e c i NOT NULL

58

Page 69: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

defaul t ’ ’ ,‘ Gender ‘ char ( 1 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) unsigned defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) unsigned defaul t NULL,‘ N a t i o n a l i t y ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ DateOfBir th ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ C i t yP laceOfB i r th ‘ varchar (50) col la te u t f 8 u n i c o d e c i

defaul t NULL,‘ S ta teOrProv incePlaceOfBi r th ‘ varchar (50) col la te u t f 8 u n i c o d e c i

defaul t NULL,‘ CountryPlaceOfBir th ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i

defaul t NULL,‘ StreetHouseNr ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ PostalCode ‘ varchar (20) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Country ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ NrPassport ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ DateOfIssuePassport ‘ date defaul t NULL,‘ DateOfExpiryPassport ‘ date defaul t NULL,‘ Au tho r i t y ‘ varchar (100) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ F ie ldOfStudy ‘ varchar (100) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ D i e t a r y R e s t r i c t i o n ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ Medica l In fo ‘ t e x t col la te u t f 8 u n i c o d e c i ,

PRIMARY KEY ( ‘ I n t e r n a t i o n a l P a r t n e r I D ‘ ) ,UNIQUE KEY ‘ EMail ‘ ( ‘ EMail ‘ ) ,KEY ‘ Person ID ‘ ( ‘ Person ID ‘ ) ,KEY ‘ N a t i o n a l i t y ‘ ( ‘ N a t i o n a l i t y ‘ ) ,KEY ‘ Country ‘ ( ‘ Country ‘ ) ,KEY ‘ CountryPlaceOfBir th ‘ ( ‘ CountryPlaceOfBir th ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ i n t e r r e g i o n s ‘ (‘ I n t e r r e g i o n I D ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘Name‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ I n t e r r e g i o n I D ‘ ) ,UNIQUE KEY ‘Name‘ ( ‘Name‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ loca l commi t tees ‘ (‘ LC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ NC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘Name‘ varchar (100) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ StreetHouseNr ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ PostalCode ‘ varchar (10) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,

59

Page 70: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Country ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Website ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) unsigned defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) unsigned defaul t NULL,‘ Call ingCodeFaxNr ‘ smal l int ( 4 ) unsigned defaul t NULL,‘ LocalFaxNr ‘ b i g i n t (15) unsigned defaul t NULL,‘ NameUniversity ‘ varchar (100) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ Webs i teUnivers i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,PRIMARY KEY ( ‘ LC ID ‘ ) ,UNIQUE KEY ‘ EMail ‘ ( ‘ EMail ‘ ) ,UNIQUE KEY ‘Name‘ ( ‘Name‘ ) ,KEY ‘ NC ID ‘ ( ‘ NC ID ‘ ) ,KEY ‘ Country ‘ ( ‘ Country ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ l oca t i on even ts ‘ (‘ Event ID ‘ mediumint ( 8 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Country ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ Event ID ‘ , ‘ C i ty ‘ )) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ membership ‘ (‘ Person ID ‘ smal l int ( 6 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Group ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Star tDate ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ EndDate ‘ date defaul t NULL,

PRIMARY KEY ( ‘ Person ID ‘ , ‘ Group ID ‘ ) ,KEY ‘ Group ID ‘ ( ‘ Group ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ na t iona l commi t tees ‘ (‘ NC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Region ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘Name‘ varchar (100) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ StreetHouseNr ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ PostalCode ‘ varchar (10) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Country ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Website ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) defaul t NULL,

60

Page 71: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

‘ LocalPhoneNr ‘ b i g i n t (15) defaul t NULL,‘ Call ingCodeFaxNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalFaxNr ‘ b i g i n t (15) defaul t NULL,‘MemberType ‘ varchar (13) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ Status ‘ t i n y i n t ( 1 ) NOT NULL defaul t ’ 0 ’ ,‘ Category ‘ char ( 1 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ NC ID ‘ ) ,UNIQUE KEY ‘ EMail ‘ ( ‘ EMail ‘ ) ,UNIQUE KEY ‘Name‘ ( ‘Name‘ ) ,UNIQUE KEY ‘ Country ‘ ( ‘ Country ‘ ) ,KEY ‘ Region ID ‘ ( ‘ Region ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ news ‘ (‘ key ‘ i n t (11) NOT NULL auto increment ,‘ t i t l e ‘ varchar (255) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ u r l ‘ varchar (255) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ shor t ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ f u l l ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ newsdate ‘ datet ime defaul t ’ 0000−00−00 00:00:00 ’ ,‘ author ‘ varchar (255) col la te u t f 8 u n i c o d e c i defaul t NULL,

PRIMARY KEY ( ‘ key ‘ )) ENGINE=MyISAM DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ o rganis ing commit tees ‘ (‘ Group ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Event ID ‘ mediumint ( 8 ) unsigned NOT NULL defaul t ’ 0 ’ ,

PRIMARY KEY ( ‘ Group ID ‘ , ‘ Event ID ‘ ) ,KEY ‘ Event ID ‘ ( ‘ Event ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ par tners ‘ (‘ Par tner ID ‘ smal l int ( 5 ) unsigned NOT NULL auto increment ,‘ FullName ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Abbrev ia t ion ‘ varchar (20) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Website ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) defaul t NULL,‘ Call ingCodeFaxNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalFaxNr ‘ b i g i n t (15) defaul t NULL,‘ Descr ip t ion ‘ t e x t col la te u t f 8 u n i c o d e c i ,

PRIMARY KEY ( ‘ Par tner ID ‘ ) ,UNIQUE KEY ‘ EMail ‘ ( ‘ EMail ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ persons ‘ (

61

Page 72: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

‘ Person ID ‘ smal l int ( 6 ) unsigned NOT NULL auto increment ,‘ Login ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ Password ‘ varchar (32) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ ConfirmHash ‘ varchar (32) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ IsConfirmed ‘ t i n y i n t ( 1 ) NOT NULL defaul t ’ 0 ’ ,‘ DateCreated ‘ datet ime NOT NULL defaul t ’ 0000−00−00 00:00:00 ’ ,‘ DateLastUpdate ‘ timestamp NOT NULL defaul t CURRENT TIMESTAMP

on update CURRENT TIMESTAMP,‘ LC ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ FirstName ‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ MiddleNames ‘ varchar (100) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ LastName ‘ varchar (100) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ Gender ‘ char ( 1 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) unsigned defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) unsigned defaul t NULL,‘ N a t i o n a l i t y ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i NOT NULL

defaul t ’ ’ ,‘ DateOfBir th ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ C i t yP laceOfB i r th ‘ varchar (50) col la te u t f 8 u n i c o d e c i

defaul t NULL,‘ S ta teOrProv incePlaceOfBi r th ‘ varchar (50) col la te u t f 8 u n i c o d e c i

defaul t NULL,‘ CountryPlaceOfBir th ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i

defaul t NULL,‘ StreetHouseNr ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ PostalCode ‘ varchar (10) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Country ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ NrPassport ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ DateOfIssuePassport ‘ date defaul t NULL,‘ DateOfExpiryPassport ‘ date defaul t NULL,‘ Au tho r i t y ‘ varchar (100) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ F ie ldOfStudy ‘ varchar (100) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ D i e t a r y R e s t r i c t i o n ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ Medica l In fo ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ Paid ‘ t i n y i n t ( 1 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Status ‘ varchar ( 7 ) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ Person ID ‘ ) ,UNIQUE KEY ‘ Login ‘ ( ‘ Login ‘ ) ,UNIQUE KEY ‘ Email ‘ ( ‘ EMail ‘ ) ,KEY ‘ LC ID ‘ ( ‘ LC ID ‘ ) ,KEY ‘ N a t i o n a l i t y ‘ ( ‘ N a t i o n a l i t y ‘ ) ,

62

Page 73: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

KEY ‘ Country ‘ ( ‘ Country ‘ ) ,KEY ‘ CountryPlaceOfBir th ‘ ( ‘ CountryPlaceOfBir th ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ regions ‘ (‘ Region ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ I n t e r r e g i o n I D ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘Name‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ Region ID ‘ ) ,UNIQUE KEY ‘Name‘ ( ‘Name‘ ) ,KEY ‘ I n t e r r e g i o n I D ‘ ( ‘ I n t e r r e g i o n I D ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ r e g i s t r a t i o n a l u m n i ‘ (‘ Person ID ‘ smal l int ( 6 ) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Group ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Star tDate ‘ date NOT NULL defaul t ’ 0000−00−00 ’ ,‘ CompanyInfo ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ Type ‘ smal l int ( 2 ) NOT NULL defaul t ’ 0 ’ ,

PRIMARY KEY ( ‘ Person ID ‘ , ‘ Group ID ‘ ) ,UNIQUE KEY ‘ Group ID ‘ ( ‘ Group ID ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ sponsors ‘ (‘ Sponsor ID ‘ smal l int ( 5 ) unsigned NOT NULL auto increment ,‘Name‘ varchar (50) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,‘ StreetHouseNr ‘ t e x t col la te u t f 8 u n i c o d e c i ,‘ PostalCode ‘ varchar (10) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ C i ty ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ StateOrProvince ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Country ‘ varchar ( 2 ) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ EMail ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ Website ‘ varchar (50) col la te u t f 8 u n i c o d e c i defaul t NULL,‘ CallingCodePhoneNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalPhoneNr ‘ b i g i n t (15) defaul t NULL,‘ Call ingCodeFaxNr ‘ smal l int ( 4 ) defaul t NULL,‘ LocalFaxNr ‘ b i g i n t (15) defaul t NULL,‘ Descr ip t ion ‘ t e x t col la te u t f 8 u n i c o d e c i ,

PRIMARY KEY ( ‘ Sponsor ID ‘ ) ,UNIQUE KEY ‘ EMail ‘ ( ‘ EMail ‘ ) ,KEY ‘ Country ‘ ( ‘ Country ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

CREATE TABLE ‘ working groups ‘ (‘ WorkingGroup ID ‘ i n t (10) unsigned NOT NULL defaul t ’ 0 ’ ,‘ Topic ‘ varchar (100) col la te u t f 8 u n i c o d e c i NOT NULL defaul t ’ ’ ,

PRIMARY KEY ( ‘ WorkingGroup ID ‘ ) ,UNIQUE KEY ‘ Topic ‘ ( ‘ Topic ‘ )

) ENGINE=InnoDB DEFAULT CHARSET= u t f 8 COLLATE= u t f 8 u n i c o d e c i ;

63

Page 74: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

A.3.2 Aanmaken van de vreemde sleutels

ALTER TABLE ‘ app l i ca t i ons ‘ADD CONSTRAINT ‘ a p p l i c a t i o n s i b f k 3 ‘ FOREIGN KEY ( ‘ Event ID ‘ )

REFERENCES ‘ events ‘ ( ‘ Event ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ a p p l i c a t i o n s i b f k 2 ‘ FOREIGN KEY ( ‘ Person ID ‘ )

REFERENCES ‘ persons ‘ ( ‘ Person ID ‘ ) ;

ALTER TABLE ‘ contact persons ‘ADD CONSTRAINT ‘ con tac t pe rsons ib f k 5 ‘ FOREIGN KEY ( ‘ N a t i o n a l i t y ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ con tac t pe rsons ib f k 3 ‘ FOREIGN KEY ( ‘ Sponsor ID ‘ )

REFERENCES ‘ sponsors ‘ ( ‘ Sponsor ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ con tac t pe rsons ib f k 4 ‘ FOREIGN KEY ( ‘ Par tner ID ‘ )

REFERENCES ‘ par tners ‘ ( ‘ Par tner ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ de te rmina t ion fees ‘ADD CONSTRAINT ‘ d e t e r m i n a t i o n f e e s i b f k 2 ‘ FOREIGN KEY ( ‘ Event ID ‘ )

REFERENCES ‘ events ‘ ( ‘ Event ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ d e t e r m i n a t i o n f e e s i b f k 1 ‘ FOREIGN KEY ( ‘ NC ID ‘ )

REFERENCES ‘ nat iona l commi t tees ‘ ( ‘ NC ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ events ‘ADD CONSTRAINT ‘ e ven ts i b f k 1 ‘ FOREIGN KEY ( ‘ Group ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ event sponsor ing ‘ADD CONSTRAINT ‘ even t sponso r ing ib fk 2 ‘ FOREIGN KEY ( ‘ Event ID ‘ )

REFERENCES ‘ events ‘ ( ‘ Event ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ even t sponso r ing ib fk 1 ‘ FOREIGN KEY ( ‘ Sponsor ID ‘ )

REFERENCES ‘ sponsors ‘ ( ‘ Sponsor ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ execut ive commit tee ‘ADD CONSTRAINT ‘ execu t i ve commi t tee ib fk 2 ‘ FOREIGN KEY ( ‘ Country ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ execu t i ve commi t tee ib fk 1 ‘ FOREIGN KEY ( ‘ EC ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ fees ‘ADD CONSTRAINT ‘ f e e s i b f k 1 ‘ FOREIGN KEY ( ‘ NC ID ‘ )

REFERENCES ‘ nat iona l commi t tees ‘ ( ‘ NC ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ f unc t ions ‘ADD CONSTRAINT ‘ f u n c t i o n s i b f k 2 ‘ FOREIGN KEY ( ‘ Group ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ f u n c t i o n s i b f k 1 ‘ FOREIGN KEY ( ‘ Person ID ‘ )

REFERENCES ‘ persons ‘ ( ‘ Person ID ‘ ) ON UPDATE CASCADE;

64

Page 75: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

ALTER TABLE ‘ group sponsor ing ‘ADD CONSTRAINT ‘ g roup sponsor ing ib fk 2 ‘ FOREIGN KEY ( ‘ Sponsor ID ‘ )

REFERENCES ‘ sponsors ‘ ( ‘ Sponsor ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ g roup sponsor ing ib fk 1 ‘ FOREIGN KEY ( ‘ Group ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ i n t e r n a t i o n a l p a r t n e r s ‘ADD CONSTRAINT ‘ i n t e r n a t i o n a l p a r t n e r s i b f k 4 ‘ FOREIGN KEY

( ‘ Country ‘ ) REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ i n t e r n a t i o n a l p a r t n e r s i b f k 1 ‘ FOREIGN KEY

( ‘ Person ID ‘ ) REFERENCES ‘ persons ‘ ( ‘ Person ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ i n t e r n a t i o n a l p a r t n e r s i b f k 2 ‘ FOREIGN KEY

( ‘ N a t i o n a l i t y ‘ ) REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ i n t e r n a t i o n a l p a r t n e r s i b f k 3 ‘ FOREIGN KEY

( ‘ CountryPlaceOfBir th ‘ ) REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ;

ALTER TABLE ‘ i n t e r r e g i o n s ‘ADD CONSTRAINT ‘ i n t e r r e g i o n s i b f k 1 ‘ FOREIGN KEY ( ‘ I n t e r r e g i o n I D ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ loca l commi t tees ‘ADD CONSTRAINT ‘ l o ca l commi t t ees i b f k 8 ‘ FOREIGN KEY ( ‘ Country ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ l o ca l commi t t ees i b f k 6 ‘ FOREIGN KEY ( ‘ LC ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ l o ca l commi t t ees i b f k 7 ‘ FOREIGN KEY ( ‘ NC ID ‘ )

REFERENCES ‘ nat iona l commi t tees ‘ ( ‘ NC ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ l oca t i on even ts ‘ADD CONSTRAINT ‘ l o c a t i o n e v e n t s i b f k 1 ‘ FOREIGN KEY ( ‘ Event ID ‘ )

REFERENCES ‘ events ‘ ( ‘ Event ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ membership ‘ADD CONSTRAINT ‘ membership ibfk 2 ‘ FOREIGN KEY ( ‘ Group ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ membership ibfk 1 ‘ FOREIGN KEY ( ‘ Person ID ‘ )

REFERENCES ‘ persons ‘ ( ‘ Person ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ na t iona l commi t tees ‘ADD CONSTRAINT ‘ na t i ona l commi t t ees ib f k 6 ‘ FOREIGN KEY ( ‘ Country ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ na t i ona l commi t t ees ib f k 4 ‘ FOREIGN KEY ( ‘ NC ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ na t i ona l commi t t ees ib f k 5 ‘ FOREIGN KEY

( ‘ Region ID ‘ ) REFERENCES ‘ regions ‘ ( ‘ Region ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ o rganis ing commit tees ‘ADD CONSTRAINT ‘ o rgan is ing commi t tees ib fk 2 ‘ FOREIGN KEY

( ‘ Event ID ‘ ) REFERENCES ‘ events ‘ ( ‘ Event ID ‘ ) ON UPDATE CASCADE,

65

Page 76: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE A. DATABASEONTWERP

ADD CONSTRAINT ‘ o rgan is ing commi t tees ib fk 1 ‘ FOREIGN KEY( ‘ Group ID ‘ ) REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ persons ‘ADD CONSTRAINT ‘ pe rsons ib fk 15 ‘ FOREIGN KEY ( ‘ Country ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ,ADD CONSTRAINT ‘ pe rsons ib fk 13 ‘ FOREIGN KEY ( ‘ LC ID ‘ )

REFERENCES ‘ loca l commi t tees ‘ ( ‘ LC ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ pe rsons ib fk 14 ‘ FOREIGN KEY ( ‘ N a t i o n a l i t y ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ;

ALTER TABLE ‘ regions ‘ADD CONSTRAINT ‘ r e g i o n s i b f k 2 ‘ FOREIGN KEY ( ‘ I n t e r r e g i o n I D ‘ )

REFERENCES ‘ i n t e r r e g i o n s ‘ ( ‘ I n t e r r e g i o n I D ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ r e g i o n s i b f k 1 ‘ FOREIGN KEY ( ‘ Region ID ‘ )

REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE;

ALTER TABLE ‘ r e g i s t r a t i o n a l u m n i ‘ADD CONSTRAINT ‘ r e g i s t r a t i o n a l u m n i i b f k 2 ‘ FOREIGN KEY

( ‘ Group ID ‘ ) REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATE CASCADE,ADD CONSTRAINT ‘ r e g i s t r a t i o n a l u m n i i b f k 1 ‘ FOREIGN KEY

( ‘ Person ID ‘ ) REFERENCES ‘ persons ‘ ( ‘ Person ID ‘ ) ;

ALTER TABLE ‘ sponsors ‘ADD CONSTRAINT ‘ sponsors ib fk 1 ‘ FOREIGN KEY ( ‘ Country ‘ )

REFERENCES ‘ count r ies ‘ ( ‘ code ‘ ) ;

ALTER TABLE ‘ working groups ‘ADD CONSTRAINT ‘ work ing groups ib fk 1 ‘ FOREIGN KEY

( ‘ WorkingGroup ID ‘ ) REFERENCES ‘ groups ‘ ( ‘ Group ID ‘ ) ON UPDATECASCADE;

66

Page 77: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Bijlage B

Broncode van DB en DB Result

/ * ** A basic DB connect ion c lass r e t u r n i n g

* r e s u l t s e t ob jec ts f o l l o w i n g an i t e r a t o r pa t t e rn

* /c lass DB{

/ * ** The database connect ion resource

* @var resource db

* /p r i v a t e $conn ;/ * ** The database name i t s e l f

* @var s t r i n g database

* /p r i v a t e $db ;/ * ** An ins tance of a s i n g l e t o n

* @var ob jec t DB

* /p r i v a t e s t a t i c $ instance = n u l l ;

/ * ** Const ruc tor

* @param s t r i n g server

* @param s t r i n g username

* @param s t r i n g password

* @param s t r i n g db name

* /p u b l i c f u n c t i o n c o n s t r u c t ( $host , $user , $pass , $db= fa lse ){

$ th is−>connect ( $host , $user , $pass ) ;

i f ( $ th i s−>conn && $db ) $ th is−>selectDb ( $db ) ;

67

Page 78: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

}/ * ** Used f o r r e t r e i v i n g an ins tance of a s i ng l e t on i f wanted

* @return ob jec t DB

* /p u b l i c s t a t i c f u n c t i o n get Ins tance ( $host , $user , $pass , $db ){

i f ( s e l f : : $ instance === n u l l ){

s e l f : : $ instance = new DB( $host , $user , $pass ,$db ) ;

}r e t u r n s e l f : : $ instance ;

}/ * ** Connect to database ( s tored i n t e r n a l l y )

* @param s t r i n g server

* @param s t r i n g username

* @param s t r i n g password

* /p u b l i c f u n c t i o n connect ( $host , $user , $pass ){

$ th is−>conn = @mysql connect ( $host , $user , $pass ) ;/ / He id i : changed ! ! l i n e below was added :/ / aim : make MyQSL and PHP communicate i n u t f −8mysql query ( ”SET NAMES ’ u t f 8 ’ COLLATE

’ u t f 8 u n i c o d e c i ’ ” ) ;}/ * ** Change databases

* @param s t r i n g database

* /p u b l i c f u n c t i o n selectDb ( $db ){

@mysql select db ( $db , $ th i s−>conn ) ;$ th is−>db = $db ;

}/ * ** Check which db i s c u r r e n t l y used

* @return s t r i n g database

* /p u b l i c f u n c t i o n getDbName ( ){

r e t u r n $ th is−>db ;}/ * ** Check i f the connect ion i s success fu l

68

Page 79: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

* @return boolean

* /p u b l i c f u n c t i o n isConnected ( ){

r e t u r n i s resou rce ( $ th is−>conn ) ;}/ * ** Close the connect ion

* /p u b l i c f u n c t i o n disconnect ( ){

@mysql close ( $ th i s−>conn ) ;}/ * ** Fetch the l a s t e r r o r

* @return s t r i n g e r r o r

* /p u b l i c f u n c t i o n ge tE r ro r ( ){

r e t u r n mysql error ( $ th i s−>conn ) ;}/ * ** Run a query aga ins t the database and r e t u r n

* a r e s u l t s e t i t e r a t o r ob jec t

* @return ob jec t DB Result

* /p u b l i c f u n c t i o n query ( $query ){

/ / removed @ i n f r o n t o f mysql query/ / added v a r i a b l e s $update and $delete ,

/ / same p r i n c i p l e s as $ i n s e r t$ r e s u l t = mysql query ( $query ) ;$ i n s e r t = fa lse ;$update = fa lse ;$de le te = fa lse ;i f ( strpos ( tr im ( strtolower ( $query ) ) , ’ i n s e r t ’ ) === 0)

$ i n s e r t = true ;i f ( strpos ( tr im ( strtolower ( $query ) ) , ’ update ’ ) === 0)

$update = true ;i f ( strpos ( tr im ( strtolower ( $query ) ) , ’ de le te ’ ) === 0)

$de le te = true ;r e t u r n new DB Result ( $ resu l t , $ th i s−>conn , $ inse r t ,

$update , $de le te ) ;}/ * ** Ret re ive i n f o about the server

* @return s t r i n g i n f o

69

Page 80: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

* /p u b l i c f u n c t i o n i n f o ( ){

r e t u r n mysql get server info ( $ th i s−>conn ) ;}/ * ** Get d e t a i l s about the cu r ren t system s ta tus

* @return ar ray d e t a i l s

* /p u b l i c f u n c t i o n s ta tus ( ){

r e t u r n explode ( ’ ’ , mysq l s ta t ( $ th is−>conn ) ) ;}/ * ** Escape a s t r i n g to make i t safe f o r mysql

* @return s t r i n g escaped output

* /p u b l i c f u n c t i o n escape ( $ s t r i n g ){

r e t u r n mysq l rea l escape s t r i ng( $s t r i ng , $ th i s−>conn ) ;

}} / / End of c lass DB

/ * ** DB Result c lass . Provides an i t e r a t o r wrapper

* f o r working wi th a MySQL r e s u l t .

* /c lass DB Result{

/ * ** The ID t h a t was created as a r e s u l t

* o f i n s e r t i n g a row

* @var i n t i d

* /p r i v a t e $ id ;/ * ** The s ize o f the r e s u l t s e t

* @var i n t leng th (num rows )

* /p r i v a t e $ length = 0;/ * ** The r e s u l t i t s e l f

* @var r e s u l t r e s u l t

* /p r i v a t e $ r e s u l t ;/ * *

70

Page 81: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

* The row at our cu r ren t p o s i t i o n i n the

* r e s u l t s e t

* @var ar ray row

* /p r i v a t e $currentRow = array ( ) ;/ * ** Current p o s i t i o n

* @var i n t p o s i t i o n

* /p r i v a t e $ po s i t i o n = 0;/ * ** The l a s t p o s i t i o n we were a t when we read from

* the r e s u l t s e t

* @var i n t l a s t p o s i t i o n

* /p r i v a t e $ l a s t P o s i t i o n = 0;/ * ** I f we have pu l l ed out any rows or not yet

* @var boolean Got rows

* /p r i v a t e $gotResul t = fa lse ;/ * ** The a f f ec ted number o f rows from the query

* @var i n t num rows

* /p r i v a t e $affectedRows = −1;

/ * ** Const ruc tor

* @param r e s u l t r e s u l t

* @param resource connect ion

* @param boolean i n s e r t query

* /p u b l i c f u n c t i o n c o n s t r u c t (& $ resu l t , &$conn , $ i n s e r t = false ,

$update= false , $de le te= fa lse ){

$ th is−>r e s u l t = $ r e s u l t ;$ th i s−>conn = $conn ;

/ / f o l l o w i n g l i n e s were changed a l o t/ / i n order to deal w i th unnecessary e r r o r si f ( $ th i s−>r e s u l t !== fa lse ) {

i f ( $ i n s e r t | | $update | | $dele te ) {$ th is−>affectedRows =

mysql affected rows ( ) ;}else {

71

Page 82: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

$ th is−>l eng th =( i n t ) mysql num rows ( $ th i s−>r e s u l t ) ;

}

i f ( $ i n s e r t ) {$ th is−>i d = mysql insert id ( ) ;

}}

}/ * ** Magic overloaded method .

* Returns data from the r e s u l t s e t

* @param s t r i n g column

* // / adapted according to post o f a r b o r i n t on/ / h t t p : / / forums . devnetwork . net

p u b l i c f u n c t i o n g e t ( $ f i e l d ){

i f ( $ th i s−> l a s t P o s i t i o n != $ th is−>p o s i t i o n | |! $ th i s−>gotResu l t )

{i f ( $ th i s−> l a s t P o s i t i o n + 1 !=

$ th is−>p o s i t i o n ){

mysql data seek ( $ th i s−>r e s u l t ,$ th i s−>p o s i t i o n ) ;

}$ th is−>currentRow =

mysql fetch assoc ( $ th i s−>r e s u l t ) ;$ th i s−> l a s t P o s i t i o n = $ th is−>p o s i t i o n ;$ th is−>gotResu l t = true ;

}r e t u r n $ th is−>currentRow [ $ f i e l d ] ;

}/ * ** Get the i n s e r t i d

* /p u b l i c f u n c t i o n i d ( ){

r e t u r n $ th is−>i d ;}/ * ** Size o f the r e s u l t s e t

* /p u b l i c f u n c t i o n leng th ( ){

r e t u r n $ th is−>l eng th ;

72

Page 83: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

}/ * ** Go to the f i r s t row of the r e s u l t s e t

* @return boolean

* /p u b l i c f u n c t i o n f i r s t ( ){

i f ( $ th i s−>l eng th > 0){

$ th is−>goto ( 0 ) ;r e t u r n true ;

}else r e t u r n fa lse ;

}/ * ** Go to the l a s t row of the r e s u l t s e t

* @return boolean

* /p u b l i c f u n c t i o n l a s t ( ){

r e t u r n $ th is−>goto ( $ th i s−>length −1);}/ * ** Check i f we ’ ve reched the end of the r e s u l t s e t

* @return boolean

* /p u b l i c f u n c t i o n end ( ){

i f ( $ th i s−>p o s i t i o n >= $th is−>l eng th ) r e t u r n true ;else r e t u r n fa lse ;

}/ * ** Check i f we ’ re a t the s t a r t o f the r e s u l t s e t

* @return boolean

* /p u b l i c f u n c t i o n s t a r t ( ){

r e t u r n ( $ th i s−>p o s i t i o n < 0 ) ;}/ * ** Move to the next row of the r e s u l t s e t

* @return boolean

* /p u b l i c f u n c t i o n next ( ){

r e t u r n $ th is−>goto ( $ th i s−>p o s i t i o n +1) ;}

73

Page 84: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE B. BRONCODE VAN DB EN DB RESULT

/ * ** Move to the prev ious row i n the r e s u l t s e t

* @return boolean

* /p u b l i c f u n c t i o n prev ( ){

r e t u r n $ th is−>goto ( $ th i s−>pos i t i on −1);}/ * ** Go to a s p e c i f i e d row i n the r e s u l t s e t

* Row numbering s t a r t s a t zero

* @param i n t row

* @return boolean

* /p u b l i c f u n c t i o n goto ( $ p o s i t i o n ){

i f ( $ p o s i t i o n < −1 | | $ p os i t i on > $ th is−>l eng th )r e t u r n fa lse ;

else{

$ th is−>p o s i t i o n = $ p o s i t i on ;r e t u r n true ;

}}/ * ** Get the a f f ec ted number o f rows

* /p u b l i c f u n c t i o n affectedRows ( ){

r e t u r n $ th is−>affectedRows ;}/ * ** Get the r e s u l t resource i t s e l f

* /p u b l i c f u n c t i o n &get ( ){

r e t u r n $ th is−>r e s u l t ;}/ * ** Get the cu r ren t p o s i t i o n

* /p u b l i c f u n c t i o n p o s i t i o n ( ){

r e t u r n $ th is−>p o s i t i o n ;}

} / / End of c lass DB Result

74

Page 85: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Bijlage C

Gebruikte programma’s

In deze bijlage wordt een overzicht gegeven van de programma’s die gebruikt werdenbij het tot stand komen van deze scriptie.

LATEX en LATEXDraw

Deze thesis werd vormgegeven met behulp van het tekstverwerkingssysteem LATEX.Voor meer informatie zie http://latex.ugent.be.

LATEXDraw (GNU General Public License, http://latexdraw.sourceforge.net) is eentoepassing geschreven in Java waarmee de gebruiker zelf tekeningen kan construeren,die dan door LATEXDraw automatisch omgezet worden naar PSTricks-code (zie figuurC.1). PSTricks is een LATEX-pakket waarmee tekeningen gemaakt kunnen worden viacommando’s (http://tug.org/PSTricks/). Met LATEXDraw werden figuren 1.1, 1.2 en 1.3gemaakt.

SciTE en Smultron

SciTE is een scintilla gebaseerde tekstverwerker (‘SCIntilla based Text Editor’). Scintillamaakt het programmeren gemakkelijker door nadruk te leggen op bepaalde syntax. Erwordt gebruik gemaakt van verschillende kleuren, lettertypes, stijlen en achtergrond-kleuren. Andere functies zoals regelnummering en tabaanduidingen komen goed vanpas bij het programmeren. SciTE is vrijgegeven onder de Historical Permission Noticeand Disclaimer (http://www.scintilla.org/SciTE.html).

Een gelijkaardig programma voor Macintosh is Smultron, vrijgegeven onder de BSDlicentie (http://smultron.sourceforge.net).

Firefox

Het ontwikkelen en testen van de website gebeurde voornamelijk met Firefox, eenopen source browser vrijgegeven onder de Mozilla End-User Licensing Agreements(http://www.mozilla-europe.org). Een van de kenmerken van Firefox is dat uitbreidin-

75

Page 86: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE C. GEBRUIKTE PROGRAMMA’S

Figuur C.1: Het programma LATEXDraw

gen, ook wel extensies genoemd, geınstalleerd kunnen worden. Deze uitbreidingenzijn geschreven door externe ontwikkelaars.

Web Developer

De extensie Web Developer is ontworpen voor webontwikkelaars. Zo kan de CSS-opmaak van elk element van een webpagina bekeken worden (figuur C.2b), kunnenpagina’s via het menu meteen worden gevalideerd in http://validator.w3.org en kande informatie over een HTML-element bij het element zelf worden weergegeven. Ziehttp://chrispederick.com/work/web-developer/.

HTML Validator

Een (X)HTML-pagina laten valideren kan echter nog gemakkelijker met HTML Validator.Deze extensie laat ‘inline’ validering toe in Firefox, een pagina wordt dus gevalideerdvan zodra deze ingeladen wordt in de browser. Het resultaat wordt weergegeven in destatusbalk (figuur C.2b). Zie http://users.skynet.be/mgueury/mozilla/.

InkScape

Onder andere voor het tekenen van de EER-diagrammen werd InkScape gebruikt. Ditis een open source programma, vrijgegeven onder de GNU General Public License,waarmee vectortekeningen gemaakt kunnen worden. Zie http://www.inkscape.org

76

Page 87: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE C. GEBRUIKTE PROGRAMMA’S

(a) (b)

Figuur C.2: a: Bekijken van CSS-informatie met Web Developer; b: resultaat van de(X)HTML-validatie in de statusbalk van Firefox (Gueury, n.d.)

De volgende figuren werden gemaakt met InkScape: 2.2a, 2.2b, 2.3, 2.5, 2.6, 4.4,A.1, A.2, A.3, A.4, A.5, A.6 en A.7.

Gadwin PrintScreen en Schermafbeelding

Op het Windows-besturingssysteem bevindt zich de mogelijkheid om met de knop‘Prt Sc’ een afbeelding te maken van het huidige scherm. De figuur wordt beschik-baar op het klembord, maar er is een apart grafisch programma nodig om de figuur tebewerken.

Gadwin PrintScreen is een open source programma dat gebruikt wordt om scher-mafbeeldingen te maken (zie figuur C.3). Eigenschappen zoals de bestemming, debron en het formaat van de schermafbeelding kunnen vooraf ingesteld worden, zo-dat het maken van schermafbeeldingen sneller verloopt. Het programma kan auto-matisch gekoppeld worden aan een grafisch programma voor verdere verwerking. Ziehttp://www.gadwin.com/printscreen/

De volgende figuren werden gemaakt met Gadwin PrintScreen: 3.1, 3.2a, 3.2b, 3.3,3.4, 3.5, 3.6, 4.5a, 4.5b, 4.6a, 4.6b en C.3.

In Mac OS X is de mogelijkheid om (een gedeelte van) het scherm vast te leggenin een afbeelding standaard aanwezig via het hulpprogramma Schermafbeelding. Defiguren 3.7, 4.2, 4.7, C.1 en C.2a werden hiermee gemaakt.

GIMP

GNU Image Manipulation Program (GIMP) is software voor het bewerken van raster-beelden en het open source alternatief voor Adobe Photoshop (The GIMP Team, 2007).GIMP kan gebruikt worden om afbeeldingen (eventueel meerdere tegelijk) te makenen te bewerken. GIMP werd in deze thesis gebruikt voor het bewerken van foto’s

77

Page 88: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

BIJLAGE C. GEBRUIKTE PROGRAMMA’S

(a)

Figuur C.3: Via de tabbladen bron, bestemming en afbeelding kunnen de voorkeuren vooreen print screen opgegeven worden

en schermafbeeldingen. GIMP is vrijgegeven onder de GNU General Public License(http://www.gimp.org).

FreeMind

Het overzicht van de bestandsstructuur (figuur 4.1) is gemaakt met FreeMind, eenmindmappingprogramma vrijgegeven onder de GNU General Public License. Zie ookhttp://freemind.sourceforge.net.

78

Page 89: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Lijst van figuren

1.1 Structuur van IAAS Belgie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Regio Noordwest-Europa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Interregio Europa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1 De fasen van het databaseontwerpproces . . . . . . . . . . . . . . . . . . . . 52.2 Overzicht van de gebruikte symbolen in de EER-diagrammen . . . . . . . . . 72.3 De structuur van IAAS voorgesteld met behulp van een EER-model . . . . . 82.4 Hoofding van de relatie ‘Countries’ . . . . . . . . . . . . . . . . . . . . . . . . 92.5 Uitbreiding van het EER-diagram met het entiteittype ‘Country’ . . . . . . . . 102.6 Overzicht van alle tabellen met hun primaire en vreemde sleutels . . . . . . . 12

3.1 De navigatiebalk van de website . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Loginbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3 Inschrijvingsformulier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4 Pagina uit de ledensectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.5 Print Screen van de website . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.6 Taalkeuze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.7 De vertaalpagina’s van SiteTranslator . . . . . . . . . . . . . . . . . . . . . . 18

4.1 Bestandsstructuur van de website . . . . . . . . . . . . . . . . . . . . . . . . 214.2 Pagina-info van de IAAS-website . . . . . . . . . . . . . . . . . . . . . . . . . 274.3 Hoofding van de tabellen in de databank van SiteTranslator . . . . . . . . . . 294.4 De klassen van SiteTranslator . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.5 Controle op de validatieregels . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.6 Gebruik van element hierselect . . . . . . . . . . . . . . . . . . . . . . . . . . 354.7 Registratieformulier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.8 De tabel met de nieuwsberichten . . . . . . . . . . . . . . . . . . . . . . . . 38

A.1 EER-diagram voor het entiteittype ‘Person’ . . . . . . . . . . . . . . . . . . . 43A.2 EER-diagram voor het entiteittype ‘Event’ . . . . . . . . . . . . . . . . . . . . 44A.3 EER-diagram voor het entiteittype ‘Sponsor’ . . . . . . . . . . . . . . . . . . 44A.4 EER-diagram voor het entiteittype ‘Partner’ . . . . . . . . . . . . . . . . . . . 44A.5 EER-diagram voor het entiteittype ‘Fee’ . . . . . . . . . . . . . . . . . . . . . 45A.6 EER-diagram voor het entiteittype ‘ContactPerson’ . . . . . . . . . . . . . . . 45

79

Page 90: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

LIJST VAN FIGUREN

A.7 EER-diagram voor het entiteittype ‘Group’ . . . . . . . . . . . . . . . . . . . 46

C.1 Het programma LATEXDraw . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76C.2 Loginbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77C.3 Gadwin PrintScreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

80

Page 91: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Lijst van tabellen

4.1 MySQL-gerelateerde functies in PHP (The PHP Group, 2007c) . . . . . . . . 204.2 Formulierelementen van QuickForm die standaard aanwezig zijn in HTML . . 324.3 Formulierelementen van QuickForm die niet aanwezig zijn in HTML . . . . . 324.4 Validatieregels van QuickForm . . . . . . . . . . . . . . . . . . . . . . . . . . 334.5 MD5-hashfunctie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

81

Page 92: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

Literatuurlijst

Apress Publishing (2004), ‘Using HTML Quickform for form processing’. Beschikbaarop: http://www.devarticles.com/c/a/Web-Graphic-Design/ [Bezocht: 20 mei2007].

Asmussen, J. (2005), ‘Style it your way’. Beschikbaar op:http://www.noscope.com/journal/2005/06/style-it-your-way [Bezocht: 31mei 2007].

Blankenhorn, K., Hafiz bin Ismail, M., Wolf, F., Clemens, D. & Reynen, S. (2005), ‘Feed-creator’. Beschikbaar op: http://feedcreator.org/ [Bezocht: 18 april 2007].

Chen, P. P.-S. (1976), ‘The entity-relationship model - toward a unified view of data’,ACM Transactions on Database Systems 1(1), 9–36.

Converse, T., Park, J. & Morgan, C. (2006), PHP 5 en MySQL het complete handboek,Academic Service.

Corbyn, C. A. (2006), ‘A MySQL class/iterator for PHP5’. Beschikbaar op:http://www.w3style.co.uk/a-mysql-classiterator-for-php5 [Bezocht: 23 mei2007].

Davis, M. & Whistler, K. (2006), Unicode Collation Algorithm, Unico-de Technical Standard #10, Unicode Consortium. Beschikbaar op:http://www.unicode.org/unicode/reports/tr10/ [Bezocht: 10 april 2007].

De Tre, G. (2007a), Conceptueel databaseontwerp, in ‘Principes van databases’, Pear-son Education Benelux, hoofdstuk 3, pp. 55–92.

De Tre, G. (2007b), Relationele databases: logisch databaseontwerp, in ‘Principes vandatabases’, Pearson Education Benelux, hoofdstuk 5, pp. 141–182.

Dorward, D. (2005), Ampersands, PHP sessions and valid HTML, Education and out-reach / web site quality, Quality Assurance Interest Group, W3C. Beschikbaar op:http://www.w3.org/QA/2005/04/php-session [Bezocht: 21 april 2007].

Eberhardt, C. (2004), ‘Creating multilingual websites’. Beschikbaar op:http://www.jugglingdb.com/compendium/geek/multilingualwebsites.html

[Bezocht: 9 april 2007].

82

Page 93: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

LITERATUURLIJST

Gueury, M. (n.d.), ‘Html Validator for Firefox and Mozilla’. Beschikbaar op:http://users.skynet.be/mgueury/mozilla/ [Bezocht: 28 mei 2007].

Ishida, R. (2006), Language tags in HTML andXML, Technical report, W3C. Beschikbaar op:http://www.w3.org/International/articles/language-tags/Overview.en.php

[Bezocht: 18 april 2007].

Ishida, R. (2007), Character sets & encodings in XHTML,HTML and CSS, W3c i18n article, W3C. Beschikbaar op:http://www.w3.org/International/tutorials/tutorial-char-enc/ [Bezocht:10 april 2007].

ISO (2007), ISO 3166 country codes, ISO 3166, ISO. Beschikbaar op:http://www.iso.org/iso/en/prods-services/iso3166ma/index.html [Bezocht:25 mei 2007].

living-e AG (n.d.), ‘living-e AG: MAMP - Mac - Apache - MySQL - PHP’. Beschikbaarop: http://www.mamp.info/en/home.php [Bezocht: 17 mei 2007].

MySQL AB (2007), ‘9.2.2. Identifier case sensitivity’. Beschikbaar op:http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

[Bezocht: 21 mei 2007].

MySQL AB (n.d.a), ‘10.4. Connection character sets and collations’. Beschikbaar op:http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html [Bezocht:10 april 2007].

MySQL AB (n.d.b), ‘13.1.5. CREATE TABLE syntax’. Beschikbaar op:http://dev.mysql.com/doc/refman/5.0/en/create-table.html [Bezocht: 4april 2007].

MySQL AB (n.d.c), ‘MySQL AB :: The world’s most popular open source database’.Beschikbaar op: http://www.mysql.com/ [Bezocht: 11 april 2007].

Nottingham, M. & Sayre, R. (2005), The Atom syndication format, RFC 4287, IETF.Beschikbaar op: http://tools.ietf.org/html/rfc4287 [Bezocht: 18 april 2007].

phpMyAdmin Developers Team (2007), ‘The phpmyadmin project’. Beschikbaar op:http://www.phpmyadmin.net [Bezocht: 20 mei 2007].

Pierre de Geyer, C., Bourdon, R., Bardinon, P. & Daniel, F. (n.d.), ‘Install PHP5 ApacheMySQL on Windows: WAMP5’. Beschikbaar op: http://www.en.wampserver.com/[Bezocht: 17 mei 2007].

Raggett, D., Le Hors, A. & Jacobs, I. (1999a), Character entity re-ferences in HTML 4, Recommendation, W3C. Beschikbaar op:

83

Page 94: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

LITERATUURLIJST

http://www.w3.org/TR/REC-html40/sgml/entities.html [Bezocht: 22 april2007].

Raggett, D., Le Hors, A. & Jacobs, I. (1999b), Forms inHTML documents, Recommendation, W3C. Beschikbaar op:http://www.w3.org/TR/html4/interact/forms.html [Bezocht: 10 april 2007].

Raggett, D., Le Hors, A. & Jacobs, I. (1999c), HTML 4.01 specification, Recommenda-tion, W3C. Beschikbaar op: http://www.w3.org/TR/html401/ [Bezocht: 11 april2007].

Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. & Lear, E. (1996),Address allocation for private internets, RFC 1918, IETF. Beschikbaar op:http://www.ietf.org/rfc/rfc1918.txt?number=1918 [Bezocht: 17 mei 2007].

Rivest, R. (1992), The MD5 message-digest algorithm, RFC 1321, IETF. Beschikbaarop: http://www.ietf.org/rfc/rfc1321.txt [Bezocht: 18 mei 2007].

Round, M. (2007), ‘Unicode-friendly PHP and MySQL’. Beschikbaar op:http://www.malevolent.com/weblog/archive/2007/03/ [Bezocht: 10 april 2007].

The GIMP Team (2007), ‘Gimp’. Beschikbaar op: http://www.gimp.org/ [Bezocht:21 mei 2007].

The PHP Group (2007a), ‘PEAR - PHP Extension and Application Repository’. Be-schikbaar op: http://pear.php.net [Bezocht: 20 mei 2007].

The PHP Group (2007b), ‘PHP: Multibyte string functions - manual’. Beschikbaar op:http://be.php.net/mbstring [Bezocht: 10 april 2007].

The PHP Group (2007c), ‘PHP: MySQL functies - manual’. Beschikbaar op:http://be.php.net/manual/nl/ref.mysql.php [Bezocht: 31 mei 2007].

The PHP Group (2007d), ‘PHP: MySQL improved extension - manual’. Beschikbaarop: http://be.php.net/manual/nl/ref.mysqli.php [Bezocht: 31 mei 2006].

The PHP Group (2007e), ‘PHP: Strings - manual’. Beschikbaar op:http://be.php.net/types.string [Bezocht: 23 mei 2007].

The PHP Group (n.d.), ‘PHP: The Hypertext Preprocessor’. Beschikbaar op:http://www.php.net [Bezocht: 11 april 2007].

The Unicode Consortium (2006), ‘The Unicode character code charts by script’. Be-schikbaar op: http://www.unicode.org/charts/ [Bezocht: 10 april 2007].

Ullman, L. (2007a), Developing web applications, in ‘PHP 5 Advanced’, 2 edn, VisualQuickPro Guide, Peachpit Press, 1249 Eighth Street, Berkeley, CA 94710, hoofd-stuk 2, pp. 43–80.

84

Page 95: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb

LITERATUURLIJST

Ullman, L. (2007b), Using PEAR, in ‘PHP 5 Advanced’, 2 edn, Visual QuickPro Guide,Peachpit Press, 1249 Eighth Street, Berkeley, CA 94710, hoofdstuk 12, pp. 443–480.

W3C (2002), XHTML 1.0 The Extensible HyperText Markup Language (second edi-tion), Recommendation, W3C. Beschikbaar op: http://www.w3.org/TR/xhtml1/

[Bezocht: 11 april 2007].

W3C (2007), ‘Cascading Style Sheets’. Beschikbaar op:http://www.w3.org/Style/CSS/ [Bezocht: 21 mei 2007].

WACT Development Team (2007), ‘Character sets, character encoding issues’. Be-schikbaar op: http://www.phpwact.org [Bezocht: 10 april 2007].

Wikipedia (2007), ‘MyISAM’. Beschikbaar op: http://en.wikipedia.org/wiki/MyISAM[Bezocht: 21 mei 2007].

Winstead, J. (n.d.), ‘Unicode and other funny characters’. Beschikbaarop: http://dev.mysql.com/tech-resources/articles/4.1/unicode.html [Be-zocht: 10 april 2007].

85

Page 96: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb
Page 97: Opzetten van een databank met website voor IAAS · Om te beginnen zou ik mijn ouders willen bedanken voor de kans die ik gekregen heb met het volgen van dit extra jaar. Hierdoor heb