Universiteit Gent Faculteit Toegepaste Wetenschappen. Vakgroep Electronica en Informatiesystemen Voorzitter: J. Van Campenhout. door Pieter Danckaert



Vergelijkbare documenten
Versie 0.4. Documentatie Onsweb Club plugin voor KNKV verenigingen. Laatste wijziging: 19 juli 2012 Auteurs: Marien Dongstra, Sebastian Huisman

Gebruikershandleiding voor: Beperkte Password protectie met JavaScript

HTML in Outlook Hoe zorgt u ervoor dat uw goed in beeld komt?

HTML Editor: de eerste stappen

Schrijven voor het web. 1TIN Internettechonologie les 02 1

Handleiding: Whitelabel Customersite

Een webpagina maken. Een website bouwen met HTML en CSS practicum 1

HTML Editor: tabellen en hyperlinks

Stap 2: informatie op je website / weblog plaatsen

Een website omzetten naar WordPress

Samen op zoek naar proeven

De tag aan het begin van het PHPscript is "<?php" aan het einde van het PHPscript gebruik je "?>".

Greet Verhelst In het volgende scherm log je in met je gebruikersnaam of adres en paswoord.

Software 1. Basis HTML. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar semester 1

HANDLEIDING RAPPORTEN

HTML richtlijnen marketing. part of the valley

SBO WEBSITES BOUWEN IN 7 STAPPEN

Kies File>New>Blank Page>PHP. Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site

C a s e S t u d y Y i f e C o n t a c t i n f o r m a t i e

Rapporten. Labels en Rapporten in Atlantis 1. Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports)

Versie 0.2. Documentatie Onsweb Club plugin voor NHV verenigingen. Laatste wijziging: 10 mei 2013 Auteurs: Marien Dongstra, Sebastian Huisman

Handleiding Webapplicatie Robin

Frontend ontwikkeling

v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen

Gebruikers Handleiding

Een ASP.NET applicatie opzetten. Beginsituatie:

Websitecursus deel 1 HTML

DATABASEBEHEER IN EXCEL

Handleiding Wordpress

Inleiding Het adres Hoe werkt ? Je adres registreren Aanmelden bij Outlook Schermonderdelen...

Zonnepanelen Hoe krijg je de data op je website?

FrontPage. Kies Bestand, nieuw en kies vervolgens Website met één pagina: Kies bij voorkeur een locatie:

Koppeling met een database

Vooreerst moeten alle gebruikers kenbaar gemaakt worden door ze een bepaalde code toe te kennen.

Query SQL Boekje. Fredrik Hamer

WEBSITE USABILITY. white-paper

IMPULSFONDS VOOR HET MIGRANTENBELEID

Module IV - Cascading Style Sheets (CSS)

Web building basis: HTML. Karel Nijs 2008/09

Handleiding RS Form! 1.0.4

Beschrijving functioneel en technisch design van de website

Handleiding enquetemaken.be

Systeemontwikkeling, Hoofdstuk 6, Query s, macro s en rapporten in MS Access 2010

SMART- Leerdoel Mathijs de Bok Emotion - RMM42

Websitebon.nl Documentatie Eerste zeer snelle opzet Update

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

Online banner ontwerp via UBA website

Handleiding Webapplicatie Robin

Module V - XML. Stefan Flipkens - Cursus: Internet - Intranet ( ) V 1

1. Open het programma KompoZer Het grote witte vlak is een nog lege webpagina. Deze gaan we nu van inhoud voorzien.

Handleiding 2designers Content Management Systeem

Les 15 : updaten van gegevens in de database (deel2).

De frameset uit de afbeelding wordt op de volgende manier gedefinieerd:

VKblog-importer : De gebruiksaanwijzing.

Trippeltrap Content Management System

Welkom bij mijn website tutorial (Deel 2)

Artikelbeheer aanmaken

Handleiding bij online inschrijving provinciale wintercompetitie

Bijlage Inlezen nieuwe tarieven per verzekeraar

Handleiding Opmaken fiche

IMAP-handleiding Bookinto

Central Station. CS website

Vul hier de naam, wachtwoord en adres in die je voor je wiki wilt gebruiken en klik op de knop [Join Now] gebruik een geldig adres.

Foutcontrole met Javascript

Leerlingdossier & handelingsplannen. Welke mogelijkheden biedt de online tekstverwerker in ESIS? FAQ

Toelichting op enkele knoppen: (als u de muis bij een knop houdt, verschijnt een tekst met een korte aanwijzing (tooltip) bij deze knop).

Handleiding Online subsidies aanvragen

Websitecheck. Taak en Tekst voor websites die werken.

JOBSITE Handleiding ( )

INHOUDSOPGAVE BEHEERDERS HANDLEIDING

Grafisch ontwerp. Referenties.

Excellerend Kwartaaltip

Elektronisch werkbriefje

Van Dreamweaver CS4 naar CS5

Gebruikershandleiding webagenda voor begrafenisondernemers

FAQ versie

HTML & CSS DEEL 1. webdesign. Programmeren met CodeAcademy

Lab Webdesign: Javascript 11 februari 2008

En hoe gaan ze dit allemaal terugvinden?

1. De website

Schoolwebsite.nu. Snel aan de slag met uw website. Versie 4.0

Handleiding website. Inloggen Start uw internet browser en ga naar

Mywebshop Dagelijks gebruik. Versie 1.0 December Copyright 2009 Wikit BVBA, alle rechten voorbehouden

Om met Symbaloo te werken, moet u zich aanmelden bij de website van Symbaloo.

Alle helponderwerpen Over blokken Over

Week 1 1/4. Week 1 2/4

Werken met Leerkracht

DE ELEKTRONISCHE IDENTITEITSKAART (EID)

Leerlingdossier & handelingsplannen

UW EVENEMENT AANKONDIGEN BIJ UIT IN VLAANDEREN

LES 2 INDERDAAD, JE MOET DE WEBBROWSER AANWIJZINGEN GEVEN, MAAR DAN WEL VOLGENS DE AFGESPROKEN REGELS

Handleiding bij WSM MailformGenerator

Configuratie van de Website

Werkschrift : Hoe werk ik op WikiKids?

De app kan gedownload worden in de Appstore en de Playstore door te zoeken op sportlinked of via

mynetpay BE - Handleiding

Les W-01: HTML. Een website bouwen in HTML. 2006, David Lans

1. Inloggen op

Elektronisch werkbriefje

Transcriptie:

Universiteit Gent Faculteit Toegepaste Wetenschappen Vakgroep Electronica en Informatiesystemen Voorzitter: J. Van Campenhout Optimaliseren webstek Gezinsbond afdeling Asse-Kobbegem-Bekkerzeel door Pieter Danckaert Promotor: Prof. R. Van de Walle Thesisbegeleider: Wesley De Neve Scriptie ingediend tot het behalen van de academische graad van gediplomeerde in de aanvullende studies van informatica Academiejaar 2002-2003

Voorwoord In de hedendaagse informatie-maatschappij hebben de computer en het internet een zeer belangrijke plaats ingenomen. Alles wordt meer en meer geautomatiseerd en informatie moet op een efficiënte en duidelijke manier beschikbaar gemaakt worden voor het doelpubliek. Deze tendens is zeker en vast toe te juichen en maakt het leven op veel vlakken een stuk makkelijker. Er is echter ook een nadeel, namelijk dat de mensen meer en meer eisen beginnen te stellen. De oude manier van werken blijkt stilaan niet meer aanvaard te worden. En dat vormt een probleem voor de verenigingen die zich kosteloos willen inzetten voor een bepaald doel, maar niet het vertrouwen krijgen van het publiek. Dikwijls hebben ze gewoon het budget niet om zich aan te passen aan de nieuwe technologieën. Naast een digitale kloof onder het volk, dreigt er dus ook een kloof te ontstaan tussen de rijke verenigingen en de arme. Het feit dat we in deze opleiding de mogelijkheid krijgen om een project voor een vereniging of bedrijf te realiseren is in dit opzicht een belangrijke stap om die kloof niet te laten ontstaan. In dit voorwoord zou ik ook een dankwoordje willen richten naar enkele personen. Zonder hun hulp zou ik nooit tot dit resultaat hebben kunnen komen. In de eerste plaats mijn promotor Prof. R. Van de Walle en mijn thesisbegeleider Wesley De Neve, die mij enkele nuttige tips en suggesties aangereikt hebben. Ook wil ik de bestuursleden van de Gezinsbond Asse bedanken om mij de kans te geven dit project aan te vatten. Ten slotte gaat mijn dank ook uit naar mijn ouders, die mij de kans gegeven hebben nog een jaar bij te studeren. Toelating tot bruikleen De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie. II

Overzicht Optimaliseren webstek Gezinsbond afdeling Asse-Kobbegem-Bekkerzeel door Pieter Danckaert Scriptie ingediend tot het behalen van de academische graad van gediplomeerde in de aanvullende studies van informatica Academiejaar 2002-2003 Promotor: Prof. R. Van de Walle Thesisbegeleider: Wesley De Neve Faculteit Toegepaste Wetenschappen Universiteit Gent Vakgroep Elektronica en Informatiesystemen Voorzitter: J. Van Campenhout Samenvatting Bij het optimaliseren van de website zijn vier aspecten belangrijk. Ten eerste het aanpassen van de lay-out zodat de problemen met het inline frame vermeden worden. Die aanpassing werd gerealiseerd met JavaScript. Het tweede aspect is het aanpassen van de code aan de HTML 4.01 standaard, met in het bijzonder het scheiden van inhoud en opmaak via cascading style sheets. Ten derde werd een databank ontwikkeld (in Access) ter ondersteuning van de tweedehandsbeurs. Het laatste aspect is het realiseren van een internet-toegang tot de databank via ASP. Trefwoorden: website, Access database, ASP, Gezinsbond, CSS III

Inhoudstafel VOORWOORD...II OVERZICHT...III INHOUDSTAFEL... IV AFKORTINGEN... VI INLEIDING...1 I. DE GEZINSBOND...2 II. DOELSTELLINGEN...3 II.1. VERBETEREN LAY-OUT HUIDIGE WEBSITE...3 II.2. AANPASSEN WEBSITE AAN HTML 4.01 STANDAARD...3 II.3. DATABASE TER ONDERSTEUNING VAN DE TWEEDEHANDSBEURS...4 II.3.1. Inschrijving van de verkopers...4 II.3.2. Het afgeven van de artikels...4 II.3.3. De verkoop...4 II.3.4. Teruggave van resterende artikels plus het geld...4 II.4. TOEGANG TOT DE DATABANK VIA INTERNET...5 III. ONTWIKKELING...7 III.1 LAY-OUT VAN DE WEBSITE...7 III.1.1. ASP of PHP...7 III.1.2. JavaScript...7 III.1.3. Transparante figuren...9 III.1.4. Besluit...10 III.2 HTML 4.01 STANDAARD...11 III.2.1. Opgeven van een document type definition...11 III.2.2. De meta-tags...11 III.2.3 Opmaak in CSS...12 III.2.4 Besluit...15 III.3 ONWIKKELING DATABASE...16 III.3.2. Tabellen...16 III.3.3. Relaties...17 III.3.4. Drievoudige in plaats van tweevoudige primaire sleutel...17 III.3.5. Formulieren...18 III.3.6. Query s en rapporten...19 III.3.7. Database replicatie en synchronisatie...21 III.3.8. Besluit...21 III.4 INTERNET TOEGANG NAAR DATABANK VIA ASP...22 III.4.1. Beveiliging...22 IV

III.4.2. De beheerder...24 III.4.3. De verkopers...26 III.4.4. Besluit...29 ALGEMEEN BESLUIT...30 APPENDICES...31 APPENDIX A: PRINT VAN DE OUDE WEBSITE MET OPERA...31 APPENDIX B: PRINT VAN DE OUDE WEBSITE MET INTERNET EXPLORER...32 APPENDIX C: PRINT VAN DE NIEUWE WEBSITE...33 APPENDIX D: DATABASE FORMULIER INGAVE VERKOPERS EN HUN ARTIKELS...34 APPENDIX E: DATABASE FORMULIER INGAVE VERKOPEN...35 APPENDIX F: DATABASE RAPPORT VERKOCHTE ARTIKELS PER VERKOPER...36 APPENDIX G: DATABASE RAPPORT NIET VERKOCHTE ARTIKELS PER VERKOPER...37 APPENDIX H: DATABASE RAPPORT VERKOOPSTOTALEN...38 APPENDIX I: CD-ROM...39 BIBLIOGRAFISCHE REFERENTIES...40 BOEKEN...40 INFORMATIE VAN HET INTERNET...40 LIJST VAN FIGUREN...41 LIJST VAN CODE-FRAGMENTEN...41 V

Afkortingen ABK: Asse-Bekkerzeel-Kobbegem DTD: Document Type Definition HTML: Hypertext Markup Language CSS: Cascading Style Sheets ASP: Active Server Pages PHP: Hypertext Preprocessor VI

Inleiding De reden waarom ik het project van de Gezinsbond gekozen heb, heeft uiteraard te maken met het feit dat mijn vader Secretaris is van de betreffende afdeling. Ik kende de wensen in verband met de tweedehandsbeurs en de website en dus was dit een unieke mogelijkheid om mijn steentje bij te dragen aan de werking van de Gezinsbond. Eerst zal ik uitvoerig uitleggen wat de precieze doelstellingen zijn van deze scriptie. De eerste twee doelstellingen hebben te maken met de website en de laatste twee met de tweedehandsbeurs, één van de activiteiten van de Gezinsbond. Daarna leg ik voor elke doelstelling uit welke oplossing ik ontwikkeld heb en hoe ik dat gerealiseerd heb. Tot slot geef ik nog een klein besluit.

I. De Gezinsbond De Gezinsbond, vroeger beter bekend als de Bond voor Grote en Jonge Gezinnen, is een vereniging die in heel Vlaanderen sinds lang een grote bekendheid geniet. Zij probeert zich op alle vlakken in te zetten voor de gezinnen: via het aanbieden van allerlei diensten, het organiseren van activiteiten en het opvolgen van het gezinsbeleid. Er zijn meer dan 300 000 gezinnen lid van de bond en meer dan 14000 vrijwilligers zetten er zich dagelijks voor in. Drie specifieke doelstellingen worden door de Gezinsbond nagestreefd: Het bevorderen van de solidariteit tussen de gezinnen. De belangen van de gezinnen behartigen. Ijveren voor een gezins- en kindvriendelijk klimaat. Alle gezinnen kunnen lid worden van de Gezinsbond, zowel grote gezinnen als kleine gezinnen, jonge gezinnen, grootoudergezinnen, éénoudergezinnen, nieuw samengestelde gezinnen, enz. 1 De Gezinsbond is op vier verschillende niveau s georganiseerd. Het eerste niveau betreft de plaatselijke afdelingen. Zij richten de diensten in, organiseren activiteiten en behartigen de belangen van de gezinnen bij het gemeentebestuur. De afdeling Asse- Bekkerzeel-Kobbegem is een plaatselijke afdeling. Het tweede niveau is het gewestelijke niveau. Dat heeft als taken het stimuleren van de afdelingswerking en het organiseren van grote afdelingsoverschrijdende activiteiten. De afdeling Asse-Bekkerzeel-Kobbegem valt onder het gewest Asse- Halle-Vilvoorde. Het provinciale niveau is het derde niveau. Daar worden gezamenlijke standpunten ingenomen voor de gezinnen en wordt de coördinatie verzorgd van de provinciale werking van de dochter-vzw s van de Bond. De Algemene Vergadering is het hoogste orgaan van de Gezinsbond. De leden van de Algemene Vergadering kiezen een Raad van Beheer die op zijn beurt een hoofdbestuur verkiest. 1 http://www.gezinsbond.be/index_ns.htm 2

II. Doelstellingen II.1. Verbeteren lay-out huidige website Vanuit het centrale bestuur worden de plaatselijke afdelingen van de Gezinsbond aangemoedigd om een website op te starten om de communicatie met de leden en kandidaat-leden te verbeteren. Ook de afdeling Asse-Bekkerzeel-Kobbegem (voortaan afgekort tot ABK) heeft een website ontwikkeld. Daarbij werd gekozen voor een inline frame. Dit betekent dat de website bestaat uit een index-pagina met de titelbalk, het menu en het inline frame en daarnaast de pagina s met de eigenlijke informatie. Vraagt men een pagina op via het menu, dan wordt dat ingeladen in het frame. Dit had als voordeel dat als de lay-out aangepast moest worden, dit maar één keer hoefde te gebeuren, namelijk in de index pagina. Er zijn echter twee grote nadelen aan die methode. Het eerste is dat de gewone pagina s met de informatie geen titelbalk en menu hebben, dus kan men in feite geen link leggen naar één van die pagina s. Doet men dat wel, dan krijgt men enkel die pagina te zien en weet men in feite niet op welke website men zich bevindt. Het tweede nadeel betreft het afprinten van de pagina s. Ofwel wordt het inline frame niet afgeprint (zie Appendix A), ofwel wordt er slechts een stuk afgeprint (zie Appendix B). Men moet dus de informatie selecteren of de pagina apart opvragen. De eerste doelstelling bestaat er dus in deze twee nadelen uit de weg te ruimen zonder aan de eerste eigenschap te tornen, namelijk dat de lay-out makkelijk aangepast kan worden. II.2. Aanpassen website aan HTML 4.01 standaard Aangezien de eerste versie van de website redelijk snel in mekaar gestoken werd zonder veel kennis van zaken, werd er ook geen belang gehecht aan de standaarden. Zo werd er bijvoorbeeld zelden een document type definition opgegeven (DTD), werden de meta-tags dikwijls over het hoofd gezien en werd de opmaak van de pagina s bijna volledig verzorgd door html-tags. Het is bijgevolg de bedoeling dat alle pagina s voorzien worden van een DTD en metatags. Bovendien moet, en dit is de belangrijkste eigenschap van de HTML 4.01 standaard, de opmaak zoveel mogelijk gescheiden worden van de inhoud via het gebruik van cascading style sheets (CSS). De opmaak moet dus maar één keer gedefinieerd worden in een CSS file. Alle HTML pagina s kunnen daar dan aan gekoppeld worden via een speciale link. Dit draagt ook bij tot de eerste doelstelling, namelijk dat de lay-out makkelijk aangepast moet kunnen worden. 3

II.3. Database ter ondersteuning van de tweedehandsbeurs Eén van de belangrijke activiteiten van de Gezinsbond is het organiseren van tweedehandsbeurzen voor voornamelijk kinderkledij en speelgoed. In de afdeling ABK wordt tweemaal per jaar een beurs georganiseerd. Om de probleemstelling van de database goed te begrijpen leg ik eerst uit hoe zo n tweedehandsbeurs in zijn werk gaat, want het is niet zomaar een ordinaire rommelmarkt. II.3.1. Inschrijving van de verkopers Iedereen die artikels wenst te verkopen op de beurs moet zich inschrijven. Het maximaal aantal verkopers is beperkt tot 70 plus enkele bestuursleden (meestal een vijftal). Elke verkoper krijgt een nummer, een leeg formulier en 27 labels. Op het formulier moet hij zijn persoonlijke gegevens invullen en ook een beschrijving van de artikels die hij wenst te verkopen en de bijhorende prijs. Elke verkoper mag maximaal 27 artikels verkopen, waaraan hij telkens een label moet bevestigen met vermelding van het verkopersnummer, het artikelnummer en de prijs. II.3.2. Het afgeven van de artikels 4 uur voor het starten van de beurs, moeten de verkopers hun artikels en hun lijst afgeven aan de verantwoordelijken van de Gezinsbond. De gezinsbond zorgt ervoor dat de artikels overzichtelijk uitgestald worden op tafels. Elk artikel moet voorzien zijn van een label. II.3.3. De verkoop Tijdens de tweedehandsbeurs zelf, wordt elk artikel dat verkocht wordt, aangeduid op de lijst met een markeerstift. Staat bijvoorbeeld op het label van het artikel verkoper 15, artikel 19, prijs 12 euro, dan zoekt men de lijst op van verkoper 15 en duidt men daar artikel 19 aan. Een belangrijke opmerking hier is het feit dat de verkopers dus niet zelf aanwezig zijn bij de verkoop. Alles wordt gedaan door de Gezinsbond. Bijgevolg kan er ook niet afgedongen worden op de prijs en kan die dus onder geen enkele voorwaarde veranderen. II.3.4. Teruggave van resterende artikels plus het geld Als de beurs gedaan is, wordt op elke lijst de prijs van alle aangeduide (en dus verkochte) artikels opgeteld. Dit is het bedrag dat de desbetreffende verkoper verdiend heeft. Daarvan moet hij echter tien procent afstaan aan de Gezinsbond als kostendekking. Als de verkoper een bestuurslid is, dan moet hij die tien procent niet afstaan. Hij krijgt dus het volledige bedrag van zijn verkochte artikels uitgekeerd. 4

Daarna krijgen de verkopers hun resterende artikels, samen met hun geld terug. Een kopie van de lijsten wordt bijgehouden door de Gezinsbond ter controle. Het mag duidelijk zijn dat deze manier van werken vrij traag is, vooral tijdens de verkoop, waarbij men elk artikel moet gaan opzoeken in de bundel van 70 à 80 lijsten. Bovendien kunnen bij de berekening van de totalen gemakkelijk fouten gemaakt worden. De bedoeling is dus dit allemaal te automatiseren via een database in Access. Wat zijn dan de specifieke vereisten van de database? Een formulier voor het ingeven van de artikels vóór het beginnen van de tweedehandsbeurs. Per artikel het nummer van de verkoper, het nummer van het artikel en de prijs. De beschrijving niet, want dat zou veel te veel tijd vergen. Een formulier voor het registreren van de verkochte artikels. Daarbij moet het totaal gemaakt worden per koper. Als iemand 5 artikels wenst te kopen, moet het formulier automatisch het totaal berekenen van die 5 artikels. Een rapport per verkoper, waarop zijn verkochte artikels staan, het totaal bedrag van die artikels en het bedrag dat de verkoper ontvangt. Een rapport waarop per verkoper aangegeven staat welke artikels niet verkocht zijn. Dit moet dienen als controle voor de verantwoordelijken van de Gezinsbond na de beurs. Een rapport met enkele totalen, zoals de totale omzet, de winst voor de Gezinsbond, enz II.4. Toegang tot de databank via internet De vierde en laatste doelstelling van deze scriptie is het ontwikkelen van een toegang tot de databank via het internet. Hiermee zouden de verkopers hun persoonlijke gegevens en hun artikels zelf kunnen ingeven en hoeft dit dus niet meer net vóór de tweedehandsbeurs gedaan te worden door de verantwoordelijken van de Gezinsbond. Het zal ongetwijfeld zo zijn dat niet alle verkopers een internetverbinding hebben. Voor die mensen blijft het oude systeem geldig, namelijk een lijst die met de hand ingevuld wordt en afgegeven wordt samen met de artikels. Die lijsten zullen dus nog door de mensen van de Bond in de databank ingegeven moeten worden via het formulier. 5

Een bijkomende mogelijkheid die de webpagina s moeten bieden, is het afdrukken van een overzicht van al de gegevens die de verkoper ingebracht heeft. Een vergelijkbaar document dus als de lijst die de verkopers vroeger met de pen invulden. De Gezinsbond zal eisen dat de verkoper dat overzicht afprint en mee afgeeft met zijn artikels. Op die manier houdt de Bond toch een vorm van controle. Natuurlijk moeten de webpagina s voldoende beveiligd zijn. Alleen de verkopers en de administrator mogen toegang krijgen. Bovendien mogen de verkopers enkel toegang hebben tot hun eigen artikels en persoonlijke gegevens. 6

III. Ontwikkeling Opmerking vooraf: alle bestanden (HTML pagina s, ASP pagina s en de database) die ontwikkeld werden staan op de CD-ROM (Appendix I). Ook de oude versie van de website staat er op ter illustratie. III.1 Lay-out van de website III.1.1. ASP of PHP Het belangrijkste probleem hier betreft het vinden van een oplossing voor de nadelen van het inline frame met behoud van de mogelijkheid om de lay-out makkelijk aan te passen. Een eerste oplossing zou kunnen zijn om de website op te maken met php (Hypertext Preprocessor) of asp (Active Server Pages) en de titelbalk en het menu op elke pagina in te laden via include bestanden. Als men dan iets wenst te veranderen aan de layout, hoeft men enkel de include bestanden aan te passen. Vraagt men daarna een pagina opnieuw op, wordt het aangepaste include bestand geladen en krijgt men de nieuwe lay-out te zien. Het nadeel van deze manier van werken is dat de webserver, waarop de site gehost wordt, dan één van die twee talen moet ondersteunen en dat is op dit moment niet het geval. Op dit moment wordt namelijk gebruikt van de gratis webruimte die men krijgt bij het afsluiten van een adsl-abonnement. Verhuizen van de website is bovendien niet direct een optie, toch niet op korte termijn. III.1.2. JavaScript 2 Het was dus uitkijken naar een andere oplossing en die heb ik gevonden in javascript. Daarbij is het namelijk mogelijk om te werken met externe scripts. Dat script kan dan via een speciale link ingebracht worden in het HTML document. <script language="javascript" type="text/javascript" src="titelbalk.js"> </script> Code-Fragment 1: JavaScript Include Bovenstaand voorbeeld toont hoe het bestand titelbalk.js in de HTML code geïntegreerd wordt. Het javascript zelf, is natuurlijk niet louter HTML code. Het is javascript-code waarbij echter enkel gebruik gemaakt wordt van de functie document.write(). Deze functie neemt de string tussen de haakjes en schrijft die naar de browser alsof het gewone statische HTML code is. 2 http://javascript.about.com/library/weekly/aa102901a.htm 7

document.write('<div class="border">' + '<a name="top"></a>' + '<p style="margin-top: 0; margin-bottom: 0; line-height:0.5"> </p>' + '' + '<Table class="test" align="center">' Code-Fragment 2: javascript document.write() functie Dit fragment is een onderdeeltje van het bestand titelbalk.js. Bovenaan staat de write-functie en elke nieuwe lijn begint met een plus-teken, gevolgd door een aanhalingsteken, het teken waarmee elke lijn ook eindigt. Helemaal op het eind van het bestand worden de haakjes gesloten en volgt een puntkomma als einde van de functie. Aangezien javascript door alle browsers ondersteund wordt en reeds bijzonder veel gebruikt wordt op het internet, heb ik ervoor gekozen deze methode toe te passen. Het nadeel zou kunnen zijn dat al die HTML code moet omgezet worden in javascript (dus met het plus-teken en de aanhalingstekens), maar er zijn websites op het internet te vinden die dat automatisch voor je kunnen doen. 3 Een tweede nadeel is dat sommige zoekmachines de externe.js files niet indexeren. Dat zou dus betekenen dat het menu, dat alle links bevat naar de andere webpagina s, niet gezien zou worden. Bijgevolg zouden de andere pagina s van de website ook niet gevonden worden. Echter, er bestaat een noscript tag, die de oplossing biedt voor dit probleem. Normaal wordt die tag gebruikt voor browsers die javascript niet ondersteunen. Zij krijgen dan, in plaats van het javascript, de tekst te zien die tussen de noscript tags staat. Men hoeft zich echter niet te beperken tot tekst. Men kan er ook andere HTML tags in nesten. Met andere woorden, men kan er de links inzetten naar de andere pagina s hetgeen in feite een zeer vereenvoudigd menu oplevert. 3 Bijvoorbeeld: http://www.moock.org/webdesign/javascript/client-side-include/ 8

<noscript> <p><a href="index.htm"><b>home</b></a> - <a href="geschiedenis.htm">geschiedenis</a> - <a href="doelstellingen.htm">doelstellingen</a> </p> </noscript> Code-Fragment 3: noscript tag Dit is een stukje van de noscript tag die ik heb ingebracht in elke pagina. Dit wordt dus niet getoond als de browser javascript ondersteunt. Als de browser javascript niet ondersteunt, of als het tijdelijk gedeactiveerd is, zoals mogelijk is in Opera, dan wordt het wel getoond. Ook zoekmachines gaan die tags doorlezen en dus ook de links die er in dit geval in staan, zodat ook de andere pagina s van de website gevonden worden. Hoe zit de website nu in mekaar? De titelbalk is ingebracht in titelbalk.js. Het linkermenu is nu deel1.js en het rechtermenu is deel2.js. Elke pagina van de website includeert die drie javascripts die dan samen de lay-out vormen van de website. III.1.3. Transparante figuren Tot slot heb ik ter verbetering van de lay-out ook nog enkele figuren transparant gemaakt. Drie figuren (turnen.gif, volley.gif en Scw-ahv1.gif) hadden immers een witte achtergrond, wat niet echt ideaal was op de geelachtige achtergrond van de website. Figuur 1: Niet transparante figuur Figuur 2: Transparante figuur Hierboven één van de figuren die transparant gemaakt zijn met de bijhorende achtergrond van de website. Het is duidelijk dat de rechtse afbeelding, die transparant is, veel beter overkomt. De drie hierboven vermelde figuren zijn vervangen door turnentrans.gif, volleytrans.gif en Scwtrans.gif. 9

III.1.4. Besluit Met dit besluit wil ik even terugkeren naar de doelstelling. Is aan alle voorwaarden voldaan? De eerste was dat de lay-out makkelijk aangepast moet kunnen worden. Dit is inderdaad het geval met de javascriptjes. Voor het nog wat simpeler te maken heb ik een niet-javascript versie van de lay-out opgenomen in het bestand layout.htm, met aanduidingen (via commentaartags) waar de drie verschillende scripts beginnen en eindigen. Via de website die ik hierboven vermeld heb, kan men de code dan makkelijk omzetten in javascript-code. De tweede voorwaarde was dat elke pagina een volwaardige pagina moest zijn, met titelbalk en menu. Dit is nu dus het geval en bijgevolg kan men zonder problemen een link leggen naar eender welke pagina. Ten slotte moesten de pagina s ook zonder problemen afgeprint kunnen worden. Dit is opnieuw het geval, maar men moet er nu wel nog altijd de titelbalk en het menu bijnemen. Dit is evenwel op te lossen met CSS en daarom verwijs ik hiervoor door naar het volgende hoofdstukje: III.2 HTML 4.01 standaard. 10

III.2 HTML 4.01 standaard Het tweede belangrijke aspect dat verbeterd moest worden aan de website is de aanpassing aan de HTML 4.01 standaard. Dit heeft als gevolg dat men er vrij zeker van kan zijn dat de website er hetzelfde uitziet in verschillende browsers. En het toevoegen van meta-tags zorgt ervoor dat de zoekmachines, die daar speciaal oog voor hebben, beter hun werk kunnen doen. III.2.1. Opgeven van een document type definition Het eerste element in de aanpassing naar de standaard is het opgeven van een DTD. Dit wil in feite zeggen dat je opgeeft welke versie van HTML je gebruikt hebt om de pagina te maken. In dit geval is dat dus HTML 4.01. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> Code-Fragment 4: Document Type Definition Bovenstaand fragment geeft weer hoe een DTD opgegeven wordt. Dit moet op elke pagina van de website gebeuren. Ik heb gekozen want er zijn meerdere versies voor Transitional. Dat wil zeggen dat je ook in de HTML code zelf nog opmaak-tags kan gebruiken. Er bestaat ook een Strict versie van HTML 4.01, waarbij de opmaak enkel mag gebeuren via CSS. III.2.2. De meta-tags Het tweede belangrijke element is het opgeven van meta-informatie via meta-tags. Deze tags worden gebruikt om informatie te verschaffen over de website. Metainformatie is vooral belangrijk voor zoekmachines, die hiervan gebruik maken voor het indexeren van webpagina s. Er zijn veel verschillende meta-tags, maar ik heb mij beperkt tot de drie belangrijkste, namelijk http-equiv, description en keywords, die op elke pagina opnieuw gedefinieerd worden. 11

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <meta name="description" content="website van de gezinsbond afdeling Asse-Bekkerzeel-Kobbegem"> <meta name="keywords" content="gezinsbond, Asse, Bekkerzeel, Kobbegem, gezin, bond, gezinnen, jonge, grote, BGJG"> Code-Fragment 5: Meta-tags van de pagina index.htm III.2.2.1 http-equiv Dit attribuut wordt gebruikt om bijzonderheden door te geven aan de browser waarmee de pagina wordt opgevraagd, bijvoorbeeld de datum tot wanneer de pagina geldig is, welke tekenset wordt gebruikt en wanneer de pagina vernieuwd moet worden. Deze meta-tag heb ik gebruikt in de website om aan te geven dat de tekenset iso- 8859-1 gebruikt wordt. Dit is een standaard die normaal door alle browsers ondersteund wordt. III.2.2.2. Description De tweede meta-tag waar ik gebruik van gemaakt heb is de tag met het attribuut description. Hier is het dus mogelijk om een beschrijving van de pagina op te geven. Deze tag is belangrijk voor de zoekmachines. III.2.2.3. Keywords De laatste meta-tag die gebruikt werd, is die met het attribuut keywords. Ook deze tag is belangrijk voor de zoekmachines en hierbij is het de bedoeling om enkele sleutelwoorden van de pagina op te geven. De sleutelwoorden zijn dikwijls woorden die ook voorkomen in de beschrijving of de titel van de website. In bovenstaand voorbeeld heb ik ook de oude naam van de Gezinsbond, namelijk Bond voor Grote en Jonge Gezinnen in stukjes gekapt en elk van die woorden als sleutelwoord opgegeven. III.2.3 Opmaak in CSS Cascading style sheets is de algemene term die gebruikt wordt om te refereren naar verschillende methoden voor het toepassen van stijl-elementen in HTML-pagina s. Met een stijl bedoel ik alle vormen van vormgeving, zoals lettertype, achtergrond, marges, enz. Het belangrijkste doel van CSS is het scheiden van de inhoud van een pagina van de opmaak. Dit maakt het onderhoud of het aanpassen van een website veel gemakkelijker. 12

Klassen en overerving Voor alle elementen kan men in de style sheet definiëren hoe ze eruit moeten zien. Alle alinea s krijgen bijvoorbeeld de opmaak die men in de style sheet koppelt aan het element P. Wil men echter dat één bepaalde alinea een ander letterkorps heeft, dan kan men daar een klasse voor maken en die toewijzen aan die alinea via het attribuut class. TD { font-family: verdana; font-size: 10pt; } TD.kolommen { vertical-align: top; width: 127px; border-style: none; } Code-Fragment 6: CSS: klassen en overerving In dit voorbeeld is voor het element TD een algemene stijl opgegeven. Er is echter ook een klasse aangemaakt voor dat element. Dit houdt in dat die klasse alle eigenschappen overneemt van de algemene TD-stijl en daar dan zelf nog enkele stijlelementen aan toevoegt. In een klasse kan men ook de algemene stijl aanpassen. Wil men bijvoorbeeld voor de klasse kolommen een font-size van 12pt in plaats van 10pt, dan moet men de font-size in die klasse opnieuw definiëren. Er is ook nog een andere manier van overerving, namelijk het principe van ouders en kinderen. Elementen die namelijk binnen andere elementen genest zijn, noemt men de kinderen. Neem bijvoorbeeld het body-element. Dit kan beschouwd worden als een ouder. De stijl die hiervoor gedefinieerd werd, zal overgeërfd worden door de elementen die in de body-tag staan, bijvoorbeeld het P-element. Het cascading model Meestal worden externe style sheets (linked style sheets) gebruikt, maar het is ook mogelijk om bij het element zelf een stijl op te geven, hetgeen men dan een inline style noemt. Een derde mogelijkheid is om in de head van een HTML pagina een style te definiëren die tussen style-tags geplaatst wordt. Dit laatste noemt men een embedded style. Deze drie manieren voor het definiëren van een style, vormen ook de basis van het cascading model. De style sheet op het laagste niveau krijgt voorrang op de style sheet van een hoger niveau. Inline styles vormen het laagste niveau, dan komen de embedded styles en de externe style sheets hebben het hoogste niveau. 13

Wat is nu het grote voordeel aan die style sheets? Wel, de opmaak hoeft in feite maar één keer gedefinieerd te worden en daarna kunnen al de pagina s van de website aan die CSS file gekoppeld worden. Wil men de opmaak van alle pagina s veranderen, dan verandert men de style sheets en de nieuwe opmaak is onmiddellijk van toepassing op de volledige website. Wenst men slechts één pagina te veranderen, dan kan men gebruik maken van het cascading model. <LINK href="stijl1.css" type="text/css" media="screen" REL="StyleSheet"> Code-Fragment 7: Linken van HTML-pagina aan externe style sheet Bovenstaand fragment geeft weer hoe een HTML-pagina aan een style sheet gekoppeld kan worden. Naast href en type zijn er nog 3 attributen belangrijk, namelijk rel, title en media. Rel en Title worden gebruikt om aan te geven of de style sheet persistent, preferred of alternate moet zijn. Persistent wil zeggen dat de style sheet altijd zal gebruikt worden. Daarvoor moet bij rel de waarde StyleSheet opgegeven worden en mag er geen titel zijn. De style sheets die ik gebruikt heb zijn allemaal persistent. De auteurs van webpagina s kunnen ook meerdere style sheets maken voor een pagina. De gebruikers kunnen dan zelf kiezen in welke stijl de pagina opgemaakt moet worden. Dat kan bijvoorbeeld interessant zijn voor slechtzienden die dan een stijl kunnen kiezen met grotere letters. Die style sheets moeten dan wel een titel hebben (met het title attribuut) en moeten bij Rel de waarde Alternate StyleSheet krijgen. De auteur van de webpagina kan één van de alternate style sheets wel preferred maken door in plaats van Alternate StyleSheet gewoon StyleSheet op te geven. Het laatste attribuut dat belangrijk is bij het linken naar een externe style sheet is media. 4 Hierbij kan men opgeven voor welke media-type de style sheet gebruikt moet worden. In bovenstaand voorbeeld is screen opgegeven. Dit betekent dat de style sheet gebruikt zal worden bij de opmaak van de pagina wanneer die op een computerscherm weergegeven wordt. Men kan ook print opgeven. In dat geval zal die style sheet gebruikt worden voor de opmaak van de pagina als die afgeprint wordt. Nog andere media-types zijn mogelijk. 4 http://www.w3.org/tr/rec-css2/media.html 14

Ik heb van deze mogelijkheid gebruik gemaakt. Elke pagina wordt gelinkt aan twee style sheets: één voor op het computerscherm en één voor af te printen. Dit vooral om ervoor te zorgen dat overtollige informatie, zoals het menu links en rechts, niet afgeprint wordt. 5 Bovendien is de titelbalk sterk vereenvoudigd, zodat de figuren die erin staan ook niet afgeprint worden (zie Appendix C). Style sheets afhankelijk van resolutie Bij deze scriptie heb ik er ook voor gekozen om twee verschillende style sheets te gebruiken afhankelijk van de resolutie van het scherm waarop de website wordt bekeken. <script language="javascript" type="text/javascript"> if (screen.width > 1024) document.write ('<LINK href="stijl1.css" type="text/css" media="screen" REL="StyleSheet">'); else document.write ('<LINK href="stijl2.css" type="text/css" media="screen" REL="StyleSheet">'); </script> Code-Fragment 8: Javascript: Style sheet afhankelijk van resolutie Dit is het JavaScript waarmee gekozen wordt welke style sheet gebruikt wordt. Als de resolutie van het scherm breder is dan 1024 pixels, wordt stijl1.css gekozen, anders stijl2.css. Het enige verschil tussen de twee style sheets is het feit dat in stijl1.css slechts 92% van de breedte van het scherm gebruikt wordt, om te vermijden dat de website een uitgerokken indruk geeft op schermen die een hoge resolutie hebben. III.2.4 Besluit We kunnen nu zeggen dat de website voldoet aan de HTML 4.01 standaard. Op elke pagina is een DTD opgegeven, werden meta-tags toegevoegd en bovendien is zoveel mogelijk opmaak gedaan in CSS. De website (de HTML-pagina s en de CSS pagina s) is volledig gevalideerd door de validators van het World Wide Web Consortium (W3c). Elke pagina werd valid verklaard. 5 http://web.uvic.ca/webcoor/resources/css.html 15

III.3 Onwikkeling database De derde doelstelling is het ontwikkelen van een database ter ondersteuning van de tweedehandsbeurs. Tot nu werd alles op papier gedaan en dat vergde te veel tijd. Het was dus de wens van de Gezinsbond om daarvoor een database te ontwerpen, zodanig dat alles geautomatiseerd kan verlopen. Het programma om de database te maken, was bij voorkeur Access, aangezien sommige bestuursleden daar vertrouwd mee zijn. Het mocht ook niet te veel prestaties vergen van de computer, aangezien de Gezinsbond slechts beschikt over twee laptops die sterk verouderd zijn (een pentium 1 en een pentium 2). III.3.2. Tabellen Het eerste en belangrijkste aspect bij het ontwerpen van een database is kiezen welke tabellen je maakt en welke relaties je ertussen legt. Bedoeling is uiteraard redundante informatie te vermijden, zodat alles wat in de database opgeslagen wordt, consistent is en blijft. Figuur 3: Tabellen en relaties De eerste tabel ligt voor de hand, namelijk de tabel van de verkopers met als primaire sleutel hun verkopersnummer. Andere velden zijn naam, voornaam, adresgegevens en het telefoonnummer en e-mail adres. Ook wordt opgegeven of de verkoper een bestuurslid is of niet. Dit voornamelijk om achteraf te bepalen of hij de 10% commissie moet betalen. Ten slotte krijgt elke verkoper een salt -waarde en hash - waarde. Die dienen om via internet toegang te krijgen tot de databank en zullen in dat deel, verderop in deze scriptie, besproken worden. 16

De tweede tabel is dan de tabel met de artikels die de verkopers wensen te verkopen. Deze tabel heeft vier velden, namelijk het verkopersnummer, het artikelnummer, de beschrijving en de prijs. De primaire sleutel is drievoudig, namelijk de eerste drie vermelde velden. Normaal is een tweevoudige sleutel voldoende, want elk artikel wordt uniek gekenmerkt door de combinatie van het verkopersnummer en het artikelnummer. De reden waarom ik de prijs ook in de primaire sleutel opneem vertel ik in het volgende deeltje (III.3.3. Relaties). De derde tabel is de tabel van de kopers. Deze tabel heeft slechts één veld, namelijk het kopersnummer en dit veld is dan ook de primaire sleutel. De vierde en laatste tabel is de tabel van de verkochte artikels. Deze tabel heeft vier velden, namelijk het kopersnummer, het verkopersnummer, artikelnummer en de prijs. Deze tabel heeft dezelfde drievoudige primaire sleutel als de tabel artikels. III.3.3. Relaties Heel belangrijk is het leggen van de correcte relaties tussen de verschillende tabellen. In dit database-ontwerp zijn er drie relaties. De eerste relatie is de relatie tussen de tabel verkopers en de tabel artikels. Dit is een one-to-many relatie, wat betekent dat elke verkoper meerdere artikels kan verkopen. De vreemde sleutel in de tabel artikels is het veld verkopersnummer. De tweede relatie is wat gecompliceerder. Dit is namelijk een 1-op-1 relatie. Immers, elk artikel mag maar éénmaal verkocht worden en elk artikel dat verkocht wordt, moet en mag slechts éénmaal voorkomen in de tabel artikels. Dit is ook de reden waarom ze dezelfde primaire sleutel hebben. De primaire sleutel van de ene tabel is de vreemde sleutel van de andere tabel. De derde relatie komt sterk overeen met de eerste relatie, namelijk een one-to-many relatie, waarbij de link tussen de twee tabellen het kopersnummer is. Elke koper kan dus meerdere artikels kopen. III.3.4. Drievoudige in plaats van tweevoudige primaire sleutel De tabellen artikels en verkochte artikels hebben een drievoudige primaire sleutel, daar waar een tweevoudige, bestaande uit het verkopersnummer en het artikelnummer voldoende is. De prijs werd echter mee opgenomen in de primaire sleutel om een goede controle te kunnen hebben tijdens de verkoop van de artikels. Stel bijvoorbeeld dat we gebruik maken van een tweevoudige sleutel en we willen artikel 10 van verkoper 1 verkopen (dus inbrengen in de tabel van verkochte artikels). Per ongeluk geven we echter artikel 11 in. Dit is normaal een artikel dat bestaat (elke verkoper heeft 27 artikels) en dus ontstaat er een fout. 17

Als we nu de prijs toevoegen aan de primaire sleutel, moeten we in de tabel verkochte artikels ook de prijs opgeven. Stel artikel 10 van verkoper 1 kost 5 euro en artikel 11 van verkoper 1 kost 12 euro. We maken opnieuw dezelfde fout, namelijk we geven voor het artikelnummer 11 in, in plaats van 10. We moeten nu de prijs ook opgeven, dus krijgen we de combinatie: verkoper 1, artikel 11, prijs 5 euro. Deze combinatie bestaat niet in de tabel artikels en zal dus ook niet aanvaard worden in de tabel verkochte artikels. Mocht artikel 11 nu ook 5 euro kosten, dan leidt de verkeerde ingave tot een combinatie die toch correct is en ontstaat er alsnog een fout. Echter, op deze manier zullen toch de meeste fouten vermeden kunnen worden. III.3.5. Formulieren Twee formulieren zijn nodig in deze database. Het eerste formulier (zie Appendix D) dient voor het ingeven van alle artikels vóór het starten van de tweedehandsbeurs, zodanig dat de tabellen verkopers en artikels volledig ingevuld kunnen worden. Dit formulier heeft als naam ingave verkopers en hun artikels. Het bestaat enerzijds uit de velden van de tabel verkopers, zoals verkopersnummer, adresgegevens, enz. en anderzijds uit een subformulier waarin de artikels van die verkoper ingevuld kunnen worden. De beschrijving wordt niet ingevuld, want dat zou te veel tijd vergen. Ze wordt enkel ingevuld als de verkoper via internet zijn gegevens doorstuurt. Het subformulier heeft als naam artikels subform en is gekoppeld aan het hoofdformulier via het verkopersnummer. Elk artikel in het subformulier krijgt dus automatisch het verkopersnummer van de verkoper die in het hoofdformulier ingevuld werd. Van de prijzen die ingevuld worden in het subformulier, wordt ook een totaal gemaakt. Dit kan dienen als controle. Komt het totaal overeen met het totaal van de artikels op de ingevulde lijst, mag men er van uitgaan dat alles correct is. Het tweede formulier (zie Appendix E) is het formulier dat gebruikt moet worden tijdens de verkoop. Het heeft dezelfde opbouw als het eerste en heeft als naam ingave verkopen. Het bestaat uit het veld van de tabel kopers, namelijk het kopersnummer, en een subformulier. Het subformulier, dat als naam verkochte artikels subform heeft, bevat de velden uit de tabel verkochte artikels en is gekoppeld aan de tabel kopers via het veld nummer koper. Elk artikel in het subformulier krijgt dus het kopersnummer dat bovenaan in het hoofdformulier ingevuld werd. Per koper wordt ook het totaal gemaakt van de prijzen van de artikels die hij wenst te kopen. 18

III.3.6. Query s en rapporten Als de tweedehandsbeurs gedaan is, moet het natuurlijk mogelijk zijn om op een overzichtelijke manier de resultaten te krijgen. Wie heeft welke artikels verkocht, welke artikels werden niet verkocht en wat is de totale omzet en winst voor de Gezinsbond? Allemaal vragen waar de rapporten een antwoord op moeten bieden. Het eerste rapport (zie Appendix F) is het rapport verkochte artikels per verkoper. Hierin komen de gegevens van de verkoper, de artikels die hij verkocht heeft, voor welk totaal bedrag, en wat de verkoper ontvangt. Dit laatste is 90% van het totaal bedrag als de verkoper een gewone verkoper is, maar is 100% als de verkoper een bestuurslid is. Dit rapport is gebaseerd op de volgende Query: SELECT [Verkochte artikels].[verkoper], [Verkopers].[Naam], [Verkopers].[Voornaam], [Verkopers].[Straat], [Verkopers].[Nummer], [Verkopers].[Postnr], [Verkopers].[Gemeente], [Verkopers].[Telefoonnummer], [Verkopers].[Bestuurslid], [Verkochte artikels].[artikel], [Verkochte artikels].[prijs], [Artikels].[Beschrijving] FROM Verkopers INNER JOIN (Artikels INNER JOIN [Verkochte artikels] ON ([Artikels].[Nummer verkoper]=[verkochte artikels].[verkoper]) AND ([Artikels].[Nummer artikel]=[verkochte artikels].[artikel]) AND ([Artikels].[Prijs]=[Verkochte artikels].[prijs])) ON [Verkopers].[Nummer verkoper]=[artikels].[nummer verkoper]; Code-Fragment 9: Query "verkochte artikels per verkoper" In de Select-clause geeft men de velden op die men in het rapport wil opnemen. In de From-clause moet opgegeven worden uit welke tabellen de gegevens komen. Met een join worden tabellen samengevoegd. In dit geval is het tweemaal een inner join, wat wil zeggen dat records uit één van beide tabellen die geen corresponderend record hebben in de andere tabel niet getoond worden in de recordset. Hier worden dus de tabellen verkopers en artikels samengevoegd voor elk verkopersnummer dat in de twee tabellen voorkomt. Daarnaast worden ook de tabellen artikels en verkochte artikels samengevoegd zodat enkel de artikels die in de twee tabellen voorkomen in de query terechtkomen. 19

Het tweede rapport (zie Appendix G) is het rapport waarop de niet verkochte artikels weergegeven wordt per verkoper. Dit is vooral nuttig voor de Gezinsbond zelf, zodat zij kunnen controleren of de artikels die niet verkocht werden, wel degelijk nog aanwezig zijn. Het rapport is gebaseerd op de volgende query: SELECT [Artikels].[Nummer verkoper], [Artikels].[Nummer artikel] FROM Verkopers INNER JOIN (Artikels LEFT JOIN [Verkochte artikels] ON ([Artikels].[Nummer verkoper]=[verkochte artikels].[verkoper]) AND ([Artikels].[Nummer artikel]=[verkochte artikels].[artikel]) AND ([Artikels].[Prijs]=[Verkochte artikels].[prijs])) ON [Verkopers].[Nummer verkoper]=[artikels].[nummer verkoper] WHERE ((([Verkochte artikels].[verkoper]) Is Null)); Code-Fragment 10: Query "niet verkochte artikels per verkoper" Hier worden weer de twee tabellen verkopers en artikels samengevoegd via een inner join. Ook de twee tabellen artikels en verkochte artikels worden samengevoegd, maar dan wel via een left join. Dat wil zeggen dat alle records uit de eerste tabel opgenomen worden plus de records uit de tweede tabel waarvoor een corresponderende record in de eerste tabel bestaat. Heel belangrijk is de Where-clause die een extra voorwaarde oplegt. In dit geval wordt opgegeven dat in de tabel van de verkochte artikels niets mag ingevuld zijn in het veld verkoper. Dit veld mag ook een ander veld zijn van die tabel. Dus, alle artikels uit de tabel artikels worden opgenomen, behalve die die ook in de tabel verkochte artikels staan. Het derde rapport (zie Appendix H) is het rapport met de totalen. Hier willen we te weten komen hoeveel artikels elke verkoper verkocht heeft en voor welk totaal bedrag. Belangrijk is ook te weten of de verkoper een bestuurslid is of niet, aangezien de bestuursleden geen 10% commissie moeten afstaan. De query waarop dit rapport gebaseerd is, is de volgende: SELECT [Verkopers].[Nummer verkoper], Count([Verkochte artikels].[artikel]) AS CountOfArtikel, Sum([Verkochte artikels].[prijs]) AS SumOfPrijs, [Verkopers].[Bestuurslid] FROM Verkopers INNER JOIN [Verkochte artikels] ON [Verkopers].[Nummer verkoper]=[verkochte artikels].[verkoper] GROUP BY [Verkopers].[Nummer verkoper], [Verkopers].[Bestuurslid]; Code-Fragment 11: Query "verkoopstotalen" 20

In de Select-clause zien we dat de verkochte artikels geteld worden (count) en dat van de prijs de som gemaakt wordt (sum). In de From-clause zien we terug een inner join, waarbij de tabellen verkopers en verkochte artikels samengevoegd worden. Enkel de verkopers die in de twee tabellen voorkomen, worden in de query opgenomen. Ten slotte is er hier ook een Group-By-clause om de records te groeperen. Er wordt gegroepeerd per verkoper en per bestuurslid. Alle records met gemeenschappelijke waarden in elke Group-By kolom vormen een groep. Aangezien een verkoper ofwel een bestuurslid is ofwel niet (hij kan dus niet beiden tegelijk zijn), geeft dit hetzelfde resultaat als zou er enkel per verkoper gegroepeerd worden. III.3.7. Database replicatie en synchronisatie Een zeer handige feature in Access is de replicatie. Dat houdt in dat je van je database een exacte kopie kan maken. Je kan dan in de twee databases tegelijk gegevens invullen. Achteraf kunnen de databases gesynchroniseerd worden, zodat de gegevens met elkaar in overeenstemming gebracht worden. Op dat moment hebben we opnieuw twee identieke databases. In praktijk betekent dat dus dat vóór het begin van de beurs twee computers gebruikt kunnen worden voor het ingeven van de artikels uit de lijsten. Hetzelfde geldt tijdens de verkoop zelf, zodat er met twee kassa s gewerkt kan worden en de rijen aan de kassa niet te lang worden. III.3.8. Besluit Deze database zal ongetwijfeld de tweedehandsbeurs een heel stuk vlotter doen verlopen. Het zal sneller gaan aan de kassa en er zullen minder fouten gemaakt worden bij het maken van totalen. Achteraf krijgen de verkopers een mooi overzicht van wat ze verkocht hebben en voor welk bedrag. De Gezinsbond kan snel controleren of alle niet verkochte artikels nog aanwezig zijn en krijgt op een overzichtelijke manier de resultaten van de beurs via het rapport verkoopstotalen. 21

III.4 Internet toegang naar databank via ASP Met de ontwikkeling van de databank zijn er veel problemen opgelost, maar is er ook een probleem bijgekomen. Alle gegevens moeten namelijk voor de start van de tweedehandsbeurs in de databank ingevoerd worden. 70 á 80 verkopers met telkens tot 27 artikels geeft dat er een goede 2000 artikels ingegeven moeten worden.via replicatie kan dat werk gespreid worden, maar toch, het zou nog altijd een groot en intensief werk zijn. Het zou dus interessant zijn, mochten de verkopers zelf via internet hun gegevens in de databank inbrengen. Zo n toegang tot de databank kan ontwikkeld worden in ASP, een scripting-taal die op de server uitgevoerd wordt. III.4.1. Beveiliging Een heel belangrijk aspect bij de internettoegang tot een databank is de beveiliging. Enkel de verkopers en de beheerder mogen toegang krijgen en bovendien mogen de verkopers enkel toegang krijgen tot hun eigen gegevens. Dit kan allemaal opgelost worden met een paswoord-systeem. De verkopers krijgen een paswoord en moeten dat dan samen met hun gebruikersnaam- of nummer ingeven om in te loggen. Dan moet op de server op één of andere manier nagekeken worden of de combinatie correct is, en indien dat zo is, wordt de toegang verleend. One-way hash functie 6 Het gemakkelijkste zou zijn om de paswoorden gewoon op te slaan in de database. Echter, dan kunnen de paswoorden gezien worden door de beheerders van de database, dus dat zou toch de privacy in enige mate schenden. Men kan de paswoorden ook coderen met een algoritme of encriptie-standaard, maar dan nog is het mogelijk om die code om te zetten in de echte paswoorden. Ook dat is geen ideale manier van werken. Het beste zou zijn mochten de paswoorden geëncrypteerd worden zodanig dat die code niet terug omgerekend kan worden naar het originele paswoord. Zo n encryptiealgoritme bestaat en wordt een one-way hash functie genoemd. 6 http://local.15seconds.com/issue/000217.htm 22

Salt-waarde Een database die beveiligd is met hash-geëncrypteerde paswoorden is niet helemaal veilig, Een hacker zou een lijst kunnen maken van de bijvoorbeeld één miljoen meest gebruikte paswoorden en dan uit elk van hen een hash berekenen. Als hij de database bemachtigt, kan hij de hash-waarden in de database vergelijken met zijn eigen lijst en kijken welke dezelfde zijn. Dit is wat men noemt een dictionary attack. Om die praktijk wat moeilijker te maken, wordt een salt-waarde toegevoegd aan het paswoord, vooraleer het omgezet wordt in een hash-waarde. Een salt-waarde is een willekeurige string en wordt ook opgeslagen in de database. Als men nu een dictionary attack wil doen, moet men de hash-waarden berekenen voor alle mogelijke salt-waarden. Dit is bijna onmogelijk. Het is wel een feit dat salt geen oplossing biedt voor een aanval op een individueel paswoord. Het blijft dus belangrijk dat de paswoorden moeilijk te raden zijn. Praktisch Hoe gaan we nu te werk? Eerst en vooral moet de database volledig leeg zijn. Vervolgens wordt hij op de server gezet. Daarna roepen we de file firstpwd.asp aan, die een eerste record creëert in de tabel verkopers met als verkopersnummer 100. Dit is de beheerder. Tegelijk wordt een willekeurig paswoord gemaakt, bestaande uit tien tekens, dat op het scherm verschijnt. Er wordt ook een salt-value gemaakt en opgeslagen in de database. Het paswoord en de salt-waarde worden dan samengevoegd waaruit een hash-waarde berekend wordt die ook opgeslagen wordt in de database. 7 Daarna kan de beheerder inloggen via login.htm 7 De hash-functie is integraal overgenomen van http://www.aspfree.com/asp/hash1way.asp 23

III.4.2. De beheerder Figuur 4: beheerder diagram Dit is de weg die de beheerder kan afleggen. Hij vult zijn nummer en paswoord in in het formulier op login.htm. Die gegevens worden doorgestuurd naar login.asp. Als het verkopersnummer 100 is en het paswoord correct is, wordt een session object aangemaakt met als waarde het verkopersnummer en gebeurt er een redirect naar adminstart.asp. Als het paswoord fout is, komt er een foutmelding. De pagina s adminstart.asp, createallpwd.asp en createonepwd.aso zijn enkel bedoeld voor gebruik door de beheerder. Daarop wordt dan ook elke keer gecontroleerd of de beheerder wel degelijk ingelogd is. Het session object moet dus gelijk zijn aan 100. 24

Dim vnr vnr = session("login") If vnr<>100 Then Response.Redirect "fout.htm" End if Code-Fragment 12: Redirect voor als de beheerder niet ingelogd heeft Als het session object verschillend is van 100, gebeurt er een redirect naar fout.htm. Als het session object wel 100 is, verschijnt de pagina, waarin zich drie formulieren bevinden. 1. Met het eerste formulier kan de beheerder met een simpele druk op de knop 99 verkopers creëren in de tabel verkopers van de database ( createallpwd.asp ). De nummers van de verkopers worden samen met het paswoord op het scherm getoond. Deze lijst kan makkelijk geïmporteerd worden in Excel. Als iemand zich inschrijft als verkoper, krijgt hij dus een verkopersnummer samen met het paswoord uit deze lijst. Het duurt wel even voor de lijst op het scherm verschijnt, want de server moet veel berekeningen maken: een random paswoord, een random salt-waarde en de hash-waarde. En dit 99 keer. 2. Via het tweede formulier kan de beheerder een nieuw paswoord maken voor een specifieke verkoper, wanneer die zijn paswoord vergeten is ( createonepwd.asp ). Hier moet enkel het verkopersnummer opgegeven worden. Het is niet mogelijk om via dit formulier een nieuw paswoord te maken voor de beheerder. 3. Met het derde formulier kan de beheerder zijn paswoord veranderen. Hij moet eerst zijn huidig paswoord ingeven, dan zijn nieuw paswoord en dan nogmaal zijn nieuw paswoord. De gegevens van dit formulier worden doorgestuurd naar changepwd.asp. Deze pagina is ook bereikbaar voor de gewone gebruikers, dit evenwel via een ander formulier. Het session object (om te controleren of de gebruiker ingelogd is) moet hier dus niet gelijk zijn aan 100, maar moet tussen 1 en 100 liggen (1 en 100 inbegrepen). 25