Hogeschool Gent
Lama Computers & Communication
Departement BEST AALST
Marc Lambrecht
Keizersplein 19
Hoeksken 20
9300 AALST
9280 WIEZE
Ontwerp en analyse van een site in php Scriptie ingediend tot het verkrijgen van de titel van "Gegradueerde in de Toegepaste Informatica"
Stagementor: Mr. Marc Lambrecht, zaakvoerder stagebedrijf Stagebegeleider: Mr. Roland Maerivoet, lector Scriptiecoördinator: Mr. Wilfried Van de Velde, lector Academiejaar 2001-2002
Davy Van den Steen Dries 48 9280 DENDERBELLE
WOORD VOORAF
Mijn stageopdracht bestond erin een website te ontwikkelen met php. Toen het project me werd voorgesteld wist ik nog niet veel van websites en php, dus leek het me wel een hele uitdaging om de opdracht tot een goed einde te brengen. Dankzij enkele sites waar alles goed uitgelegd wordt, heb ik heel wat kennis kunnen verwerven en heb ik op enkele maanden tijd de opdracht kunnen uitwerken. Voor de uitwerking van de opdracht werd ik helemaal vrijgelaten. Hierdoor kreeg ik de kans om zelf een grote inbreng te hebben in het project en kon ik persoonlijke ideeën uitwerken. Graag wil ik mr. Marc Lambrecht bedanken om mij deze stageplaats aan te bieden, en zo mij de kans gegeven te hebben om dit mooie project te kunnen uitvoeren. Verder wil ik mijn stagebegeleider mr. Roland Maerivoet bedanken voor de bezoeken die hij me bracht op mijn stageplaats en de goede raadgevingen. Ook wil ik mr. Wilfried Van de Velde danken voor de opvolging en begeleiding bij het opstellen van deze scriptie.
Davy Van den Steen
INHOUDSOPGAVE
INLEIDING ........................................................................................6 ACHTSTAPPENPLAN......................................................................7 0
Situatie ..............................................................................7
1
Doel...................................................................................7
2
Relevante documenten .....................................................8
3
Werkzaamheden en eisen ................................................8
3.1
Werkzaamheden in een logische tijdsvolgorde .................8
3.1.1
Werkzaamheden die betrekking hebben op het verzamelen van informatie ..... 8
3.1.2
Werkzaamheden met betrekking op het verwerken van de resultaten ............ 8
3.1.3
Werkzaamheden die betrekking hebben op de implementatie ....................... 8
3.2
Eisen waaraan het projectresultaat moet voldoen............9
4
Kwaliteitsbewaking van de projectuitvoering.....................9
5
Tijd ....................................................................................9
6
Geld...................................................................................9
7
Organisatie......................................................................10
8
Informatie ........................................................................10
CONCEPTUEEL LASTENBOEK....................................................11 1
Navigatiediagram van de website ...................................11
2
Boomstructuur van de website ........................................12
3
Omschrijving van de onderdelen.....................................13
3.1
Includes .........................................................................13
3.1.1
HTMLfuncties....................................................................................... 13
3.1.2
Bestandsfuncties.................................................................................. 13
3.1.3
Databasefuncties ................................................................................. 14
3.1.4
Inlogfuncties ....................................................................................... 14
3.2
Klassen...........................................................................15
3.2.1
Klassendiagram Bezoeker en Lama ......................................................... 15
3.3
Module: login..................................................................16
3.3.1
Beschrijving ........................................................................................ 16
3.3.2
Implementatie, inlogmenu..................................................................... 16
3.3.3
Implementatie, inloggen ....................................................................... 17
3.3.4
Implementatie, uitloggen ...................................................................... 17
3.3.5
Implementatie, inlogstatus .................................................................... 17
3.4
Module: beginpagina ......................................................18
3.4.1
Beschrijving ........................................................................................ 18
3.4.2
Implementatie ..................................................................................... 19
3.5
Module: prijslijst pc & ham .............................................20
3.5.1
Beschrijving ........................................................................................ 20
3.5.2
Implementatie ..................................................................................... 22
3.6
Module: prijslijst pc & ham, offerte artikel .....................23
3.6.1
Beschrijving ........................................................................................ 23
3.6.2
Implementatie ..................................................................................... 24
3.7
Module: prijslijst pc & ham, offerte artikelgroep ............25
3.7.1
Beschrijving ........................................................................................ 25
3.7.2
Implementatie ..................................................................................... 26
3.8
Module: promoties..........................................................27
3.8.1
Beschrijving ........................................................................................ 27
3.8.2
Implementatie ..................................................................................... 28
3.9
Module: locatie ...............................................................29
3.9.1
Beschrijving ........................................................................................ 29
3.9.2
Implementatie ..................................................................................... 30
3.10 Module: links ..................................................................31 3.10.1 Beschrijving ........................................................................................ 31 3.10.2 Implementatie ..................................................................................... 32
3.11 Module: registraties, aanmelden ....................................33 3.11.1 Beschrijving ........................................................................................ 33 3.11.2 Implementatie ..................................................................................... 34
3.12 Module: registraties, instellingen ...................................35 3.12.1 Beschrijving ........................................................................................ 35 3.12.2 Implementatie ..................................................................................... 36
3.13 Module: beheer, tekst .....................................................37 3.13.1 Beschrijving ........................................................................................ 37 3.13.2 Implementatie ..................................................................................... 38
3.14 Module: beheer, registraties...........................................39 3.14.1 Beschrijving ........................................................................................ 39 3.14.2 Implementatie ..................................................................................... 39
3.15 Module: beheer, links .....................................................40 3.15.1 Beschrijving ........................................................................................ 40 3.15.2 Implementatie ..................................................................................... 41
3.16 Module: beheer, promoties .............................................43 3.16.1 Beschrijving ........................................................................................ 43 3.16.2 Implementatie ..................................................................................... 44
3.17 Module: beheer, nieuwe artikels.....................................45 3.17.1 Beschrijving ........................................................................................ 45 3.17.2 Implementatie ..................................................................................... 46
TECHNISCH LASTENBOEK ..........................................................47 1
In welke taal moet de website geschreven zijn? .............47
1.1
Wat is php? ....................................................................47
1.2
Enkele eigenschappen van php.......................................48
1.2.1
Eisen.................................................................................................. 48
1.2.2
Vergelijking met andere programmeertalen ............................................. 48
1.2.3
Snelheid ............................................................................................. 48
2
Welke software is nodig? ................................................49
2.1
Developing .....................................................................49
2.1.1
Apache http Server .............................................................................. 49
2.1.2
php Parser .......................................................................................... 49
2.1.3
MySQL client/server SQL database server ................................................ 49
2.2
Hosting...........................................................................50
3
Uittekenen van de database structuur.............................51
3.1
Tabel Artikel ...................................................................51
3.2
Tabel Artikelgroep ..........................................................52
3.3
Tabel Bezoeker ...............................................................52
BESLUIT .........................................................................................53 BIJLAGEN ......................................................................................54 LITERATUUROPGAVE ..................................................................56
6
INLEIDING
Lama Computers & Communication is de plaats waar ik mijn stage gedaan heb. Dit is een winkel, gespecialiseerd in computers en telecommunicatieapparaten, gelegen in de gemeente Wieze. De juridische vorm van het bedrijf is een eenmanszaak, met als zaakvoerder Marc Lambrecht. Zoals voor elk bedrijf is het gebruik van een website een manier om het bedrijf te profileren naar de buitenwereld toe. Belangrijk is dan ook dat de site volledige en steeds geüpdate informatie verschaft en zo goed mogelijk aangepast is aan de wensen van de bezoekers. Het probleem met de website van Lama Computers & Communication was dat deze bestond uit gewone html-pagina's. Hierdoor waren de pagina's niet flexibel, verliepen aanpassingen moeizaam en was er helemaal geen interactie mogelijk met de bezoeker. Vrij vlug werd besloten om een nieuwe actievere site te ontwerpen. Prijslijsten moesten opgesteld worden door uit een database te lezen en bezoekers zouden artikelen kunnen kiezen waar, op basis van hun gewenste aantal, een offerte gegenereerd zou worden. Een inlogsysteem moest ervoor zorgen dat indien een bezoeker met beheerdersmogelijkheden inlogt, deze makkelijk de website online zou kunnen bewerken. Verder werden klassen en functies geïmplementeerd zodat het moet volstaan om gegevens, op de verschillende pagina's, te veranderen door deze eenmaal te wijzigen op een centrale plaats. Marc stelde voor om dit te bewerkstellingen door de site in php te schrijven, hij had vernomen dat dit een relatief nieuwe taal was die sterk groeide in populariteit. Na wat opzoekingswerk bleek inderdaad dat php veel mogelijkheden bevat en dus een uitstekende keuze was om de site ermee te ontwikkelen. Deze scriptie geeft weer hoe een site in php ontworpen kan worden. De site werd opgedeeld in afhankelijke modules waarbij voor elke module de functie en implementatie beschreven wordt.
7
ACHTSTAPPENPLAN
0
Situatie
De huidige website van Lama Computers & Communication bestaat uit een rechter- en linkerframe waarbij het linkerframe als navigatiemenu dient. Het linkerframe bevat het logo en links naar de 5 rubrieken: prijslijst PC, prijslijst HAM, promoties, locatie en links, die weergegeven worden in het rechterframe. In het geval van de prijslijstpagina's wordt het rechterframe gesplitst in een boven- en onderframe. Het onderframe geeft de prijslijst weer, terwijl het bovenframe gebruikt kan worden als shortcut-menu naar de verschillende artikelgroepen. De website bevat geen animaties of applicaties die plugins vereisen, dit ten behoeve van snelheid en compatibiliteit.
Wel wordt javascript gebruikt om een midi-bestandje af te spelen en de muisaanwijzer te
veranderen. De site heeft geen scriptgegenereerde pagina's. Onderhoud van de website is daardoor arbeidsintensief en moeilijk. De prijslijstpagina's worden vanuit het administratieve programma als HTML document weggeschreven naar de harde schijf waarna ze geupload kunnen worden.
1
Doel
Belangrijkste doelstellingen zijn bezoekers te informeren over de beschikbare artikelen en de laatste prijzen. Daarom moeten we pagina's die informatie bevatten die up-to-date moet zijn, laten genereren door een serverside scriptingtaal die afhankelijk van de input van bezoekers een HTML document voortbrengt. Zo moet er de mogelijkheid zijn om prijslijsten te genereren door rechtstreeks uit de database te lezen of om offertes op te stellen voor artikelen gekozen door de bezoeker. Een ander doel is een zekere vorm van klantensupport te bieden door de artikels te voorzien van hyperlinks naar de homepage van desbetreffend artikel, waar de bezoeker bijkomende informatie kan lezen of downloaden. Een andere belangrijke doelstelling is dat de site makkelijk aanpasbaar wordt. Verder moet de structuur en vormgeving eenvoudig en overzichtelijk blijven en de bezoekers een gebruiksvriendelijk navigatiesysteem aanbieden.
8
2
Relevante documenten
De huidige website en de tabellen artikel en artikelgroep als .dbf bestanden in Visual FoxPro.
3
Werkzaamheden en eisen
3.1
Werkzaamheden in een logische tijdsvolgorde
3.1.1
Werkzaamheden die betrekking hebben op het verzamelen van informatie
•
Opzoeking webserver
•
Opzoeking client/server sql databse server
•
Opzoeking php parser
•
Opzoeking basis php: variabelen en program-flow
•
Opzoeking inlogsysteem in php
•
Opzoeking database benaderen vanuit php
•
Opzoeking tekstbestanden en php
•
Opzoeking klassen
3.1.2
Werkzaamheden die betrekking hebben op het verwerken van de resultaten
•
Installeren + configureren webserver: Apache
•
Installeren + configureren client/server sql database server: MySQL
•
Installeren + configureren php parser
•
Analyseren van de website, opstellen van het conceptueel en technisch lastenboek
•
Aanmaken MySQL tabellen (bezoeker, artikel, artikelgroep)
•
Opvullen MySQL tabellen aan de hand van bestaande Visual FoxPro tabellen
•
Inlogsysteem maken met sessions ipv cookies
3.1.3
Werkzaamheden die betrekking hebben op de implementatie.
•
Aanmaken van de gemeenschappelijke htmlfuncties
•
Aanmaken van functies die betrekking hebben op bestanden
•
Aanmaken van functies die betrekking hebben op database
•
Aanmaken van de klassen
•
Aanmaken van de module beginpagina
•
Aanmaken van de module locatie
•
Aanmaken van de module links
•
Aanmaken van de module promoties
•
Aanmaken van de module prijslijst PC
•
Aanmaken van de module prijslijst PC, offerte artikel
•
Aanmaken van de module prijslijst PC, offerte artikelgroep
•
Aanmaken van de module prijslijst HAM
9
•
Aanmaken van de module prijslijst HAM, offerte artikel
•
Aanmaken van de module prijslijst HAM, offerte artikelgroep
•
Aanmaken van een inlogsysteem
•
Aanmaken van de module registraties, aanmelden
•
Aanmaken van de module registraties, instellingen
•
Aanmaken van de module beheer, tekst
•
Aanmaken van de module beheer, links
•
Aanmaken van de module beheer, promoties
•
Aanmaken van de module beheer, nieuwe artikels
•
Aanmaken van de module registraties
3.2
4
Eisen waaraan het projectresultaat moet voldoen
•
Serverside gegenereerde pagina's voor prijslijstpagina's;
•
Makkelijk aanpasbaar zijn;
•
Structuur en vormgeving moeten eenvoudig en overzichtelijk blijven;
•
Artikelen moeten kunnen verwijzen naar andere sites.
Kwaliteitsbewaking van de projectuitvoering
Mr. Marc Lambrecht, stagementor, zal elke afgewerkte module controleren en evalueren.
5
Tijd
Startdatum: 04 februari 2002 Einddatum: 17 mei 2002 Werkzaamheden uit stap 1: de eerste drie weken dienen vooral om informatie te verzamelen over php en de mogelijkheden met php. Ook worden in deze periode de nodige applicaties geïnstalleerd om applicaties in php te maken en te testen. Werkzaamheden uit stap 2: voor de analysefase worden een 6-tal weken voorzien, zodat deze fase afgerond zal zijn tegen begin april. Werkzaamheden uit stap 3: voor de programmatie en het testen worden 5 weken voorzien, met een marge van 1 week.
6
Geld
Er wordt geen extra budget voorzien voor het project. Alle benodigde software is gratis te downloaden. De huidige host biedt nog geen PHP/MySQL support, indien nodig wordt de website gehost op een externe hostaanbieder.
10
7
Organisatie
niet van toepassing
8
Informatie
niet van toepassing
11
CONCEPTUEEL LASTENBOEK
1
Navigatiediagram van de website
12
2
Boomstructuur van de website
13
3
Omschrijving van de onderdelen
3.1
Includes
In de map "includes" worden alle gemeenschappelijke functies bewaard. In het bestand "includes.inc.php" sommen we alle includes-bestanden op, zodat het volstaat om bovenaan elke pagina "require("./includes/includes.inc.php")" te zetten. Hierdoor kan elke functie door iedere pagina aangeroepen worden.
3.1.1
HTMLfuncties
"html.inc.php" bevat de nodige functies om een htmlpagina te beginnen en te sluiten, en om de interface met het navigatiemenu en het beheermenu weer te geven. De functie "Afbeelding( )" retourneert een geldige img-tag, bijvoorbeeld de functieaanroep "Afbeelding("logo.jpg")" zal de string "
" teruggeven. "Links( )" geeft een geldige a href-tag terug van de meegegeven parameter.
3.1.2
Bestandsfuncties
Tekst, de openingsuren, de promoties en de links worden in aparte tekstbestandjes bewaard. Gebruik van tekstbestanden is handig wanneer de hoeveelheid tekst die bewaard dient te worden niet te groot is. Alle functies die betrekking hebben op het gebruik van tekstbestanden, worden in "bestand.inc.php" geschreven. De functie "LeesBestandString( )" vereist een bestandsnaam als argument, leest het volledige bestand als string in en geeft die string terug. "SchrijfStringBestand( )" verwacht 2 argumenten, de bestandsnaam en een string. Vervolgens wordt de string in het desbetreffende bestand geschreven. "LeesBestandArray( )" en "SchrijfArrayBestand( )" worden gebruikt voor ondermeer de links en promoties. Bijvoorbeeld elke link bestaat uit een naam, een beschrijving, een afbeelding en de url zelf. Wanneer we een nieuwe link willen toevoegen, wordt alle informatie ingevuld in inputboxen, waarna ze als elementen op een array $links worden gezet. Deze array, en een bestandsnaam, wordt doorgegeven aan "SchrijfArrayBestand( )". De array wordt doorlopen, en elk element met een scheidingskarakter "|" wordt onderaan het bestand weggeschreven. Vervolgens wordt het newline karakter toegevoegd zodat elke link in het bestand op een andere regel staat.
14
Mogelijke inhoud van "links.txt" na het wegschrijven van 2 $links. +---------------------------------------------------------------------------------+ | V.R.A.|Vereniging Vlaamse Radio Amateurs|http://www.vra.be|links_vra.gif
|
| Planet Internet|ADSL internettoegang|http://www.pi.be|links_pi.gif
|
+---------------------------------------------------------------------------------+ Wanneer we de links willen weergeven, wordt "LeesBestandArray( )" met de bestandsnaam als argument aangeroepen. Via de functie "file( )" wordt een volledig tekstbestand ingelezen als array waarbij elk element overeenkomt met een regel in het bestand.
3.1.3
Databasefuncties
Ook alle databasefuncties worden apart geplaatst. Dit zorgt ervoor dat de aanpassing van de applicatie naar een andere database of aanpassing van de database parameters gemakkelijker verloopt. Als database parameters wordt de hostname, username, password en de naam van de database bijgehouden. Naast deze parameters bevat "database.inc.html" functies om een verbinding te maken met de MySQL-sever ("ConnecteerMySQL( )"), een database te openen ("OpenDatabase( )"), sql queries uit te voeren ("DoeQuery( )"), het aantal gevonden records te tellen("AantalRecord( )") en een record over te hevelen naar een array variabele ("LeesRecordArray( )").
3.1.4
Inlogfuncties
De login functies worden verder besproken in de login-module. Deze worden wel geïnclude omdat de bezoeker op elke pagina moet kunnen in- of uitloggen.
15
3.2
Klassen
Om de gegevens bij te houden van de bezoeker en de adresgegevens van LAMA is het gebruik van klassen aangewezen. Analoog aan de includes bestanden worden de twee klassen opgesomd in een bestand "classes.inc.php", dat geïnclude wordt door alle pagina's.
3.2.1
Klassendiagram Bezoeker en Lama
Bezoeker
LAMA
+id : var +login : var +wachtwoord : var +voornaam : var +achternaam : var +mail : var +level : var
+titel : var +url : var +voornaam : var +achternaam : var +adres : var +woonplaats : var +telefoon : var +fax : var +mail : var +btw : var +hrd : var +bank1 : var +bank2 : var
+Bezoeker(id : var, login : var, voornaam : var, achternaam : var, mail : var, level : var) : object +getId( ) : var +getLogin( ) : var +getWachtwoord( ) : var +getNaam( ) : var +getVoornaam( ) : var +getAchternaam( ) : var +getMail( ) : var +getLevel( ) : var +setVoornaam(p_voornaam : var) +setAchternaam(p_achternaam : var) +setMail(p_mail : var)
+Lama( ) : object +getTitel( ) : var +getUrl( ) : var +getNaam( ) : var +getVoornaam( ) : var +getAchternaam( ) : var +getAdres( ) : var +getWoonplaats( ) : var +getTelefoon( ) : var +getFax( ) : var +getMail( ) : var +getBtw( ) : var +getHrd( ) : var +getBank1( ) : var +getBank2( ) : var
Net zoals bij het declareren van variabelen, worden attributen van een klasse gedeclareerd zonder type-aanduiding, maar met "var". Verder heeft elke klasse naast de attributen, methodes zoals een constructor en getter- en setterfuncties. Het "+" teken geeft aan dat alle attributen en methodes van een klasse "public" zijn. Php kan niets "private" of "protected" zetten, dit is een tekortkoming van php.
16
3.3
3.3.1
Module: login Base URL:
http://www.lama.be/includes/
Relative URL:
login.inc.php
Beschrijving
De bedoeling is om een bezoeker te kunnen identificeren zonder hem telkens opnieuw zijn gebruikersnaam en wachtwoord te laten intypen. Eerst en vooral moet een bezoeker kunnen inloggen (aan de hand van een login en een wachtwoord). Uiteindelijk moet de bezoeker kunnen uitloggen of moet, als hij te lang niets gedaan heeft, dus waarschijnlijk vergeten uit te loggen is, het systeem hem kunnen uitloggen. Wanneer een bezoeker inlogt, kan ook zijn "level" nagekeken worden. Is dit "admin" dan heeft de bezoeker beheerdersmogelijkheden en zal het beheermenu getoond worden. De meest geschikte oplossing hiervoor is het gebruik van sessions. Sessions maken het mogelijk om variabelen te gebruiken binnen een hele website.
De variabelen en de sessie vervallen op het moment
dat de bezoeker de browser sluit. Om de bezoeker niet elke keer te laten moeten inloggen, wordt tevens een cookie op zijn computer geplaatst, zodat wanneer de cookie bestaat hij hiermee ingelogd wordt.
3.3.2
Implementatie , inlogmenu
Via het inlogmenu in de interface kan de bezoeker inloggen of zich aanmelden.
Indien zijn login of zijn
wachtwoord fout zijn, dan zal dit weergegeven worden in het inlogmenu en zal hij opnieuw de mogelijkheid krijgen om in te loggen. Is zijn login en wachtwoord juist, wordt een ander inlogformulier getoond waar hij de mogelijkheid krijgt om uit te loggen of zijn instellingen aan te passen, en waar de getterfunctie "getNaam( )" gebruikt wordt om weer te geven dat hij succesvol ingelogd is. •
Storyboard
17
•
Specificaties Form: inlogformulier
3.3.3
Type
Name
Value
Size
Maxlength
text
loginmenu_login
-
8
25
text
loginmenu_wachtwoord
-
8
25
submit
inloggen
"Login"
-
-
submit
uitloggen
"Log uit"
-
-
button
aanmelden
"Meld aan"
-
-
button
opties
"Opties"
-
-
Implementatie , inloggen
Indien er een login en een wachtwoord gegeven zijn (door via het inlogmenu op de submit-button te klikken) worden deze gecontroleerd in de functie "inloggen( )". Indien we een bezoeker hebben met die login en dat wachtwoord in de database wordt de sessievariabele "ingelogd" op "true" gezet en wordt een nieuw object van de klasse "Bezoeker" aangemaakt met de overeenkomstige gegevens uit de database. Ook dit object wordt als sessievariabele geregistreerd. Wordt geen bezoeker met die login en dat wachtwoord gevonden, krijgt "ingelogd" de waarde "error". Afhankelijk van de waarde van "ingelogd" wordt een passend inlogformulier weergegeven.
3.3.4
Implementatie , uitloggen
Indien de bezoeker de "log uit" knop heeft aangeklikt dan verwijderen we de cookie op de computer van de bezoeker en de sessie met de sessievariabelen.
3.3.5
Implementatie , inlogstatus
De functie "inlogstatus( )" wordt aangeroepen door elke pagina. Deze controleert of de bezoeker wil inof uitloggen. Wanneer de bezoeker op de "login" knop gedrukt heeft, worden zijn ingevoerde login en wachtwoord als $_POST[] variabele beschikbaar op de pagina. Is dit het geval, dan roept "inlogstatus( )" de functie "inloggen( )" aan met die login en het versleutelde wachtwoord door middel van de md5 methode. Vervolgens wordt een cookie op de bezoeker zijn computer geplaatst met zijn login en zijn geëncrypteerde wachtwoord. Dit cookie is een week geldig, waarna het vervalt. Bij het klikken op de "log uit" knop, wordt "uitloggen( )" afgehandeld. Wanneer er geen $_POST[] variabele bestaat, wordt gecontroleerd of de bezoeker een cookie heeft met zijn login en wachtwoord van een vorige sessie. Bestaat er een cookie, dan gebeurt de identificatie van de bezoeker aan de hand van $_cookie["cookie_login"] en $_cookie["cookie_wachtwoord"], zodat de bezoeker automatisch ingelogd wordt.
18
3.4
3.4.1
Module: beginpagina Base URL:
http://www.lama.be/
Relative URL:
index.php
Beschrijving
Op de beginpagina wordt de bezoeker verwelkomd. Naast vermelding van de openingsuren wordt ook verwezen naar andere rubrieken van de site. Eventueel kunnen nieuwe artikelen op deze pagina aangekondigd worden. •
Storyboard
19
•
Specificaties Images hoofdpagina_logo.jpg hoofdpagina_openingsuren.jpg Datafiles hoofdpagina_openingsuren.txt hoofdpagina_promoties.txt hoofdpagina_telecom_apparaten.txt hoofdpagina_nieuwe_artikels.txt
3.4.2
Implementatie
Indien de sessievariabele "ingelogd" "true" is, kan de bezoeker persoonlijk begroet worden door middel van de "getVoornaam( )" functie van de klasse bezoeker aan te roepen. Nieuwe artikels worden bewaard in het tekstbestand "hoofdpagina_nieuwe_artikels.txt", wat ingelezen wordt door "LeesBestandArray( )". Is het resultaat hiervan een array, dan betekent dit dat er een vermelding met die artikels moet getoond worden. Hiervoor wordt elk element van de array gesplitst in een $naam, $beschrijving, $prijs, $url en $afbeelding, waarna deze variabelen weergegeven worden in een tabel. De vermeldingen van de openingsuren, telecom-apparaten en promoties worden elk als string ingelezen door "LeesBestandString( )". Daarna wordt deze string op het scherm weergegeven.
20
3.5
Module: prijslijst pc & ham Base URL:
http://www.lama.be/prijslijst/pc/
Relative URL:
index.php
http://www.lama.be/prijslijst/ham/
3.5.1
Beschrijving
Deze module zorgt ervoor dat de bezoeker een prijslijst van pc of ham artikelen kan gaan bekijken, waarbij alle artikelen gegroepeerd zijn in artikelgroepen. De lijst geeft de artikelomschrijving, eenheid, prijs inclusief en exclusief btw per artikel weer. Via een listbox kan de bezoeker naar een bepaalde artikelgroep navigeren. De prijslijst bevat een hoofding, de bezoeker kan kolommen alfabetisch oplopend of aflopend sorteren door in de hoofding op de gewenste kolomtitel te klikken. Indien het artikel een link bevat naar een site met informatie over desbetreffend artikel, werkt de artikelomschrijving als hyperlink. Dit wordt visueel weergegeven door een afbeelding of door de artikelomschrijving te onderlijnen bij de MouseOver-event. Klikken op de afbeelding of hyperlink, opent de gelinkte site in een nieuw browser window. Onderaan de pagina heeft de bezoeker keuze om een printvriendelijke offerte van bepaalde artikelgroepen of artikels te genereren. Indien de bezoeker een offerte wil van artikels, kan hij deze selecteren door middel van een checkbox in de lijst.
21
•
Storyboard
•
Specificaties Images prijslijst_pc_titel.jpg prijslijst_pc_$artikelgroep["nr"].jpg of prijslijst_ham_$artikelgroep["nr"].jpg prijslijst_link.gif Form: artikelgroepformulier Type
Name
Value
Size
Maxlength
select
-
#$artikelgroep["nr"]
-
-
22
Form: prijslijst_pc of prijslijst_ham
3.5.2
Type
Name
Value
checkbox
artikels[]
$artikelgroep["groep"]|$artikelgroep["nr"]|1
submit
offerte_artikel
"artikel"
-
-
button
offerte_artikelgroep
"artikelgroep"
-
-
Implementatie
Een sql commando selecteert alle verschillende artikelgroepen die behoren tot de pc of ham prijslijst. Een listbox wordt opgevuld met deze resulterende groepen, waarbij elke optie in de listbox als waarde de locatie van de pagina heeft, aangevuld met de artikelgroepnummer. Javascript zorgt ervoor dat wanneer er op een optie in de listbox geklikt wordt, de bezoeker onmiddellijk naar de gekozen artikelgroep in de pagina gestuurd wordt. Vervolgens wordt er per artikelgroep een tabel gegenereerd, met een prijslijsthoofding en alle artikelen die tot die artikelgroep behoren. Bij elk artikel wordt een checkbox geplaatst met als waarde het artikelgroepnummer, het artikelnummer en een standaardhoeveelheid van 1 onderling gescheiden door het "|" karakter. Nadien wordt gecontroleerd of er een url-verwijzing ervan bijgehouden wordt. Is dit het geval, dan wordt een afbeelding voor de artikelomschrijving getoond en krijgt de artikelomschrijving een hyperlink-tag. Verder wordt gecontroleerd of de eenheid uit meerdere stuks bestaat en wordt de prijs inclusief en exclusief btw berekent en in een passend formaat gezet. Tenslotte heeft het prijslijstformulier twee knoppen waarmee de keuze bestaat om een offerte te genereren voor de aangekruiste artikelen of voor artikelgroepen. Wanneer op de "artikel" knop gedrukt wordt, worden alle aangekruiste artikelen in een array artikel[] gepost. Deze artikelen worden geregistreerd als sessievariabele nadat gecontroleerd werd of ze nog niet bestonden in de $_SESSION[] variabele.
23
3.6
Module: prijslijst pc & ham, offerte artikel Base URL:
http://www.lama.be/prijslijst/pc/
Relative URL:
offerte_artikel.php
http://www.lama.be/prijslijst/ham/
3.6.1
Beschrijving
De module genereert een printvriendelijke offerte van de door de bezoeker geselecteerde artikels. Per artikel kan de bezoeker nu het aantal eenheden invoeren. Op basis van deze hoeveelheid en de artikelprijs wordt een totale prijs exclusief en inclusief btw berekent en weergegeven. Indien de bezoeker geregistreerd en ingelogd is komen ook zijn naam en adresgegevens op de offerte. Daarnaast bevat de offerte een hoofding en een voettekst met de gebruikelijke gegevens ivm LAMA Computers & Communication. Deze offerte wordt in een popup venster getoond, zodat de bezoeker makkelijk terug kan keren naar de prijslijstpagina's en artikels kan toevoegen of verwijderen. •
Storyboard
24
•
Specificaties Images offerte_pc_titel.jpg of offerte_ham_titel.jpg offerte_logo.jpg offerte_titel.jpg Datafiles offerte_voettekst.txt Form: offerte_artikelgroep
3.6.2
Type
Name
Value
Size
Maxlength
text
regel[]
$aantal
5
5
submit
vernieuw
"vernieuw"
-
-
button
print
"afdrukken"
-
-
Implementatie
De hoofding van de offerte wordt gegenereerd door de getterfuncties van de klasse lama aan te roepen. Indien $_SESSION["ingelogd"] de waarde "true" bevat, betekent dit dat we de bezoeker kunnen identificeren, en worden dus de getterfuncties van de klasse bezoeker gebruikt om de bezoekergegevens te plaatsen, anders wordt er de vermelding "Niet geregistreerde of ingelogde bezoeker" gezet. Om de aangekruiste artikelen weer te geven wordt gecontroleerd of $_SESSION["artikel"] bestaat. Is dit niet het geval, komt er een melding dat de bezoeker één of meerdere artikels moet selecteren op de prijslijst. Wanneer de sessievariabele $artikel[] wel bestaat, wordt de array doorlopen en komt elk element op de offerte. De bezoeker heeft dan nog de keuze om een gewenste hoeveelheid in te geven in de overeenkomende inputboxen. Door op de knop "vernieuw" te drukken, worden de bedragen exclusief en inclusief btw aangepast aan de hoeveelheid, en wordt de standaardhoeveelheid van 1 van desbetreffend artikel in de sessievariabele $artikel[] gewijzigd. Onderaan de offerte wordt een totale prijs exclusief en inclusief btw weergegeven. De inhoud van het tekstbestand "offerte_voettekst.txt" wordt ingelezen als string en als voettekst onderaan de pagina getoond. Omdat deze pagina mogelijk afgedrukt kan worden, wijzigt ze van layout ten opzichte van de andere pagina's en wordt geen gebruik gemaakt van cascade style-sheets.
25
3.7
Module: prijslijst pc & ham, offerte artikelgroep Base URL:
http://www.lama.be/prijslijst/pc/
Relative URL:
offerte_artikelgroep.php
http://www.lama.be/prijslijst/ham/
3.7.1
Beschrijving
Een printvriendelijke offerte van artikelgroepen wordt gegenereerd. De gewenste artikelgroepen worden op deze pagina gekozen door middel van een listbox en een knop "toevoegen". Indien de bezoeker de artikelgroep toevoegt, komen alle artikelen behorende tot deze artikelgroep op de offerte. Net zoals een offerte voor artikels, wordt de offerte voor artikelgroepen in een popup venster weergegeven. •
Storyboard
26
•
Specificaties Images offerte_pc_titel.jpg of offerte_ham_titel.jpg offerte_logo.jpg offerte_titel.jpg Datafiles offerte_voettekst.txt Form: offerte_artikelgroep Name
Value
Size
Maxlength
select multiple
keuze[]
-
-
-
submit
vernieuw
"vernieuw"
-
-
button
print
"afdrukken"
-
-
Type
3.7.2
Implementatie
De hoofding van de offerte wordt gegenereerd door de getterfuncties van de klasse lama aan te roepen. Indien $_SESSION["ingelogd"] de waarde "true" bevat, betekent dit dat we de bezoeker kunnen identificeren, en worden dus de getterfuncties van de klasse bezoeker gebruikt om de bezoekergegevens te plaatsen, anders wordt er de vermelding "Niet geregistreerde of ingelogde bezoeker" gezet. Onderaan de pagina kan de bezoeker kiezen van welke artikelgroepen hij een offerte wil door middel van een listbox. De geselecteerde artikelgroepen worden na het submitten als de sessievariabele $offerte_artikelgroep geregistreerd. Wanneer de opgesteld wordt, wordt deze array doorlopen, en wordt voor elk element een sql commando uitgevoerd die de juiste artikelen uit de artikeltabel haalt. De inhoud van het tekstbestand "offerte_voettekst.txt" wordt ingelezen als string en als voettekst onderaan de pagina getoond. Omdat deze pagina mogelijk afgedrukt kan worden, verschilt ze van layout sterk van de andere pagina's en wordt geen gebruik gemaakt van cascade style-sheets.
27
3.8
3.8.1
Module: promoties Base URL:
http://www.lama.be/promoties/
Relative URL:
index.php
Beschrijving
Via deze module wordt de bezoeker op de hoogte gehouden van nieuwe promoties en tweedehandsaanbiedingen. •
Storyboard
•
Specificaties Images promoties_titel.jpg tweedehands_titel.jpg
28
Datafiles promoties.txt tweedehands.txt
3.8.2
Implementatie
Het tekstbestand "promoties.txt" wordt ingelezen als array door de functie "LeesBestandArray( )". Alleen als het bestand geldige informatie bevat, zal de functie een array teruggeven waarbij elk element ervan een string is met informatie over één promotie. Indien het bestand leeg is of niet bestaat zal de functie "is_array($promoties)" de waarde false opleveren, zodat de vermelding "Momenteel zijn er geen promoties" op het scherm getoond wordt. Wanneer wel degelijk een array weergegeven wordt, wordt de array doorlopen en wordt elk element door middel van "explode( )" gesplitst in de variabele "$naam", "$beschrijving", "$prijs", "$url" en "$afbeelding". Het karakter "|" geeft aan waar de string gesplitst moet worden. Vervolgens worden deze variabelen netjes geschikt in een tabel. Ook de tweedehandsaanbiedingen worden op deze pagina getoond. Per tweedehandsaanbieding wordt een "$naam" en een "$prijs" bijgehouden in het tekstbestand "tweedehands.txt". De tweedehandsaanbiedingen worden op identieke wijze ingelezen en getoond als de promoties.
29
3.9
3.9.1
Module: locatie Base URL:
http://www.lama.be/locatie/
Relative URL:
index.php
Beschrijving
Op deze pagina vindt de bezoeker naast het adres, tel, fax en e-mail gegevens ook een wegenplannetje terug. •
Storyboard
•
Specificaties Images locatie_titel.jpg locatie_kaart.jpg
30
3.9.2
Implementatie
Het wegenplannetje wordt als afbeelding getoond, en de getterfuncties van de klasse Lama worden aangeroepen om de titel, naam, adres, woonplaats, telefoon, fax en e-mail gegevens weer te geven.
31
3.10 Module: links Base URL:
http://www.lama.be/links/
Relative URL:
index.php
3.10.1 Beschrijving Relevante links worden hier weergegeven. Elke link kan bestaan uit een afbeelding, een naam, een beschrijving en de link zelf. De url werkt als hyperlink. •
Storyboard
•
Specificaties Images links_titel.jpg Datafiles links.txt
32
3.10.2 Implementatie "links.txt" wordt ingelezen als array door de functie "LeesBestandArray". Alleen als het bestand geldige informatie bevat, zal de functie een array teruggeven waarbij elk element ervan een string is met informatie over één promotie. Indien het bestand leeg is of niet bestaat zal de functie "is_array($links)" de waarde false opleveren, zodat de vermelding "Momenteel zijn er geen links" op het scherm getoond wordt. Wanneer wel degelijk een array weergegeven wordt, wordt de array doorlopen en wordt elk element door middel van "explode( )" gesplitst in de variabele "$naam", "$beschrijving", "$url", "$afbeelding" en "$schikking". Het karakter "|" geeft aan waar de string gesplitst moet worden. Vervolgens worden deze variabelen afhankelijk van de waarde van "$schikking" in een passende tabel weergegeven.
33
3.11 Module: registraties, aanmelden Base URL:
http://www.lama.be/registraties/
Relative URL:
index.php
3.11.1 Beschrijving Deze module moet een bezoeker toelaten zich te registreren. Het toevoegen van een nieuwe bezoeker gaat via één enkele pagina waar alle gegevens ingevuld worden. •
Storyboard
•
Specificaties Images aanmelden_titel.jpg Datafiles aanmelden.txt
34
Form: registratieformulier Type
Name
Value
Size
Maxlength
text
voornaam
-
20
25
text
achternaam
-
20
25
text
mail
-
40
75
text
login
-
8
15
password
wachtwoord
-
8
15
password
wachtwoordcontrole
-
8
15
submit
meldaan
"Meld aan"
-
-
reset
wisvelden
"Wis velden"
-
-
3.11.2 Implementatie Door in het inlogmenu op de "meld aan" knop te drukken, komt de bezoeker op deze pagina met het aanmeldingsformulier terecht. Het aanmeldingsformulier bevat inputboxen waar de bezoeker zijn voornaam, achternaam, e-mail adres, gewenste login, wachtwoord en wachtwoord ter controle kan intypen. Wordt op de "meld aan" knop van het formulier gedrukt, dan wordt de pagina herladen met deze variabelen gepost. Eerst wordt gecontroleerd of de wachtwoorden wel overeenstemmen, is dit niet het geval, wordt het aanmeldingsformulier terug getoond maar met ingevulde inputboxen en met vermelding dat de wachtwoorden verschillen. Indien dit niet het geval is, wordt in de bezoekerstabel gezocht of er reeds een bezoeker bestaat met die login. Als de login al bestaat, zal "$bezoeker_gevonden" de waarde "1" hebben en wordt opnieuw het aanmeldingsformulier getoond, ook met ingevulde inputboxen en met vermelding dat de login reeds bestaat. Wordt aan alle voorwaarden voldaan, dan wordt een sql commando opgesteld en uitgevoerd zodat er een nieuwe bezoeker toegevoegd wordt met zijn ingevoerde gegevens. Zijn wachtwoord wordt bewaard nadat het geëncrypteerd werd door de md5 methode. "mysql_query( )" voert het sql commando uit en levert een waarde "true" of "false" op afhankelijk of het commando succesvol uitgevoerd kon worden. "$bezoeker_toegevoegd" krijgt deze waarde, zodat een bericht "Registratie succesvol" weergegeven bij de waarde "true" of "Fout bij het registreren van nieuwe gebruiker" bij de waarde "false".
35
3.12 Module: registraties, instellingen Base URL:
http://www.lama.be/registraties/
Relative URL:
opties.php
3.12.1 Beschrijving Indien nodig kan een geregistreerde bezoeker hier zijn gegevens zoals voornaam, achternaam en e-mail adres wijzigen. •
Storyboard
•
Specificaties Images registratie_instellingen_titel.jpg Datafiles registratie_instellingen.txt Form: registratieformulier Type
Name
Value
Size
Maxlength
text
voornaam
-
20
25
text
achternaam
-
20
25
text
mail
-
40
75
submit
bewaar
"Bewaar"
-
-
36
3.12.2 Implementatie Nadat een bezoeker ingelogd is, wordt in het inlogmenu de knop "opties" weergegeven.
Hierdoor is de
bezoeker in staat zelf zijn gegevens aan te passen. Het instellingenformulier bevat inputboxen waarin de bezoeker zijn voornaam, achternaam en e-mail adres met behulp van de getterfuncties getoond worden. Indien nodig kan hij deze aanpassen, zodat na op de "bewaar" knop te drukken, deze nieuwe waarden in de bezoekerstabel bewaard worden door een update sql commando. Wordt dit commando probleemloos uitgevoerd, dan zullen de setterfuncties van de klasse bezoeker aangeroepen worden met als argumenten de geposte variabelen. Hierdoor wordt het object "$bezoeker" meteen gewijzigd naar de nieuwe instellingen, en moet de bezoeker niet terug inloggen om de nieuwe instellingen te gebruiken.
37
3.13 Module: beheer, tekst Base URL:
http://www.lama.be/beheer/
Relative URL:
tekst.php
3.13.1 Beschrijving Deze module moet de beheerder toelaten om makkelijk teksten (openingsuren, promoties enz...) op de verschillende pagina's aan te passen. •
Storyboard
•
Specificaties Form: tekstformulier Type
Name
Value
Size
Maxlength
textarea
inhoudbestand
-
-
-
submit
bewaar
"Bewaar"
-
-
38
3.13.2 Implementatie In een listbox worden alle mogelijke tekstbestanden, gegroepeerd per module, weergegeven die gewijzigd kunnen worden. Zo bevat de groep "hoofdpagina" de opties "openingsuren", "telecom apparaten" en "promoties", de groep "Offerte" de optie "voettekst" en de groep "registraties" de opties "aanmelden" en "instellingen". Wanneer een van deze opties geselecteerd wordt en de "wijzigen" knop ingedrukt wordt, wordt de inhoud van het tekstbestand ingelezen door "LeesBestandString( )" en op het scherm weergegeven. Daaronder wordt dan een textarea getoond met dezelfde inhoud maar met eventuele htmltags zoals
, … . Door op de "bewaren" knop te drukken wordt de inhoud van het desbetreffende tekstbestand overschreven met de waarde van de textarea door de functie "SchrijfStringBestand( )" te gebruiken.
39
3.14 Module: beheer, registraties Base URL:
http://www.lama.be/beheer/
Relative URL:
registraties.php
3.14.1 Beschrijving Een overzicht weergeven van de geregistreerde bezoekers. •
Storyboard
•
Specificaties Images beheer_registraties_titel.jpg
3.14.2 Implementatie Met een sql commando worden alle bezoekers uit de bezoekerstabel ingelezen. Vervolgens wordt elk record overgeheveld naar een array, waarbij elk element benaderd kan worden door als index de kolomtitel te gebruiken.
40
3.15 Module: beheer, links Base URL:
http://www.lama.be/beheer/
Relative URL:
links.php
3.15.1 Beschrijving Via deze pagina kunnen links aangepast, verwijderd of toegevoegd worden. Hiervoor worden alle links met elk een radiobutton weergegeven in een lijst en afhankelijk van de keuze wordt erboven een formulier getoond waar alle informatie voor één link ingevuld wordt in de overeenstemmende inputboxen. •
Storyboard
•
Specificaties Images beheer_links_titel.jpg
41
Datafiles links.txt Form: linksformulier Type
Name
Value
radio
selectie
$naam
Size
Maxlength
submit
nieuw
"nieuw"
-
-
submit submit
wijzig
"wijzig"
-
-
verwijder
"verwijder"
-
-
Form: toevoegenformulier Type
Name
Value
Size
Maxlength
text
naam
-
-
-
textarea
beschrijving
-
-
-
text
url
"http://www."
-
-
text
afbeelding
-
-
-
radio
schikking
1
-
-
radio
schikking
2
-
-
submit
bewaar
"bewaar"
-
-
Form: wijzigenformulier Type
Name
Value
Size
Maxlength
text
naam
$naam
-
-
textarea
beschrijving
$beschrijving
-
-
text
url
$url
-
-
text
afbeelding
$afbeelding
-
-
radio
schikking
1
-
-
radio
schikking
2
-
-
submit
Bewaar_wijzigen
"bewaar"
-
-
3.15.2 Implementatie Het linksformulier wordt getoond. Dit geeft een lijst weer met alle bestaande links. Hiervoor wordt het tekstbestand "links.txt" ingelezen. Vervolgens wordt bij de geretourneerde array, elk element gesplitst, waarbij het eerste deel van het element in de variabele "$link" bewaard wordt. Vervolgens wordt deze "$link" in een lijst weergegeven met een radiobutton. Indien er geen array teruggegeven werd, betekent dit dat het tekstbestand niet bestaat of leeg is, en wordt een passende melding weergegeven. Tenslotte heeft de beheerder keuze om een nieuwe link toe te voegen of om een bestaande link te wijzigen of te verwijderen. Wanneer een nieuwe link toegevoegd wordt, wordt boven het linksformulier het toevoegenformulier getoond. In de overeenkomende inputboxen wordt de nodige informatie voor één link ingevuld, en wordt de gewenste schikking gekozen. Bij het bewaren wordt alle geposte informatie in de array "$link[]" gezet, die op zijn beurt doorgegeven wordt aan de functie "SchrijfArrayBestand( )". Indien er een link aangekruist is in de lijst en op de knop "wijzigen" gedrukt wordt, wordt het wijzigenformulier weergegeven. Dit komt overeen met het toevoegenformulier, maar de te wijzigen link wordt opgezocht in de geretourneerde array van de functie "LeesArrayBestand( )". Komt de link uit de array overeen met de geselecteerde link uit het linksformulier, dan worden de inputboxen gevuld met de
42
overeenkomende waarden en wordt de plaats van het te wijzigen element in de array als sessievariabele "$i" geregistreerd. Bij het bewaren wordt het tekstbestand "links.txt" verwijdert, nadat het ingelezen werd door middel van de functie "LeesBestandArray( )". Met de sessievariabele "$i" wijzigen we het juiste element in de array met de waarden uit het wijzigenformulier. Is dit gebeurt, dan wordt elk element van de array weggescheven naar het nieuwe bestand "links.txt" gebruik makend van "SchrijfArrayBestand( )". Ook bij het verwijderen van een link, wordt "links.txt" eerst ingelezen en dan verwijdert. Vervolgens wordt elk element, wanneer dit verschilt met de geselecteerde link uit het linksformulier, weggeschreven.
43
3.16 Module: beheer, promoties Base URL:
http://www.lama.be/beheer/
Relative URL:
promoties.php
3.16.1 Beschrijving Via deze pagina kunnen promoties aangepast, verwijderd of toegevoegd worden. Hiervoor wordt elke promotie met een radiobutton weergegeven in een lijst en afhankelijk van de keuze wordt erboven een formulier getoond waar alle informatie voor één promotie ingevuld wordt in de overeenstemmende inputboxen. •
Storyboard
•
Specificaties Images beheer_promoties_titel.jpg
44
Datafiles promoties.txt Form: promotiesformulier Type
Name
Value
radio
selectie
$naam
Size
Maxlength
submit
nieuw
"nieuw"
-
-
submit submit
wijzig
"wijzig"
-
-
verwijder
"verwijder"
-
-
Form: toevoegenformulier Type
Name
Value
Size
Maxlength
text
naam
-
-
-
textarea
beschrijving
-
-
-
text
prijs
-
-
-
text
url
-
-
-
text
afbeelding
-
-
-
submit
bewaar
"bewaar"
-
-
Size
Maxlength
Form: wijzigenformulier Type
Name
Value
text
naam
$naam
-
-
textarea
beschrijving
$beschrijving
-
-
text
prijs
$prijs
-
-
text
url
$url
-
-
text
afbeelding
$afbeelding
-
-
submit
Bewaar_wijzigen
"bewaar"
-
-
3.16.2 Implementatie Het beheer van de promoties, verloopt op dezelfde wijze als het beheer van de links. Voor elke promotie wordt de naam, beschrijving, prijs, url en afbeelding bijgehouden.
45
3.17 Module: beheer, nieuwe artikels Base URL:
http://www.lama.be/beheer/
Relative URL:
nieuw_artikel.php
3.17.1 Beschrijving Module werkt op dezelfde wijze als de module in verband met beheer promoties. •
Storyboard
•
Specificaties Images beheer_nieuwe_artikels_titel.jpg Datafiles nieuwe_artikels.txt
46
Form: nieuwe_artikelsformulier Type
Name
Value
Size
Maxlength
radio
selectie
$naam
submit
nieuw
"nieuw"
-
-
submit
wijzig
"wijzig"
-
-
submit
verwijder
"verwijder"
-
-
Form: toevoegenformulier Type
Name
Value
Size
Maxlength
text
naam
-
-
-
textarea
beschrijving
-
-
-
text
Prijs
-
-
-
text
url
-
-
-
text
afbeelding
-
-
-
submit
bewaar
"bewaar"
-
-
Form: wijzigenformulier Type
Name
Value
Size
Maxlength
text
naam
$naam
-
-
textarea
beschrijving
$beschrijving
-
-
text
Prijs
$prijs
-
-
text
url
$url
-
-
text
afbeelding
$afbeelding
-
-
submit
Bewaar_wijzigen
"bewaar"
-
-
3.17.2 Implementatie Identieke implementatie als bij de beheer van promoties module, alleen worden de gegevens bewaard in het tekstbestand "nieuwe_artikels.txt".
47
TECHNISCH LASTENBOEK
1
In welke taal moet de website geschreven zijn?
Omdat we pagina’s gaan genereren die afhankelijk zijn van de input van de bezoekers, gaan we een server side script taal gebruiken die de data afkomstig van de bezoeker, op de server kan verwerken. Een belangrijk verschil met andere Server Side technieken (CGI, API) is dat de server side scripting techniek het mogelijk maakt om in de HTML bestanden zelf stukken code te schrijven. Bij het verwerken van deze code aan de server kant wordt de code vervangen door de output van deze code, en het zo onstane pure HTML bestand wordt naar de cliënt gestuurd. Voorbeelden van server side script talen zijn ASP, JSP, CFM en PHP. De dichtste benadering voor PHP is ASP. De syntax van ASP is gebaseerd op die van visual basic en er zijn ook vele verschillende uitbreidingen mogelijk. Een groot nadeel ten opzichte van PHP is het feit dat ASP enkel maar goed ondersteund worden op Microsoft Windows platformen. De uitbreidingen zijn allemaal geschreven naar Microsoft-producten toe. Hierdoor is ASP een beetje benadeeld door niet platform-onafhankelijk te zijn. Wanneer we platformonafhankelijk willen werken moeten we kiezen voor PHP.
1.1
Wat is php?
PHP is een scriptingtaal, die grote overeenkomsten vertoont met de syntax van C en PERL, met als doel de mogelijkheid te geven om snel dynamische webpagina’s te ontwikkelen. De mogelijkheden van php waren oorspronkelijk vrij beperkt maar door de grote populariteit van php is daar vrij snel verandering in gekomen. PHP is gegroeid tot een van de grotere scriptingtalen die er bestaan en is een van de concurrenten van andere scriptingtalen (ASP, JSP, CFM … ). Verder is php een open source project, wat wil zeggen dat iedereen die het wil er toevoegingen en aanpassingen aan kan maken om aan zijn eisen te voldoen. Omdat het een open source is, draait php op diverse platforms en mag gratis gedownload worden. Naast het manipuleren van de inhoud van de webpagina’s, kan php gegevens doorgeven naar andere pagina’s, cookies wegschrijven en inlezen en http authenticatie afhandelen. Verder worden er veel databases ondersteund, en de integratie met externe libraries biedt allerlei mogelijkheden, variërend van genereren van PDF documenten tot on the fly creëren van images en het parsen van XML. PHP biedt ook mogelijkheden voor Object Oriented Programming.
48
1.2
Enkele eigenschappen van php
1.2.1
Eisen
Aan de serverkant is de belasting eerder laag. De PHP-parser is volledig herschreven voor versie 4 en er werd rekening gehouden met de belasting van het onderliggende systeem. Wanneer we een kleine server nodig hebben die slechts af en toe enkele pagina’s moet verwerken, dan hebben we genoeg aan een lichte machine. Wanneer we een drukbezochte server hebben die per minuut verschillende pagina’s moet parsen en serven, dan moeten we kiezen voor een machine met veel RAM. De processorkracht is hier minder van belang.
1.2.2
Vergelijking met andere programmeertalen
De syntax van php is eigenlijk een samenvoeging van de syntax van C en PERL (oorspronkelijk was PHP een quick perl script). Declaraties van variabelen zijn ook niet nodig, net als in Perl. De structuur van classes, syntax en groeperingen zijn overgenomen van de syntax van C en aanverwante talen.
1.2.3
Snelheid
De parser (Zend-engine) is voor PHP4 volledig herschreven met snelheid als hoofddoel. Hierdoor is Zend een van de snelste parsers die er momenteel bestaat.
49
2
Welke software is nodig?
2.1
Developing
PHP wordt vooral samen gebruikt met de Apache webserver en MySQL. De samenwerking tussen die drie programma’s gaat ontzettend diep.
2.1.1
Apache http Server
Als webserver kiezen we dus Apache HTTP Server 1.3.23, de win32 binaries (“apache_1.3.23-win32-x86src.msi”) zijn te downloaden op http://www.apache.org/dist/httpd/binaries/win32/. Door het .msi bestand te starten wordt Apache in de map “.\Program Files\Apache group\Apache” geïnstalleerd.
2.1.2
PHP Parser
De homepage van PHP is http://www.php.net/ waar je de laatste versie kunt downloaden. (“php-4.1.1-Win32.zip”). PHP dient handmatig geïnstalleerd worden, de inhoud van het .zip bestand moet in een zelf aangemaakte map “php” onder de root komen.
2.1.3
MySQL client/server SQL database server MySQL is een client/server SQL database server en is voornamelijk gericht op snelheid. Enkele andere eigenschappen van MySQL zijn de grote capaciteit, de stabiliteit en de gratis beschikbaarheid. Nadelen zijn dat sub-selects en views niet ondersteund worden. Versie 3.23 (“mysql-3.23.47-win.zip” op
http://www.mysql.com/downloads/mysql-3.23.html) werd gebruikt. Een “Typical Installation” in de map “.\mysql” volstaat.
In schemavorm geeft dit de volgende ontwikkelingsomgeving:
50
De webserver ontvangt van de browser een HTTP request. De webserver zoekt de aangevraagde pagina en stuurt de inhoud ervan terug naar de browser. Indien de browser een php pagina aanvraagd, kan de apache webserver deze niet interpreteren, daarvoor moeten we de php parser gebruiken. Indien er een pagina met php extensie wordt aangevraagd, wordt automatisch naar php doorgestuurd worden. PHP geeft vervolgnes het complete bestand terug aan apache, dat het vervolgens naar de browser doorstuurt. De php parser kan ook rechtstreeks de MySQL database benaderen. Verder is het platform waarop de webserver draait die de PHP-pagina’s interpreteerd eigenlijk van geen belang. Nu alles geïnstalleerd is, moet Apache geconfigureerd worden. Apache heeft geen configuratie tool, alles dient geconfigureerd te worden in 1 tekstbestand: “.\Program Files\Apache group\Apache\conf\httpd.conf”. Belangrijk is op het einde van het document het volgende toe te voegen:
### PHP gegevens ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php .phtml .php3 Action application/x-httpd-php "/php/php.exe" Hiermee geven we aan dat alle .php bestanden automatisch naar de PHP parser doorgestuurd worden. Om PHP te configureren, moet het bestand php.ini-dist naar de “windows” directory onder Windows 9x, of naar de “system” directory onder Windows NT, 2000 of XP gekopieerd worden, waarna het hernoemt mag worden tot “php.ini”. In deze .ini file moet de regel “extension_dir = ./” gewijzigd worden naar extension_dir = “c:/php/extensions”. Indien nodig, moeten ook nog de extra DLL’s in de map “.\php\dlls” gekopieerd worden naar de “system32” map onder de windows directory. MySQL moet niet geconfigureerd worden, enkel wordt een user en password gevraagd bij de eeste start van het programma “.\mysql\bin\winmysqladmin.exe”. De php code is embedded in de HTML code, dit betekent dat er geen extra editors noodzakelijk zijn om php code te programmeren. Men heeft wel de keuze tussen gewone en WYSIWYG-editors. WYSIWYGeditors zoals Macromedia Dreamweaver maken het wel mogelijk om op relatief eenvoudige manier tabellen en interfaces op te bouwen., maar aangezien deze editors nog geen economische HTML files leveren, ze vervuilen de files met onnodige tags, wat veel onnodige kilobytes toevoegt aan een bestand, wordt de voorkeur gegeven om het merendeel handmatig te schrijven. Een teksteditor, zoals “Crimson Editor”, die de regelnummers weergeeft is aangewezen, daar de php parser bij een syntax fout enkel het regelnummer geeft waar de fout zit. Adobe Photoshop 7 werd gebruik om de grafische elementen te creëren.
2.2
Hosting
De host moet PHP/MySQL ondersteunen. Omdat de huidige host dit nog niet aanbiedt, wordt nog gezocht naar een geschikte host. Een mogelijkheid is om zelf een webserver te draaien of gebruik te maken van hosts die gratis PHP/MySQL ondersteuning verlenen, maar voor professionele sites is een betaalde externe hosting de beste oplossing.
51
3
Uittekenen van de database structuur
3.1
Tabel Artikel
In deze tabel worden artikelgegevens zoals groep, nr, omschrijving, hoeveelheid, eenheid, prijs en url bewaard. “type” geeft aan tot welke prijslijst het artikel behoort. Indien de waarde “P” is, betekent dit dat het artikel tot de PC-prijslijst behoort, “R” tot HAM-prijslijst en “A” tot allebei. Het veld “groep” bevat het id van de artikelgroep waartoe het artikel behoort, zodat er een “1 op veel”-relatie ontstaat tussen het veld groep in de tabel artikelgroep en groep in de tabel artikel.
mysql> CREATE TABLE artikel( -> groep CHAR(3) NOT NULL, -> nr VARCHAR(8) NOT NULL, -> omschrijving TEXT NOT NULL, -> type ENUM('P','R','A') NOT NULL, -> hoeveelheid INT(4) UNSIGNED NOT NULL DEFAULT '1', -> eenheid CHAR(4) NOT NULL, -> prijs DOUBLE(7,2) NOT NULL, -> url VARCHAR(200), -> PRIMARY KEY(groep, nr)); Query OK, 0 rows affected (0.04 sec) mysql> DESCRIBE artikel; +--------------+-------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------------+------+-----+---------+-------+ | groep | char(3) | | PRI | | | | nr | varchar(8) | | PRI | | | | omschrijving | text | | | | | | type | enum('P','R','A') | | | P | | | hoeveelheid | int(4) unsigned | | | 1 | | | eenheid | varchar(4) | | | | | | prijs | double(7,2) | | | 0.00 | | | url | varchar(200) | YES | | NULL | | +--------------+-------------------+------+-----+---------+-------+ 7 rows in set (0.01 sec)
52
3.2
Tabel Artikelgroep
Deze tabel bevat de verschillende groepen waartoe een artikel kan behoren. Als unieke identificatie nemen we een string van maximaal 3 karakters.
mysql> CREATE TABLE artikelgroep( -> groep CHAR(3) NOT NULL, -> omschrijving VARCHAR(30) NOT NULL, -> PRIMARY KEY(groep)); Query OK, 0 rows affected (0.03 sec) mysql> DESCRIBE artikelgroep; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | groep | char(3) | | PRI | | | | omschrijving | varchar(30) | | | | | +--------------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
3.3
Tabel Bezoeker
Indien een bezoeker zich wenst aan te melden, willen we zijn voornaam, achternaam en e-mail adres kennen. Daarnaast houden we ook zijn gewenste login en wachtwoord bij. Aan de hand van deze login en het wachtwoord kan de gebruiker inloggen. Iedere geregistreerde bezoeker heeft ook een id, om de MySQL-PHP-programmatie eenvoudiger te laten verlopen, zodat niet telkens een volledige string gebruikt moet worden, maar een uniek nummer voldoende is. In het veld “level” wordt de mogelijkheden van de bezoeker aangegeven. Indien dit “admin” is, zal de bezoeker beheerdersmogelijkheden hebben zoals het aanpassen van de pagina’s.
mysql> CREATE TABLE bezoeker( -> id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, -> login VARCHAR(15) NOT NULL, -> wachtwoord VARCHAR(32) NOT NULL, -> voornaam VARCHAR(25) NOT NULL, -> achternaam VARCHAR(25) NOT NULL, -> mail VARCHAR(75) NOT NULL, -> level ENUM('user','admin') NOT NULL DEFAULT 'user', -> PRIMARY KEY(id)); Query OK, 0 rows affected (0.03 sec) mysql> DESCRIBE bezoeker; +------------+----------------------+-----+---------+----------------+ | Field | Type | Key | Default | Extra | +------------+----------------------+-----+---------+----------------+ | id | int(10) unsigned | PRI | NULL | auto_increment | | login | varchar(15) | | | | | wachtwoord | varchar(32) | | | | | voornaam | varchar(25) | | | | | achternaam | varchar(25) | | | | | mail | varchar(75) | | | | | level | enum('user','admin') | | user | | +------------+----------------------+-----+---------+----------------+ 7 rows in set (0.01 sec)
53
BESLUIT
De realisatie van dit project, nam aanvankelijk een moeilijke start. Hoofdzakelijk kwam dit omdat ik weinig ervaring had met het maken van websites, laat staan met php. De eerste weken werden dan ook vooral besteed aan het opzoeken van informatie over php. Dankzij de grote populariteit van php was het echter niet moeilijk om tal van sites te ontdekken waar php uitgebreid behandeld wordt. Doordat mijn kennis van php en van websites vrij beperkt was, kan het project als een heel leerrijke ervaring beschouwd worden. Websites ontwikkelen zonder gebruik te maken van php, lijkt mij na dit project ondenkbaar. Dankzij php kunnen websites veel sneller en beter ontworpen worden in vergelijking met gewone html-pagina's. Het nadeel is dat php nog niet ondersteund wordt door de meeste hosts, alhoewel hier verandering begint in te komen dankzij de grote populariteit van php. Mr. Marc Lambrecht was uiteindelijk heel positief over het uiteindelijke resultaat, vooral de mogelijkheid om de site online aan te passen was een grote verbetering ten opzichte van de vorige site.
54
BIJLAGEN
Bijlage 1 Programma in Visual FoxPro om databases aan te maken of op te vullen.
Bijlage 2 Uitvoer van het programma naar een tekstbestand met een sql commando om een tabel aan te maken.
55
Bijlage 3 uitvoer van het programma naar een tekstbestand met een sql commando om een tabel op te vullen met gegevens uit de Visual FoxPro tabel.
56
LITERATUUROPGAVE
Websites •
VAN WIJHE, U., Webserver installeren http://www.phpfreakz.nl/artikelen.php?aid=75&page=1
•
GRYMONPON, B., PHP Hypertext Preprocessor http://www.zeus.rug.ac.be/lessen/01-02/php2002.pdf
•
PHP handleiding http://www.php.net/manual/nl/
•
Forum PHP Freakz http://www.phpfreakz.nl/
•
VINCENT, D., Login system met cookies
•
VINCENT, D., E-commerce met cookies & MySQL
http://www.phpfreakz.com/artikelen.php?aid=10 http://www.phpfreakz.com/artikelen.php?aid=11 •
KOOIMAN, M., Array's http://www.phpfreakz.com/artikelen.php?aid=66
•
Introduction to MySQL: A MySQL Tutorial http://www.mysql.com/doc/T/u/Tutorial.html
•
PIPEROGLOU, S., HTML with Style Tutorials http://www.webreference.com/html/tutorials/
•
Wegwijs in multimedia technieken: een creatief gebruik van communicatie technologieën http://schoolweb.argo.be/envelop/inleiding.htm
•
VANSTAPPEN, K., Praktijk webbuilding: Follow the yellow brick road Published in Smart Business, issue nr 10, October 2001 http://www.higroup.com/SB-Follow.pdf
•
VANSTAPPEN, K., Praktijk webbuilding: Wie draagt de broek? Published in Smart Business, issue nr 11, November 2001 http://www.higroup.com/SB-Broek.pdf
•
VANSTAPPEN, K., Praktijk webdesign: Somewhere over the rainbow Published in Smart Business, issue nr 12, December 2001 http://www.higroup.com/SB-Somewhere.pdf
•
Forum Eyeball-Design http://www.eyeball-design.com/
•
Forum Guistuff http://www.guistuff.com/
•
Photoshop Tutorials http://rainworld.com/psworkshop/