PHP. Leerkracht: Dany Pinoy door zaterdag 8 december Versie: September Website:

Maat: px
Weergave met pagina beginnen:

Download "PHP. Leerkracht: Dany Pinoy door zaterdag 8 december 2012. Versie: September 2012. Website: http://webdesign.pindanet.be"

Transcriptie

1 PHP Leerkracht: Dany Pinoy door zaterdag 8 december 202 Versie: September 202 Website:

2

3 U gaat akkoord met... Deze cursus wordt u aangeboden door de Vrienden van de SNT, vzw, in samenwerking met de auteur(s). Als u deze cursus volgt, betekent dit dat u akkoord gaat met het volgende: De auteur(s) van deze cursus heeft (hebben) alles in het werk gesteld om een juiste werkwijze voor te stellen en eventuele bijhorende oefenprogramma's zowel geprint of digitaal in staat van goede werking en virusvrij te houden. Geen enkel geheel of gedeelte van software aanwezig op de SNT-schoolcomputers mag in enige vorm of op enige wijze worden gekopieerd of opgeslagen naar/op enig welke gegevensdrager zonder uitdrukkelijke voorafgaande toestemming van de onderwijzende SNT-informaticaleerkracht bevoegd voor deze cursus. Geen enkel geheel of gedeelte van software mag in enige vorm of op enige wijze worden gekopieerd of opgeslagen naar/op enig welke gegevensdrager van de SNT-schoolcomputers zonder uitdrukkelijke voorafgaande toestemming van de onderwijzende SNTinformaticaleerkracht bevoegd voor deze cursus. Het gebruik van de SNT-internet toegang wordt uitsluitend toegelaten met betrekking tot de theorie of oefeningen van voorliggende cursus en enkel zoals door de leerkracht aangegeven en afgebakend. Enkel legale internet downloads/uploads die gebeuren op vraag van de leerkracht in het kader van deze lessen horend bij deze cursus zijn toegelaten. Meervoudig internetmisbruik leidt tot uitsluiting. De vzw, het Centrum voor Volwassenenonderwijs Stedelijke Nijverheids- en Taalleergangen, de auteur(s), de Inrichtende Macht, in casu Stad Brugge, zijn geenszins aansprakelijk in geval de gebruiker van deze cursus en/of eventueel bijhorend oefenmateriaal schade zou lijden aan zijn computerapparatuur of programmatuur die voortvloeit uit enige fout die in het aangeboden materiaal zou kunnen voorkomen. Alle rechten voorbehouden. Niets uit deze uitgave mag verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand of openbaar worden gemaakt in enige vorm of op enige wijze, hetzij elektronisch, mechanisch, door fotokopieën, opnamen of enige andere manier, zonder voorafgaande schriftelijk toestemming van de uitgever en auteur. De enige uitzondering die hierop bestaat is dat eventuele programma's en door de gebruiker in te typen voorbeelden mogen worden ingevoerd, opgeslagen en uitgevoerd op een computersysteem, zolang deze voor privé-doeleinden worden gebruikt, en niet bestemd zijn voor reproductie of publicatie.

4 Evaluaties aan de SNT Voor de evaluatie van uw leervorderingen gebruikt SNT een systeem van Permanente Evaluatie. Permanente Evaluatie betekent dat u punten verdient gedurende het semester, terwijl u een oefening maakt tijdens de les of op het leerplatform. Concreet betekent dit dat het eindexamen wordt vervangen door één of meerdere taken tijdens de lesweken. Tijdens een permanent evaluatiemoment controleert de leerkracht of u de leerstof voldoende beheerst en krijgt u een score toegewezen (0 tem 3). Scorewijzer scorewijzer schaal [320] 3 AA: heel sterke prestatie 2 A: sterke prestatie, streefniveau B: middelmatig prestatie 0 C: te zwakke prestatie, leerdoelen niet bereikt Op het einde van het semester wordt de totale gemiddelde score berekend en via een transformatieschaal omgezet naar een percentage. Transformatietabel Bovenste getal is de gemiddelde behaalde score volgens de scorewijzer. Onderste getal is de gemiddelde score getransformeerd naar een percentage op 00. U behaalde Meer dan 70% 70% Meer dan 50% en minder dan 70% Minder dan 50% heel sterke prestatie sterke prestatie, streefniveau middelmatige prestatie te zwakke prestatie, leerdoelen niet bereikt Indien u nog vragen hebt, aarzel niet om contact op te nemen met uw SNT-leerkracht.

5 Inhoud PHP ORIENTATIE... Wat is PHP?... Scripting- en programmeertalen... Client- en ServerSide...2 Zijn er alternatieven?...2 Wat zijn webservers?...2 Algemeen...2 IIS... 3 Apache...3 Meerdere servers naast elkaar...3 PHP-module...3 RDBMS... 4 Xampp... 4 Waarom PHP?...4 Open source pakketten...5 PHP KENNISMAKING...5 Virtuele webserver...5 Een eerste scriptje...5 Het tikwerk...5 De broncode...5 Wat is dat allemaal?...6 De editor...6 De extensie...6 Plaats van het PHP-script...6 Het MVC-model...6 De openingstags...6 Het eerste commando...7 Afsluiten van de regel...7 Het testen van het script...7 De broncode van de HTML-pagina...8 Wat is er nu allemaal gebeurd Een aantal mogelijke problemen...8 Pagina niet toegankelijk...8 Downloaden van de pagina...8 Blanco pagina wordt weergeven...8 Parse Error...8 Onverwachte uitvoer...9 Iets uitgebreider...9 Nog wat tikwerk...9 Hoe loopt dit nu?...0 Commentaar...0 Variabelen...0 Termen... Oefeningen...2 Vraag en antwoord...2 Juist of fout en verklaar?...2 Haal de foute variabelen er uit:...2 Maak een script...2 PHP OPERATOREN...3 Algemeen...3 Voorbeelden...3 Gemiddelde berekenen van 2 getallen stukken tekst aan elkaar kleven...3 De restbepaling van een rekeningnummer...4 Binaire wiskunde...4 Soorten operatoren...4 Toekenningsoperator...4

6 Stringoperatoren...5 Rekenkundige operatoren...5 Standaard operatoren...5 Optel- en aftrekoperatoren...5 Binaire wiskunde...6 Gecombineerde operatoren...7 Vergelijkingsoperatoren...7 Logische operatoren...7 Foutcontrole-operatoren...8 Array-operatoren...8 Voorrang van operatoren...9 Oefeningen...9 Script... 9 PHP VARIABELEN...20 Algemeen Voorbeelden...20 Wijzigingen inhoud...20 Gegevens die niet veranderen...2 Controle correcte gegevens...2 Naamgeving...2 Gebruik van dubbele en enkele aanhalingstekens...22 Concatenatie...23 Meer escapen...23 Nieuwe regels...23 Heredoc Verwarrende variabelen...24 Verschillende types...24 Voorbeelden...24 Boolean...24 Integer...25 Float Strings NULL Arrays Objecten...26 Resources...26 Omzetten van type of casting...26 Zelf omzetten...26 Automatische conversie van types...26 Controleren van het type...27 Gelijkheid Testen van variabelen...28 Constanten...29 Oefeningen...30 Haal de fouten er uit...30 Het project van deze cursus: Webshop...30 Ronde-tijden...3 Ronde-tijden in een tabel...3 Types Constanten...32 Don Quichot...33 Punten Samengestelde woorden...33 PHP FORMULIERVERWERKING...34 Algemeen...34 Voorbeelden...34 Werking van HTTP: GET en POST...35 Volgen van een hyperlink...36 Formulieren...36 Formulieren...37 Formulieren maken...37 Input-tags...39 Verwerken van de formulieren...39

7 Verwerken van URL's...40 Opletten met URL's...4 Textarea's en nieuwe regels...4 oefeningen...4 Het project van deze cursus: Webshop...4 Enquête...47 Zoeken...48 PHP EVALUATIES EN LUSSEN...50 Algemeen...50 Voorbeelden...50 Voorbeeld...50 Voorbeeld Evaluaties...52 If... else...52 Verschillende testen in één statement...53 Switch-statement...53 Lussen While Do...while...54 For HTML code binnen while, for en if structuren...55 Oefeningen...56 Het project van deze cursus: Webshop...56 Opsplitsen voor MVC...57 Getallen afdrukken while...58 Getallen afdrukken for...58 Getallen afdrukken en verwoorden...58 Dynamische tabel...59 Dynamische tabel met alternerende rijen...59 Dynamische tabel met alternerende rijen en tabelopties...59 PHP ARRAYS...60 Algemeen Voorbeeld Vullen van arrays...62 Array() Vierkante haakjes [ ]...63 Opvragen van de gegevens...64 Gemengde arrays...64 Array leegmaken...65 Array-gerelateerde functies...65 Afdrukken van array-inhoud...65 Sorteren van arrays...65 Tellen van het aantal elementen in een array...66 Strings omzetten naar arrays en omgekeerd...67 Minimum en maximum waarden zoeken...67 Gegevens zoeken in een array...67 Arrays doorlopen...68 Voorgedefinieerde arrays...68 $_SESSION, $_POST, $_GET en $_REQUEST...68 $_SERVER...68 $_COOKIE...68 $_FILES...69 $GLOBALS...69 Oefeningen...69 Het project van deze cursus: Webshop...69 Opslaan van de gegevens in arrays...69 Doorlopen van de gegevens...69 Meerdere categorieën...70 Speelkaarten willekeurige speelkaarten trekken willekeurige speelkaarten grafisch weergeven...72 Bezoeker bepaalt aantal te trekken speelkaarten...72 HTML en arrays...72

8 PHP FUNCTIES...73 Algemeen Voorbeelden...73 Opzoeken functie...73 Gemiddelde berekenen...73 Opbouw van functies...74 Voorbeeld...74 Voorbeeld Nog functies...76 Eigen functies...76 Hoe zit dit in mekaar?...76 Variabelen en functies...77 Lokale en globale variabelen...77 Lokale variabelen...77 Globale variabelen...77 Variabelen doorgeven via verwijzing (referentie)...78 Statische variabelen...78 Argument met een standaardwaarde...78 Aantal argumenten opvragen...79 Recycleren van functies...79 Specifieke functies voor getallen...8 Integers en floats...8 Werken met getallen...82 Specifieke functies voor datums...83 Huidige tijd...83 Datums weergeven...84 Zelf tijden samenstellen...85 Tekst omzetten naar een tijdstip...85 Microseconden...86 Controleren van datums...86 Opletten met datums...86 Specifieke functies voor strings...87 Lengte van een string...87 Opmaak van tekst...87 Sprintf() en printf()...87 Hoofdletters en kleine letters...88 Vergelijken van strings...88 Zoeken van substrings...89 Uitfilteren van een substring...89 Positie vinden van een substring...89 Nog meer uitfilteren...90 Tekens en substrings vervangen...90 Vervangen van substrings op basis van positie...90 Vervangen van substrings op basis van tekst...90 Recursieve functie...9 Oefeningen...9 Het project van deze cursus: Webshop...9 Prijzen netjes weergeven...9 Prijs van een cursus opzoeken...9 Datum weergeven...92 Ingevulde datum controleren...92 Ingevulde adres controleren...93 Koppen...93 Alle kopformaten weergeven...93 Zinnen beginnen met een hoofdletter...94 Horeca Jubileum...94 Factuur opmaken...95 Analyse van adressen...96 PHP EN AJAX...96 Wat is AJAX?...97 Hoe werkt AJAX?...97 AJAX is gebaseerd op Internet Standaarden...97

9 AJAX PHP Voorbeeld...98 AJAX Database voorbeeld...00 De MySQL Database...00 De HTML pagina...00 Het PHP script...0 AJAX en XML...02 Het XML bestand...02 De HTML pagina...03 Het PHP script...04 Opiniepeiling met resultaten...06 De HTML pagina...06 Het PHP script...07 Het tekstbestand...08 Oefeningen...08 Het project van deze cursus: Webshop...08 LiveSearch...2 PHP SESSIES...2 Algemeen...2 Voorbeelden...3 Werking...4 Werken met sessies...4 Opstarten van een sessie...5 Gebruik van de sessie variabelen...5 Sessies verwijderen...5 Gedeeltelijk verwijderen van sessievariabelen...5 De volledige sessie verwijderen...5 Oefeningen...5 Het project van deze cursus: Webshop...5 Meerdere cursussen...6 Cursussen aan de winkelwagen toevoegen...6 Het winkelmandje weergeven...6 De winkelwagen leegmaken...7 Weergeven van de winkelwagen bij de inschrijving...8 Weergeven van de winkelwagen bij het verwerken van de inschrijving...9 Categorie bijhouden...20 Webshop afwerken...20 Waarschuwing...20 Aanmelden...20 PHP BEVEILIGING...2 Sql-injectie en xss: de beste verdediging...2 Cross site scripting...23 Vertrouw nooit een gebruiker...23 Voorbereiding...24 Tot slot... 24

10

11 PHP Orientatie Wat is PHP? PHP staat voor PHP: Hypertext Preprocessor en is een scriptingtaal voor dynamische webpagina's. Een dynamische webpagina is een pagina waarvan de inhoud verandert. Je kan PHP ook gebruiken om pagina's te beveiligen. Een aantal voorbeelden: weblogs webwinkels gastenboeken fotoboeken menukaarten begroetingen naargelang het tijdstip PHP zorgt voor HTML-code en dus niet voor browser-output (hetgeen de modale bezoeker ziet). Het is van groot belang om dit te onthouden. We zijn dus genoodzaakt om HTML te kennen. Een aantal van bovenstaande zaken kunnen we ook bereiken door gebruik te maken van JavaScript. Helaas werken JS niet op alle browsers. Meestal omdat een gebruiker deze uitgeschakeld heeft uit veiligheidsoverwegingen. Daarom mogen we voor beveiligde pagina's niet uitgaan van een beveiliging door JS. PHP kan niet uitgeschakeld worden door de gebruiker, omdat deze draait op de server in niet bij de eindgebruiker. Dit betekent ook een grotere flexibiliteit voor de programmeur, omdat deze enkel rekening moet houden met de beperkingen van de server en niet met die van elke potentiële bezoeker. Ook kun je met JS geen (of moeilijk) connectie maken met een database. PHP wordt ook gebruikt voor populaire webtoepassingen zoals: Drupal Joomla PHPBB Dokeos... Scripting- en programmeertalen PHP wordt een scripting-taal genoemd. Dit is een verschil met een echte programmeertaal. Bij een programmeertaal vertrekken we vanaf een broncode, maar voor we deze kunnen uitvoeren, moet deze eerst gecompileerd worden (bij een Windows-computerprogramma, maken we hier een.exe van, en wordt deze gebundeld met een aantal dll-bestanden). Dit heeft als voordeel dat de uitvoer van het programma heel snel kan lopen. Het nadeel is echter, dat bij elke wijziging van de broncode, het programma opnieuw moet gecompileerd worden. Bij grote programma's kan dit soms oplopen tot ettelijke uren. Bij een scriptingtaal, wordt de broncode niet gecompileerd, maar wordt geparsed (omgezet) bij het uitvoeren van het programma. Dit heeft als nadeel dat het uitvoeren trager loopt dan een gecompileerd programma. Maar bij de meeste programma's de gemaakt worden voor het web zal dit van geen invloed zijn, omdat deze programma's meestal heel beperkt zijn (als we dit vergelijken met stand-alone programma's). Ook wordt een webprogramma bijna altijd onderverdeeld in verschillende pagina's, waardoor ook deze tijd gedeeld wordt. Een andere grote invloed op onze webprogramma's is de overdracht van het internet zelf. De uitvoer van het programma is bijna altijd sneller dan de overdracht van het internet, waardoor ook hier weer de vertraging niet opvalt. Pagina

12 Client- en ServerSide We spreken over een ClientSide-scriptingtaal als deze uitgevoerd wordt door de browser van de bezoeker. De uitvoer van het script gebeurt op de client. Dit heeft als nadeel dat we afhankelijk zijn van de browser van de bezoeker, en aangezien deze op verschillende manieren kan ingesteld zijn, moeten we bij het gebruiken van ClientSide-scriptingtalen hier ook rekening mee houden. Een clientside-scriptingtaal is bijvoorbeeld JavaScript. ServerSide-scriptingtalen worden op de server uitgevoerd, waarna de uitvoer naar de browser van de bezoeker gestuurd wordt in de vorm van HTML. Dit heeft als voordeel dat we enkel rekening moeten houden met de beperkingen van de server. Bijkomend voordeel is bijvoorbeeld, dat we wachtwoorden nooit zullen oversturen via het internet. Ook is de doorgestuurde informatie soms minder groot bij ServerSide dan bij ClientSide. Bij een database-query, moeten we enkel de nodige gegevens doorsturen, terwijl bij een CS, alle gegevens moeten doorgestuurd worden, waarna de JS zal bepalen welke gegevens er moeten weergegeven worden. Het grote voordeel van CS daarentegen, is dat er wel controle kan uitgevoerd worden op bijvoorbeeld een aantal invoervelden, nog voor deze doorgestuurd worden naar de server. Maar aangezien we hier niet kunnen op rekenen, moeten we altijd via een SS-taal ook nog de gegevens controleren. In recentere web-programmeermethoden zoals Ajax, wordt er een combinatie van beide soorten talen gebruikt, waardoor een gebruiker meer het gevoel krijgt van met een standalone applicatie te werken. Zijn er alternatieven? Natuurlijk. Het grootste alternatief is ASP (Active Server Pages) van Microsoft. Andere veelgebruikte scriptingtalen zijn JSP (Java Server Pages) en CFM (ColdFusion). Alles hangt uiteindelijk af van welke webserver we gebruiken. Om ASP te kunnen gebruiken moeten we IIS op de server installeren. JSP heeft Sun Java Server nodig en CFM de ColdFusion-server van Adobe. PHP draait daarentegen op elke webserver, maar wordt meestal gebruikt in combinatie met de Apache-webserver. Verder hangen de verschillende alternatieven ook samen met een grote programeertaal. Zo leunt ASP dicht aan bij Visual Basic (ook van Microsoft), JSP tegen Java en PHP tegen C. Programmeurs die deze talen kennen zullen dan ook sneller kiezen voor één van de serverscriptingtalen die het dichtst er tegenaan leunt. Een aantal andere overwegingen om voor PHP te kiezen kunnen zijn: meestal goedkopere hosting voor Linux/Apache-servers dan voor Microsoft/IIS-server; heel eenvoudige koppeling naar de gratis database-server MySQL; vlotte ondersteuning op het internet door een grote gemeenschap van gebruikers; scripts werken heel snel;... Wat zijn webservers? Algemeen Iedereen is bekend met de webbrowser, in de meeste gevallen Microsofts Internet Explorer, Mozilla Firefox of Chrome. Andere webbrowsers zijn Opera of Lynx (een zuivere tekstbrowser, vaak gebruikt door slechtzienden). Deze webbrowser heeft de bezoeker nodig om een webpagina te kunnen opvragen. Deze webpagina's bevinden zich altijd op een server. Op deze server staat een toepassing geïnstalleerd die, bij aanvraag, een webpagina teruglevert: de webserver. Deze heeft dus als enige bedoeling de juiste webpagina aan de juiste bezoeker terug te geven. De meest populaire webservers zijn hierboven al aangehaald: IIS (Internet Information Server / Services) 2 Pagina

13 Apache nginx (klein en snel, BSD licentie) google (gebaseerd op linux, GWS) De 2 meest gebruikte zijn echter IIS en Apache. IIS Deze server werd gemaakt door Microsoft en draait dus ook enkel op de besturingssystemen van deze fabrikant. Het systeem wordt vooral gekenmerkt door een hoeveelheid aan bugs, en wordt dan ook minder aangeraden als webserver. Het hoge aantal wordt verklaard door de agressieve marketing-politiek van Microsoft. Het grote voordeel van IIS is wel dat het, naast de webserver, ook beschikt over een ingebouwde FTP- en NNTP-server. Alle PHP-programma's uit deze cursus zouden in principe moeten werken op een IIS-server. Maar het kan altijd zijn dat er eentje struikelt over deze webserver, waardoor je een workaround zult moeten bedenken. IIS heeft een marktaandeel van 4,46% of webservers (op januari 202). IIS-servers is de server die het traagst reageert bij een aanvraag van een webpagina. Apache Apache is een open-source server die draait op alle Unix-achtige systemen, Microsoftbesturingssystemen, Novells Netware en IBM OS/400. Door het Open-source karakter worden fouten sneller gevonden én gedicht. Door gebruik te maken van verschillende modules is het mogelijk om de functionaliteit van Apache serieus uit te breiden. Het "nadeel" van Apache zou kunnen zijn, dat je het niet kunt installeren vanaf de originele Windows-cd's, maar apart moet downloaden van het internet. Een tweede mogelijk nadeel is dat het niet beschikt over een FTP-server, maar je aangewezen bent op een extern programma hiervoor, waar er (Open Source-)alternatieven genoeg voor zijn. Apache bezit een marktaandeel van 64,9% of webservers (op januari 202). In deze cursus zullen we gebruik maken van de Apache-webserver. Meerdere servers naast elkaar In theorie is het mogelijk om de verschillende webservers op toestel te draaien hebben. Maar dit wordt niet aangeraden, omdat volgens de overeenkomsten van het IANA, een webserver standaard poort 80 krijgt toegewezen. Als een server een aanvraag binnenkrijgt, moet hij deze duidelijk weten voor welk van de webservers deze nu bedoelt is. Let er dus goed voor op dat je niet toevallig al IIS staan hebt als je Apache bij installeert. Let op met Skype, ook deze heeft een ingebouwde webserver die op poort 80 draait. De eenvoudigste manier is om Skype uit te schakelen als je Apache gebruikt. PHP-module Als we gebruik willen maken van Apache, moeten we duidelijk maken dat deze PHP-pagina's moet kunnen verwerken. Aangezien Apache dit niet zelfstandig kan, moeten we gebruik maken van een externe module: de PHP-module of PHP-parser. Ook deze moeten we apart downloaden, installeren en configureren. Op dit ogenblik is de te downloaden stabiele versie Op heel veel servers zul je echter nog versie 4.x tegenkomen, maar hier zullen we niet langer meer bij stilstaan, omdat deze niet meer ondersteund wordt door PHP zelf. Je kan best aan je hosting-bedrijf vragen om de servers om te schakelen naar versie 5.x. Ondertussen is versie 6 ook op komst. Maar er is nog geen exacte release-datum bekend. 3 Pagina

14 De PHP-modules zijn verkrijgbaar voor zowel Linux-systemen als Windows-systemen. Als wij ontwikkelen, zal dit echter meestal gebeuren op een Windows-systeem, waarna we het geheel zullen op een Linux-server plaatsen. Helaas hebben de Windows-systemen enkele beperkingen die we in de Linux-versies niet hebben, die alles te maken hebben met de opbouw van het Microsoft-besturingssysteem. Deze tekortkomingen worden ook vermeld in de PHP-documentiatie. RDBMS Een Relational DataBase Management System is een systeem dat verschillende databases beheert. Een database is op zijn beurt een systeem dat gegevens bijhoudt. Vergelijk het met een uitgebreide spreadsheet, waar je kan op filteren, combineren, gegevens toevoegen, wissen, wijzigen,... Het meest bekende desktop-systeem voor een RDBMS is Microsoft Access. Helaas is dit weinig schaalbaar (kan geen grote databases aan), is het duur,... Andere mogelijkheden zijn Microsoft SQL-server, PostgreSQL, Oracle, MySQL,... Wij maken gebruik van MySQL omdat PHP een heel uitgebreide ondersteuning heeft voor deze database. Het grote voordeel is ook dat MySQL zo goed als gratis te gebruiken is. Let wel op er zijn een paar regels: MySQL is gratis als het gebruikt wordt voor niet-commerciële toepassingen; MySQL is gratis als het als aparte module geleverd wordt voor commerciële toepassingen; MySQL is NIET gratis als deze gebundeld wordt met de applicatie én het een commerciële applicatie betreft. Ondertussen is MySQL overgenomen door Oracle. Ondersteuning is dan ook via dit bedrijf te verkrijgen, of op de vele gratis fora. Een alternatief die ook heel vaak gebruikt wordt is PostgreSQL. Deze sql-server is altijd gratis en kan ook heel snelle verwerkingen op extreem grote databases uitvoeren. Deze komt echter niet verder aan bod in deze cursus. Xampp Omdat we in deze cursus een webserver, een PHP-module en een RDBMS nodig zullen hebben, moeten we deze allen installeren. Dit kan behoorlijk omslachtig en ingewikkeld zijn. Gelukkig hebben de Apache friends deze drie programma's gebundeld als geheel, waardoor er aan configuratie niets meer te doen is. Het geheel wordt gedownload, uitgepakt, en is klaar voor gebruik. Hou er echter rekening mee, dat xampp niet geschikt is als productie-server, wegens te onveilig, maar ideaal is als ontwikkel-omgeving. Naast de bovenstaande programma's biedt xampp ook nog de mogelijkheid om een mailserver, een ftp-server,... te draaien. Voor meer uitleg over xampp zelf, zie internet. Naast Xampp zijn er op het internet nog andere mogelijkheden te vinden zoals EasyPHP, of je kan alles zelf manueel installeren, wat natuurlijk omslachtiger is, maar wel stabieler zal draaien. Waarom PHP? PHP is uitgegroeid tot een volwaardige taal die kan concurreren met de anderen. Het zelfs uitgegroeid tot een taal die te gebruiken is voor zowel command-line gebruik, als voor het programmeren van echte desktop-applicaties. Een bijkomend voordeel is dat alle tools die we nodig hebben gratis van het internet te downloaden zijn. 4 Pagina

15 Open source pakketten Naast het zelf schrijven van webpagina's, maken ook heel wat Open source-pakketten gebruik van PHP. Hieronder vallen een aantal heel bekende namen: Drupal: CMS Joomla: CMS Wordpress: CMS Dokeos: ELO Chamilo: ELO Magento: CMS PHPBB: Forum MediaWiki: Wiki... PHP Kennismaking Virtuele webserver Op de site linux.pindanet.be staat een gratis te gebruiken virtuele webserver. Raadpleeg de informatie op de betreffende pagina om deze webserver te installeren op Windows, Linux of Mac OS X systemen. Een eerste scriptje Het tikwerk Sla alle scripts op in een oefenmap in Documenten. Maak eventueel submappen aan per hoofdstuk en geef je scripts een duidelijke naam. We vallen meteen met de deur in huis en starten Dreamweaver op. Tik in Dreamweaver de volgende code zonder nummering over: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 2 <html xmlns="http://www.w3.org/999/xhtml"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 5 <title>kennismaking</title> 6 </head> 7 <body> 8 <?php print "Hallo wereld";?> 9 </body> 0 </html> Maak in je oefenmap een nieuwe map kennismaking aan en sla dit bestand op als hallo.php. Publiceer de site. Open je browser en tik in de adresbalk: en aanschouw het resultaat. De broncode Bekijk ook eens de broncode van dit script: 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> 5 Pagina

16 3 4 <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>kennismaking</title> </head> <body> Hallo wereld</body> </html> Wat is dat allemaal? De editor We hebben gebruik gemaakt van Dreamweaver. MS Word of Wordpad slaan niet alleen de zuivere tekst op, maar ook de opmaak van je documenten. Je kan echter ook gratis, opensource editors zoals Notepad ++, Aptana, enz. gebruiken. Een volledig pakket die volledig op php-scripting gericht is, is Zend-studio van Zend, de makers van PHP. Deze editor is niet gratis, maar je kan wel een proefversie downloaden om die 30 dagen te gebruiken. In ruil voor een betaalbare som krijg je een heel handige editor die je helpt via: codehighlighting aanvullen van functies aanvullen van variabelen... De extensie Elk document waarin er PHP-code voorkomt moet de extentie.php krijgen. Doen we dit niet dan weet de webserver niet dat hij deze documenten moet doorsturen naar de PHP-parser (zie ook verder). Plaats van het PHP-script We zullen onze PHP-code altijd ergens tussen de HTML-code moeten plaatsen. Naargelang de bedoeling kan dit overal staan: vóór alle HTML-code ná alle HTML-code tussen de HTML-code Meestal komt er niet veel PHP-code meer na de HTML. Er staat wel bijna altijd PHP-code voor of tussen de HTML. Door PHP vóór je HTML te plaatsen, kun je bijvoorbeeld de titel van je HTML-pagina aanpassen of bepalen welke css-opmaak er geladen moet worden. Of kun je de afmetingen van een foto opvragen om die afmetingen te gebruiken in JavaScript om de browser-grootte aan te passen. Het MVC-model In dit model wordt gebruik gemaakt van gescheiden pagina's voor weergave en controllerlogica. We zullen dit zoveel mogelijk in deze cursus toepassen. Hierdoor blijft het eindresultaat veel overzichtelijker. De openingstags Om aan te geven dat we PHP zullen gebruiken, moeten we altijd de openingstags voor PHP plaatsen, op die manier weet de PHP-parser dat hij alles hiertussen moet verwerken. Vergeten we deze tags te plaatsen, dan wordt alles als zuivere HTML beschouwd, en dus letterlijk weergegeven, let daarvoor dus op. De standaard openingstags (en sluittags) zijn: <?php en?>. Deze mogen aan het begin van de regels staan, aan het begin en het einde, tussenin,... waar je maar wilt en deze nodig hebt. 6 Pagina

17 Het overschakelen tussen HTML-mode en PHP-mode wordt ook wel uittreden genoemd. Het eerste commando We spreken bij PHP over functies en language constructs. Beide zorgen ze ervoor dat er iets gebeurd. Dit iets is afhankelijk van de functie of de language construct. Functies zijn miniprogramma's die bepaalde bewerkingen uitvoeren. Een functie geeft altijd een bepaalde waarde terug. Later meer hierover. Een language construct wordt voornamelijk gebruikt om gegevens naar de browser te sturen, en geeft geen waarde terug. In het gebruik speelt het niet veel rol of we met een functie dan wel een language construct werken. De print hoort echter in de categorie language constructs en stuurt hetgeen na de print staat door als HTML. De meeste functies nemen de argumenten aan tussen haakjes ( ). Doordat we met tekst (strings) werken, moet deze tussen enkele ( ' ) of dubbele ( " ) aanhalingstekens staan. We kunnen dus het volgende schrijven: print print print print "hello world"; ("hello world"); ('hello world'); 'hello world'; en telkens dezelfde uitvoer bekomen. Een andere manier om hetzelfde te bekomen is gebruik te maken van de language construct echo: echo echo echo echo "hello world"; ("hello world"); ('hello world'); 'hello world'; Er zijn een aantal verschillen, die later aan bod komen. Het wordt echter aangeraden om language-constructs niet tussen ronde haakjes te plaatsen. Afsluiten van de regel In onze gewone taal sluiten we elke zin af met een punt. Als we PHP-scripts schrijven, doen we dit door gebruik te maken van een puntkomma (;). In sommige gevallen moet (mag) je deze niet gebruiken, maar later daar meer over. De puntkomma moet er echter staan omdat we al onze PHP-code ook achter elkaar mogen schrijven, maar onze parser moet natuurlijk telkens weten wat er een nieuwe opdracht is. Vergelijk bijvoorbeeld eens onderstaande voorbeelden: <?php print print print print?> "zin "zin "zin "zin <br 2<br 3<br 4<br />"; />"; />"; />"; <?php print "zin <br />"; print "zin 2<br />"; print "zin 3<br />"; print "zin 4<br />";?> Beide voorbeelden zullen dezelfde uitvoer hebben, maar het eerste voorbeeld is wel duidelijker leesbaar. Het testen van het script Als je je script wilt testen, lukt dit niet door het te openen via de Verkenner, maar ben je verplicht om dit te doen door het script te publiceren en te openen via een internetbrowser naar keuze. In de adresbalk begin je altijd met Dit is jouw eigen virtuele webserver. Alles wat er na komt zijn de submappen. Let er op: in je Verkenner wordt er gebruik gemaakt van de \ (backslash), in je browser ven de / (gewone slash). 7 Pagina

18 De broncode van de HTML-pagina Zoals je ziet, staat er in de broncode van onze HTML-pagina geen letter PHP-code meer. Deze is allemaal omgezet naar HTML-code. Als je later op zoek gaat naar fouten, moet je ook niet kijken in je browser-uitvoer, maar in de broncode van je HTML-document. Wat is er nu allemaal gebeurd... bij het opvragen van de pagina script0.php? Toen je de pagina opgevraagd hebt via je webbrowser, heeft deze de aanvraag doorgestuurd naar de webserver (die nu toevallig op jouw pc staat). De webserver ziet dat de gevraagde pagina de extensie.php heeft. In het configuratiebestand van de webserver staat beschreven, dat.php-bestanden moeten doorgestuurd worden naar de PHP-parser. Deze parser zal op zijn beurt de pagina overlopen, en overal kijken waar er PHP-openingstags staan. Alles wat tussen deze tags staat wordt door de parser verwerkt, en de parser maakt er op zijn beurt HTML-code van. Als de parser op het einde van het document komt, stuurt hij de nieuwe HTML-pagina door naar de webserver. De webserver verstuurt deze pagina naar de browser, en de bezoeker ziet nu een webpagina. De bezoeker zal dus, zelfs als hij naar de bron kijkt, enkel zuivere HTML zien. Hierdoor speelt het dus ook geen enkele rol welke browser de bezoeker gebruikt aangezien er zuivere html doorgestuurd wordt. Dit in tegenstelling tot javascript of andere client-sideprogrammeertalen. Een aantal mogelijke problemen Het kan nu zijn, dat dit bovenstaande script niet wil uitvoeren, dat je een melding krijgt dat de pagina niet toegankelijk is, of dat er gevraagd wordt om de pagina te downloaden. Misschien krijg je een compleet andere pagina te zien. We zullen de mogelijkheden eens overlopen. Pagina niet toegankelijk Dit is omdat je webserver niet opgestart is. Controleer om deze te starten, en herlees desnoods de handleiding om te zien of je niets verkeerd gedaan hebt. Controleer ook of er misschien geen 2de webserver actief is. Downloaden van de pagina De webserver weet niet wat hij met de extensie moet aanvangen, en vraagt daarom om deze te downloaden op de eigen computer (waar het in ons geval eigenlijk al staat). Controleer of je de PHP-parser wel geïnstalleerd hebt. Blanco pagina wordt weergeven Er zit waarschijnlijk een fout in je code, herzie je code op typfouten (syntaxisfouten). Dit heeft meestal te maken met een instelling die ervoor zorgt dat je fouten niet ziet. Dit is uit veiligheidsoverwegingen. De instelling waarover het gaat is error_reporting. Zie het configuratiebestand voor meer uitleg. Als deze niet ingesteld is, krijg je volgende: Parse Error Er zit een fout in je code op de regel die aangegeven wordt. Hou er wel rekening mee dat de fout ook kan zitten op een plaats vóór de aangegeven plaats, soms 0-tallen regels hoger. De parser duidt ook duidelijk aan welke fout het is. Misschien heb je een puntkomma vergeten? Of de sluittags? Controleer alle mogelijkheden, je zal zeker voorbeelden genoeg zien. Het gebruik van een goede editor zal je kans op parse errors al verkleinen. Fouten kun je op een webserver zonder ingeschakelde PHP-foutmeldingen met behulp van het volgende script toch opsporen: 8 Pagina

19 <?php //debug.php error_reporting(e_all); ini_set("display_errors", ); include("fout.php");?> Dit script schakelt de foutmeldingen in voor het script fout.php. Een voorbeeld: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 2 <html xmlns="http://www.w3.org/999/xhtml"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 5 <title>fouten opsporen</title> 6 </head> 7 <body> 8 <?php print "Geen fouten gevonden;?> 9 </body> 0 </html> Onverwachte uitvoer Er worden geen foutmeldingen weergegeven, en je krijgt een HTML-pagina te zien, echter niet hetgeen je verwacht. Waarschijnlijk heb je een verkeerde operator gebruikt, of 2 namen van variabelen door elkaar gehaald, of een structuur op de verkeerde plaats beëindigt. Dit zijn logische fouten en je parser kan je hier niet op wijzen, aangezien je structureel niets verkeerd doet. Iets uitgebreider Nog wat tikwerk We zullen het eerste script wat uitbreiden: <?php /* hier zullen we ons script aanpassen zodat we gebruik kunnen maken van variabelen. Met variabelen wordt een script eenvoudiger en we kunnen er later meer mee doen. */ $titel = "Kennismaking"; //de variabele $titel $weer_te_geven_tekst = "Hallo allemaal";?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title><?php print $titel;?></title> </head> <body> <p><?php print $weer_te_geven_tekst;?></p> </body> </html> Tik dit zonder nummering over in een nieuw document, sla op onder de naam titel.php, publiceer en vraag de pagina opnieuw op in je webbrowser (http:// /pc0/kennismaking/titel.php) en aanschouw opnieuw het resultaat. 9 Pagina

20 Bekijk ook eens de broncode: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 2 <html xmlns="http://www.w3.org/999/xhtml"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 5 <title>kennismaking</title> 6 </head> 7 <body> 8 <p>hallo allemaal</p> 9 </body> 0 </html> Hoe loopt dit nu? Commentaar In je script wordt er bij het uitvoeren geen rekening gehouden met commentaar. Dit heeft dus geen invloed op de snelheid van het parsen, of op de grootte van het uiteindelijke HTMLbestand. Ook wordt de commentaar niet doorgestuurd naar de browser van de bezoeker en dus niet getoond in de broncode. In dit stukje zien we dat er gebruik is gemaakt van 3 soorten commentaar:. lange commentaar of c-style: Deze begint met een combinatie slash-asterisk (/*) en eindigt met de combinatie asterisk-slash (*/). Deze soort commentaar kan over verschillende lijnen lopen, en wordt gebruikt voor het gebruik van langere commentaar. 2. korte commentaar of c++-style: Deze begint met een dubbele slash (//) en eindigt op het einde van de regel. Deze wordt gebruikt om kortere commentaar in te voegen. Je kan echter gerust de dubbele slash gebruiken om verschillende regels onder elkaar van commentaar te voorzien. Vergeet alleen niet om elke regel met een nieuwe // te beginnen. Hou er rekening mee dat je de afsluit-puntkomma van je code niet nà de commentaar zet. 3. Perl- of shell style: Deze laatste methode wordt niet echt courant gebruikt maar heeft het zelfde effect als de korte commentaar (//) maar de dubbele slash wordt vervangen door een hash-teken(#). Variabelen In dit script hebben we voor het eerste gebruik gemaakt van variabelen. Variabelen zijn een plaatsje in het geheugen van de server waar we een naam aan toe kennen. In dit stukje geheugen kunnen we tijdelijk gegevens stockeren. Deze gegevens kunnen veranderlijk zijn. Vandaar de naam. In dit geval hebben we aan de variabele $titel de string-waarde "ons tweede script" toegekend. Bij het uitvoeren van de printfunctie wordt de variabele $titel dan vervangen door de eigenlijke inhoud er van. Variabelen beginnen in PHP altijd met een dollarteken ($), het eerstvolgende teken van de variabele moet een letter of een underscore (_) zijn, geen cijfer. Voor de volgende tekens kun je cijfers, letters en underscores gebruiken. Verder moet je er rekening mee houden dat variabelen hoofdlettergevoelig zijn, zo is $titel niet gelijk aan $Titel of aan $TITEL, maar zijn dit drie verschillende variabelen. Een aantal geldige variabelen: $naam $vnaam $WeerTeGevenTekst $cijfer $Cijfer2 $_andere $kinjl23 0 P a g i n a

21 Sommige variabelen zijn duidelijker dan andere. Het is aan te raden om altijd voor duidelijke namen te kiezen. De mogelijke gebruikte karakters zijn dus: cijfers (behalve als eerste karakter) letters elk ASCII-karakter gaande van 27 tot 255 (zie hiervoor ASCII-tabellen) Aan variabelen kunnen verschillende types toegekend worden. In dit voorbeeld is gebruik gemaakt van strings (opeenvolging van of meerdere willekeurige karakters), maar we kunnen ook integers (gehele getallen), floats (kommagetallen), booleaanse waarden (true of false) of arrays (verzameling) gebruiken (http://be.php.net/manual/en/language.types.php). In PHP is een variabele niet gebonden aan type zoals in de meeste andere programmeertalen, maar kan deze variabele de ene keer een string en de volgende keer een integer bevatten: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>variabelen</title> </head> <body> <p><?php $variabele = "Dit is een string of tekenreeks<br />"; print $variabele; //geeft weer: Dit is een string of tekenreeks $variabele = 4; print $variabele; //geeft weer: 4?></p> </body> </html> Als we floats willen gebruiken in PHP, moet je er rekening mee houden, dat je als scheiding tussen de eenheden en de decimalen gebruik moet maken van een punt en niet van een komma, zoals wij gewend zijn. Elke opdracht uit ons script wordt ook een expressie genoemd. Elke expressie wordt afgesloten met een punt-komma. Deze expressies kunnen zowel het uitvoeren van functies, toekenningen, bewerkingen als een combinatie van beide zijn. Termen Hier volgt een kort overzicht van de verschillende termen die we in deze cursus (en bij PHP en andere programmeertalen in het algemeen) zullen gebruiken. Hier worden ze heel kort behandeld, later komen ze uitgebreider aan bod: Types: een gegeven is altijd van een bepaald type. De voornaamste types zijn string, integer, float, boolean of array. Het is ook mogelijk om een bepaald gegeven te dwingen een ander type aan te nemen. Variabele: een stukje geheugen waar een naam aan toegekend wordt, en waar een gegeven kan in bewaard worden. Een variabele begint altijd met een dollarteken ($) gevolgd door de naam van de variabele. Constante: een stukje geheugen die, eenmaal geïnitialiseerd, NIET meer van waarde kan veranderen. Een constante kan van hetzelfde type zijn als een variabele. Expressie: alles wat je schrijft in PHP is een expressie. Daarmee wordt er bedoelt dat er iets uitgevoerd wordt. Commentaar is dus GEEN expressie. Voorbeeld: $b = 5; Operatoren: een operator zorgt er voor dat je bewerkingen kunt uitvoeren met gegevens, je kan ze optellen, samenvoegen, toekennen, vermenigvuldigen,... Controlestructuren: om een andere uitvoer van je script te krijgen, kun je gebruik maken van controle structuren. Deze zorgen ervoor dat er iets uitgevoerd wordt, als er P a g i n a

22 aan bepaalde voorwaarden voldaan wordt, of net niet. Een andere soort, zijn structuren die ervoor zorgen dat een aantal expressies een aantal keer uitgevoerd kan worden. De bekendste structuren zijn: if/else, while, do...while, for,... Functie: een miniprogramma dat één of meerdere bewerkingen op gegevens kan uitvoeren. Geeft altijd een waarde terug aan het hoofdscript, waar we niet noodzakelijk iets mee moeten doen. Er zijn duizenden voorgedefinieerde functies, maar je kunt ze ook zelf maken. Deze termen zullen allen uitgebreider aan bod komen doorheen de cursus. Oefeningen Vraag en antwoord Welke extentie moet een script hebben om juist door de PHP-parser herkend te worden: Wat heb je nodig om je eigen scripts te testen: Waarom is MS Word niet geschikt als editor om scripts te maken? Op welke plaatsen in je PHP-script kun je PHP-code plaatsen? Juist of fout en verklaar?. Kladblok is een betere PHP-editor dan Dreamweaver: 2. Ik kan mijn PHP-scripts (locatie in het bestandssysteem) zetten waar ik wil: 3. De PHP-code wordt rechtstreeks door de webserver gelezen en omgezet: Haal de foute variabelen er uit: En vertel er bij wat er fout is. $variabele $variabele 2 $234 $ $abcd $**ab $AbCdEf $voornaam $Familie_naam $geboorte-datum $fout.code $dit is juist Maak een script Maak een script waarin je volgende gegevens opslaat in een variabele en deze daarna op de pagina worden weergegeven: voornaam naam straat huisnummer postcode gemeente cursus 2 P a g i n a

23 PHP Operatoren Algemeen Operatoren worden gebruikt om bepaalde zaken uit te voeren. De meest gekende en gebruikte zullen deze zijn om getallen op te tellen, om strings aan elkaar te plakken,... Andere operatoren worden gebruikt om gegevens met elkaar te vergelijken, foutmeldingen uit te schakelen, enz. Er zijn operatoren om te werken met verschillende types van gegevens. De ene operator heeft ook voorang op de andere. Voorbeelden Gemiddelde berekenen van 2 getallen Om het gemiddelde van 2 getallen te berekenen maken we gebruik van eenvoudige basiswiskunde: Tel de 2 getallen op en deel het resultaat door 2, In PHP maken we er het onderstaande van: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>operatoren</title> </head> <body> <p><?php $som = 2 + 0; $gemiddelde = $som / 2; print "Het gemiddelde is "; print $gemiddelde;?></p> </body> </html> Wat is er gebeurd? We tellen de getallen 2 en 0 bij elkaar op (+), en kennen dit toe (=) aan $som. $som delen we (/) door 2 en kennen het resultaat toe (=) aan $gemiddelde. Uiteindelijk drukken we dit gemiddelde af. In dit voorbeeld maken we gebruik van wiskundige operatoren en toekenningsoperatoren. In de praktijk zullen de getallen 2 en 0 ook aan een variabele toegekend worden. 2 stukken tekst aan elkaar kleven Stel dat we 2 stukjes tekst hebben. Deze tekst willen we toekennen aan variabele. Dit kunnen we als volgt oplossen: <p><?php $groet = "Een goede morgen"; $wens = " toegewenst."; $zin = $groet. $wens; print $zin;?></p> 3 P a g i n a

24 We maken naast de toekenningsoperator (=) gebruik van een string-operator: de concatenatie, met het punt (.) De restbepaling van een rekeningnummer Als we een rekeningnummer hebben, zijn de laatste 2 cijfers altijd een controlenummer. Dit controlenummer is altijd de rest van de deling van de eerste 0 cijfers van het rekeningnummer door 97. Ter verduidelijking: Rekeningnummer: Laatste 2 cijfers: 88 Deling van eerste 0 cijfers door 97 Enkel het gehele getal: De vermenigvuldiging van het gehele getal met 97 Het verschil tussen dit getal en de eerste 0 cijfers van het rekeningnummer Een eenvoudiger manier om dit te berekenen is de restdeling of modulus: <p><?php $rekeningnr = ; $controle_cijfer = $rekeningnr % 97; print "Het controlecijfer is ". $controle_cijfer;?></p> Met de modulus-operator bekomen we het restgedeelte van de deling van 2 getallen. Binaire wiskunde Je moet de logische AND-vergelijking maken tussen 2 binaire getallen. Dit kunnen we oplossen met: <p><?php $bin = "0000"; $bin2 = "0000"; $bin_and = $bin & $bin2; $bin_or = $bin $bin2; print "Het resultaat van de AND bewerking: ". $bin_and. ", en de OR bewerking: ". $bin_or; 3?></p> De binaire and-operator (&) en or-operator ( ) maken standaard deel uit van de mogelijke operatoren. Soorten operatoren Toekenningsoperator Dit is de meest voorkomende operator die gebruikt worden om een bepaalde waarde toe te kennen aan een variabele: <p><?php $a = 3; $b = $a + 4; $c = $c + ; $eerstestuk = "De variabelen "; $tweedestuk = "a, b en c bevatten "; // de punt-operator voegt stukken tekst samen $tekst = $eerstestuk. $tweedestuk; print $tekst. $a. ", ". $b. " en ". $c;?></p> 4 P a g i n a

25 De toekenningsoperator kan ook gebruikt worden in combinatie met andere wiskundige of string-operatoren. Zie verder. Stringoperatoren Er bestaat hier maar van, nml de "." die 2 strings samenvoegt: <p><?php $a = "Hallo "; $b = "iedereen."; $c = $a. $b; //$c bevat "Hallo iedereen" print $c;?></p> Rekenkundige operatoren Standaard operatoren Dit zijn de meest eenvoudige operatoren. Ze worden gebruikt zoals in de gewone basiswiskunde: Naam Resultaat -$a Negatie Tegengestelde van $a $a + $b Optelling Som van $a en $b $a - $b Verschil Verschil tussen $a en $b $a * $b Vermenigvuldiging Vermenigvuldiging van $a en $b $a / $b Deling Deling van $a en $b $a % $b Modulus Voorbeelden: Rest van deling van $a en $b <p><?php $var = ; $var2 = 2; $som = $var + $var2; //$som bevat de waarde 3 $quotient = 9 / $var2; //$quotient bevat de waarde 4.5 $negatie = -$var; //$negatie bevat de waarde - print "De som is ". $som. ", het quotiënt is ". $quotient. " en de negatie is ". $negatie; 55?></p> Hou er rekening mee dat het delen van 2 getallen, zelfs van 2 integers, als resultaat een float geeft. Naast de standaard rekenkundige operatoren zijn er ook nog een aantal wiskundige functies die gebuikt kunnen worden. Optel- en aftrekoperatoren Dit is een uitbreiding van de gewone rekenkundige operatoren. Ze zijn er om het optellen en aftrekken eenvoudiger te maken: Naam Resultaat ++$a Pre-increment Tel op bij $a, en geeft $a daarna weer $a++ Post-increment Geeft $a weer, en telt er daarna bij op --$a Pre-decrement Trekt af van $a, en geeft dan $a weer $a-post-decrement Een aantal voorbeelden: Geeft $a weer, en trekt er daarna van af 56 <p><?php 5 P a g i n a

26 57 $a = 5; 58 print "Eerst weergeven: ". $a++. ", daarna bijtellen: "; //geeft 5 weer, er wordt bij $a opgeteld 59 print $a; //geeft 6 weer 60 print " en bijtellen en weergeven: ". ++$a; //telt op bij $a, geeft daarna 7 weer 6?></p> Binaire wiskunde Deze heb je minder nodig, maar soms is het nodig om met binaire getallen te werken. Let wel op dat deze niet gelijk zijn aan logische operatoren: Naam Resultaat $a & $b And Bits die in zowel $a als in $b op staan worden $a $b Or Bits die in $a en / of in $b op staan worden $a ^ $b Xor Bits die in $a óf in $b op staan worden, niet als ze beide op staan ~ $a Not Bits worden geïnverteerd $a << $b Schuift de bits van $a het aantal stappen dat door $b Shift left wordt aangegeven, op naar links elke stap betekend vermenigvuldigen met 2 Schuift de bits van $a het aantal stappen dat door $b wordt aangegeven, op naar rechts elke stap betekend delen door 2 Hierbij kan volgend eenvoudig tabelletje helpen: $a >> $b Shift right $a operator $b $resultaat 0 & & 0 & 0 0 & ^ ^ ^ 0 ^ 0 0 ~ ~ Een aantal voorbeelden: <p><?php $a = "00"; $b = "00"; print "And bewerking: "; print $a & $b; //drukt af: 000 print "<br />Or bewerking: "; print $a $b; //drukt af: 0?></p> 6 P a g i n a

27 Gecombineerde operatoren We kunnen ook gecombineerde operatoren gebruiken, dit zijn operatoren die een toekenning uitvoeren, en tegelijkertijd een wiskundige of stringoperator toepassen: <p><?php $a = 3; $a += 4; //bijtellen $tekst = "Bewerking "; $tweedestuk = "tijdens toekenning: "; $tekst.= $tweedestuk; //toevoegen $tekst.= $a; print $tekst;?></p> Bovenstaande zal er voor zorgen dat: de waarde 3 toegekend wordt aan de variabele $a dat de variabele $a zal verhoogd worden met 4 (+=) de strings "Bewerking " en "tijdens toekenning: " zullen toegekend worden aan respectievelijk $tekst en $tweedestuk. Hierna wordt de variabele $tweedestuk bij de variabele $tekst gevoegd, zodat $tekst de string "Bewerking tijdens toekenning: " bevat. Vergelijkingsoperatoren Deze operatoren, niet te verwarren met toewijzingsoperatoren, hebben we voornamelijk nodig als we verschillende gegevens met elkaar willen vergelijken. Denk hierbij aan het evalueren van gegevens binnen een if-structuur: Operator Naam Resultaat $a == $b Equal Waar als $a gelijk is aan $b $a === $b Identical Waar als $a gelijk is aan $b én van het zelfde type $a!= $b Not equal Waar als $a niet gelijk is aan $b $a <> $b Not equal Waar als $a niet gelijk is aan $b $a!== $b Not identical Waar als $a niet gelijk is aan $b of ze zijn van een verschillend type $a < $b Less than Waar als $a kleiner is dan $b $a > $b Greater than Waar als $a groter is dan $b $a <= $b Less than or equal to Waar als $a kleiner of gelijk is aan $b $a >= $b Greater than or Waar als $a groter of gelijk is aan $b equal to Voorbeeldjes: <p><?php $integer = 2; $float = 2.0; if ($integer == $float) print "integer is gelijk aan float"; if ($integer === $float) print "integer is gelijk aan float en van hetzelfde type"; 84?></p> Logische operatoren Deze logische operatoren gebruiken we voornamelijk bij het evalueren van 2 statements bij bijvoorbeeld een if-structuur. 7 P a g i n a

28 Operator Naam Resultaat $a and $b And Waar als $a en $b waar zijn $a or $b Or Waar als $a of $b waar zijn $a xor $b Xor Waar als $a of $b waar zijn, maar niet beide Not Waar als $a niet waar is And Waar als $a en $b waar zijn! $a $a && $b $a $b Or Waar als $a of $b waar zijn Er worden voor "and" en "or" verschillende operatoren gebruikt, dit heeft te maken met de voorrang ervan, zie verder. Voorbeeld: <p><?php $a = 3; $b = "vier"; if ($a and $b){ print "3 and vier is waar<br />"; $b = FALSE; if ($a or $b){ print "3 or FALSE is waar<br />"; if ($a and $b){ print "3 and FALSE is waar<br />"; $a = "3"; $b = "0"; if (($a >= 0) AND ($b!= 0)){ print "Het quotiënt is ". ($a / $b);?></p> Foutcontrole-operatoren PHP kent maar dergelijke Als deze operator voorafgaat aan een expressie, worden eventuele foutmeldingen onderdrukt, en gaat het programma verder met uitvoeren. Voorbeeldje: /* BEDOELDE FOUT */ $my_file ('niet_bestaand_bestand') or die ("er is een fout opgetreden ); Indien voorgaande code niet zou voorafgegaan worden door zou je telkens een standaardfoutmelding krijgen. De gewone foutmelding wordt altijd opgeslagen in de variabele $php_errormsg. Array-operatoren Operator Naam Resultaat $a + $b Union Vereniging van $a en $b. $a == $b Equality Waar als $a en $b dezelfde elementen bevatten $a === $b Identity Waar als $a en $b dezelfde elementen bevatten, in dezelfde volgorde $a!= $b Inequality Waar als $a niet gelijk is aan $b $a <> $b Inequality Waar als $a niet gelijk is aan $b $a!== $b Non-identity Waar als $a niet identiek is aan $b 8 P a g i n a

29 Met de +-operator worden de elementen van de rechtse array toegevoegd aan die van de linkse, waarbij dubbele indexes NIET overschreven worden. Voorrang van operatoren Niet alle operatoren hebben dezelfde voorrang zo is bijvoorbeeld * 4 = 4, en niet gelijk aan 20. We kunnen de voorrang wijzigen door gebruik te maken van haakjes: (2 + 3) * 4 = 20. Volgende tabel geeft de voorrang weer van de operatoren, waarbij de bovenste voorrang hebben op degene er onder: Associativiteit Operator non-associative new rechts [ non-associative ++ -non-associative! ~ - (int) (float) (string) (array) links */% links +-. links << >> non-associative < <= > >= non-associative ==!= ===! links & links ^ links links && links links?: rechts = += -= *= /=.= %= &= = ^= <<= >> links and links xor links or links, Associativiteit betekend de manier waarop de gegevens geëvalueerd worden. Linkse associativiteit wil zeggen dat de gegevens van links naar rechts bekeken worden. Oefeningen Script Bepaal de waarde van $x, uit het hoofd. Neem daarna de scripts over en kijk wat de uitkomst is: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>hoofdrekenen</title> </head> <body> <h>hoofdrekenen</h> <?php 9 P a g i n a

30 $a = 5; $b = 6; print $x = $a + $b; // $x =... print "<br />"; print $x = $a * 2; // $x =... print "<br />"; print $x = $a++; // $x =... print "<br />"; $a = 5; print $x = ++$a; // $x =... print "<br />"; $a = 5; print $x = 2 * $b + $a; // $x =... print "<br />"; print $x = 2 * ($b + $a); // $x =... print "<br />"; print $x = $b / $a; // $x =... print "<br />"; print $x = $b % $a; // $x =... print "<br />"; print $x = $a + $b % 4 * 3; // $x =... print "<br />"; $kreet = "Hiep "; $kreet2 = "Hoera"; print $kreet = $kreet. $kreet; // $kreet =... print "<br />"; print $kreet.= $kreet2; // $kreet =...?> </body> </html> PHP Variabelen Algemeen Zoals eerder aangehaald, worden variabelen beschouwd als een naam die gebruikt wordt om tijdelijk gegevens in op te slaan. In feite wordt er in het werkgeheugen van de server een stukje geheugen gereserveerd waar je een waarde in kan plaatsen. Dit werkgeheugen wordt dan aangeduid door de variabele. In tegenstelling tot de meeste andere programmeertalen, moet je bij PHP de variabelen niet op voorhand declareren vóór je ze kunt gebruiken én kunnen ze binnen script verschillende types bevatten. Naast variabelen kun je ook gebruik maken van constanten, die een vaste waarde blijven behouden in je script. Voorbeelden Wijzigingen inhoud Als we werken met gegevens, dan zullen deze altijd verschillend zijn van situatie tot situatie. Willen we bijvoorbeeld berekenen wat het netto-jaarloon is van de bezoeker, dan vragen we hem naar zijn maand-loon, en vermenigvuldigen we dit met 2. Aangezien het loon van elke bezoeker verschillend zal zijn zullen ook de gegevens waarmee we werken altijd verschillend zijn. 20 P a g i n a

31 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>variabelen</title> </head> <body> <p>het jaarloon bedraagt <?php $maandloon = 234; $jaarloon = $maandloon * 2; print $jaarloon;?></p> </body> </html> Wat er wel vast ligt, dat is het aantal maanden. Dit veranderd niet in ons script, maar stel dat het er toch ooit van komt, dan kan het handig zijn om dit snel aan te passen. Het aantal maanden kunnen we dan vast definiëren in een constante. Gegevens die niet veranderen Willen we bijvoorbeeld een euro-calculator maken, om van Euro om te rekenen naar de oude geliefde Belgische Frank, dan blijft de wisselkoers van de Euro tegenover de BF vast. Tenzij dit op een bepaalde dag zou veranderen: <p>in Belgische frank <?php define ("EURO", " "); $in_bf = $jaarloon * EURO; print $in_bf;?></p> Controle correcte gegevens Vooraleer we dit loon willen weergeven, zullen we eerst een test doen. Het resultaat van de test bepaalt hoe we het loon weergeven: <p>afgerond jaarloon in Belgische frank <?php if (is_float($in_bf)) { print (int)$in_bf; else { print $in_bf;?></p> Naamgeving Namen van variabelen beginnen ALTIJD met een dollarteken ($), gevolgd door van volgende karakters: letters; karakters met een ASCII-waarde tussen de 28 en de 255 (die meestal speciale karakters zijn zoals é, ô, ñ, µ,...), deze reeks wordt echter (bijna) nooit gebruikt; underscores. Als derde karakter en volgende mag je van volgende gebruiken: 2 P a g i n a

32 letters; karakters met een ASCII-waarde tussen de 27 en de 255; underscores; cijfers. Hou er dus rekening mee dat cijfers nooit net na het dollarteken mogen komen. Ook punten, koppeltekens en spaties zijn niet toegestaan, op geen enkele plaats. Maak vooral gebruik van duidelijke namen, met een betekenis. Een variabele als $_inmö98 mag dan wel ge(we)ldig zijn, duidelijk is ze zeker niet. Maak daarom bijvoorbeeld gebruik van onderstaande voorbeelden: $prijs $PrijsMetBTW $prijsmetbtw $prijs_zonder_btw Voor namen die bestaan uit meerdere woorden, wordt de voorkeur gegeven aan het derde voorbeeld, waarbij de eerste letter een kleine letter is en vervolgens de eerste letter van elk woord een hoofdletter. Hou er ook rekening mee dat hoofdletters en kleine letters wel degelijk een verschil maken in PHP. Zo is er een verschil tussen $VOORNAAM, $voornaam en $VoorNaam! Gebruik van dubbele en enkele aanhalingstekens Bij het gebruik van de print- en echo-functies, moeten we rekening houden met het verschill tussen dubbele en enkele aanhalingstekens: <p><?php $lidwoord = 'Een'; $begroeting = "goede middag"; print "$lidwoord $begroeting"; //drukt af: Een goede middag print ' ($lidwoord $begroeting).'; //drukt af: ($lidwoord $begroeting). 33?></p> Bij het gebruik van echo heb je hetzelfde. Bij het gebruik van dubbele aanhalingstekens, wordt de inhoud van de variabele weergegeven, bij het gebruik van enkele aanhalingstekens, wordt de naam van de variabele weergegeven. De inhoud tussen de enkele aanhalingstekens wordt dus niet geparsed. Voor de rest is het gelijk welke soort we gebruiken, als je er maar voor zorgt dat je je toekenning afsluit met hetzelfde soort, als degene waarmee je begonnen bent. Soms lijkt het eenvoudiger om over te springen tussen de 2. Als je bijvoorbeeld dubbele aanhalingstekens wilt gebruiken in je string, dan kun je de string beginnen en afsluiten met enkele aanhalingstekens: Dit kan bijvoorbeeld handig zijn om parameters op te geven voor HTML-code: 34 <?php print '<p>en toen zei hij: "De kat bijt, maar de hond blaft."</p>';?> Wat als je nu binnen in je string beide wilt gebruiken? Dan zullen we gebruik moeten maken van escapetekens: 35 <?php print "<p>en toen zei hij: \"De kat bijt, maar de hond blaft.\"</p>";?> Zo kunnen we onbeperkt gebruik maken van enkele en dubbele aanhalingstekens. 22 P a g i n a

33 Deze manier wordt ook meer gebruikt dan het mixen van enkele en dubbele tekens. Voornamelijk omdat je code veel consistenter blijft. Concatenatie In het volgende hoofdstuk zullen we ook de concatenatie-operator zien. Dit is gewoon het aan elkaar kleven van 2 verschillende strings. We kunnen dit ook gebruiken om een letterlijke string tussen enkele aanhalingstekens en een variabele aan elkaar te kleven. Dit doen we door middel van de punt-operator (.). Een voorbeeldje: 36 <p><?php print 'Wij wensen u '. $begroeting;?></p> Meer escapen Naast het escapeteken voor de dubbele aanhalingsteken bestaan er nog een aantal: Te bereiken teken Gebruikte escapecode " \" ' \' \ \\ Tabulator \t Nieuwe regel \n Carriage return \r Hou er wel rekening mee dat deze karakters weergegeven worden in de HTML-code maar dat bij het verwerken van de HTML-code door de browser, er met deze geen rekening gehouden wordt. Deze worden wel vaak gebruikt om de broncode duidelijker te houden: 37 <p><?php 38 print "Bekijk deze tekst in de broncode.<br />"; 39 print "Deze regel staat in de broncode...<br />\n"; 40 print "En deze regel staat in de broncode..."; 4?></p> Nieuwe regels In PHP kun je ook nieuwe regels opnemen in je variabele <p><?php $bon = "Tegen inlevering van deze bon krijgt u 5.- korting op het gehele assortiment!"; print $bon;?></p> Heredoc Om langere stukken tekst toe te kennen aan een variabele, kunnen we ook de heredoc-syntax gebruiken. Om een heredoc te gebruiken, beginnen we de string met <<<, gevolgd door een unieke code, die zelf gekozen wordt. De heredoc wordt afgesloten door exact dezelfde unieke code te herhalen, maar moet beginnen op de eerste kolom van de regel. De afsluitcode mag enkel bestaan uit letters, cijfers en underscores. De heredoc-syntax gedraagt zich net als de dubbele aanhalingstekens, maar als je dubbele aanhalingstekens gebruikt, binnen de toekenning, moeten deze NIET ge-escaped worden: <p><?php $tekst = <<<EOD Bekijk de volgende tekst in de "broncode".<br /> $bon 23 P a g i n a

34 5 EOD; 52 print $tekst; 53?></p> Verwarrende variabelen In sommige gevallen zul je een waarde, die in een variabele bewaard wordt, direct aan een volgend stuk tekst willen plakken. <p><?php $breedteinmeter = 2; print "Breedte in centimeter: $breedteinmeter00"; // geeft weer: Breedte in centimeter:?></p> Dit komt omdat de parser de variabele $breedteinmeter00 niet kent, en er dus gewoon een lege string plaatst. Om dit probleem op te lossen kunnen we de variabele tussen accolades plaatsen: 54 <p><?php 55 $breedteinmeter = 2; 56 print "Breedte in centimeter: {$breedteinmeter00"; // geeft weer: Breedte in centimeter: ?></p> De parser weet zo precies waar de variabele begint en eindigt. Bij onduidelijke variabelen moet je deze altijd tussen accolades plaatsen. Als je de accolades wilt weergeven zul je deze moeten escapen (enkel de eerste vervangen door \{). Bij het gebruik van accolades zonder variabelen, moet je deze niet escapen. Als je een afkeer hebt van accolades kun je het ook oplossen als volgt: print "Breedte in centimeter: ". $breedteinmeter. "00"; Toch verdient het gebruik van accolades de voorkeur, omdat dit, weeral, leesbaarder blijft. Verschillende types Een variabele kan één van volgende types zijn: Boolean Integer Float of double String Array Object Resource NULL Voorbeelden Code Waarde van de variabele $var_int = 6; Het gehele getal 6 $var_float = 0.5; Het kommagetal 0,5 $var_float_2 =.5e3; Het getal 500 $var_string = "dit is een string"; Een tekst met de opgegeven waarde $var_array = array (,2,3,4); Een verzameling met de elementen,2,3,4 $var_null = null; Een lege variabele $var_bool = true; Een geldige waarde 24 P a g i n a

35 Boolean Een boolean kan slechts 2 waarden aannemen: TRUE of FALSE. Bij het omzetten van een variabele naar een boolean zijn alle volgende FALSE, alle andere komen overeen met een TRUE: integere waarde 0 float waarde 0.0 lege string "" of een string met als waarde "0" array zonder enig element object zonder enig element NULL Booleans worden gebruikt voor het testen van bepaalde zaken. Deze tests worden gebruikt om na te gaan of bepaalde zaken moeten uitgevoerd worden. Een voorbeeld: als iemand nog niet ingelogd is, moet hij een aanmeldingsscherm krijgen, en als hij wel aangemeld is, moet hij begroet worden met zijn persoonlijke naam. Integer Dit zijn eenvoudige gehele getallen, positief of negatief. De minimum- en maximumwaarden zijn afhankelijk van het besturingssysteem en de processor van de server, maar gaan minstens van -2 miljard tot +2 miljard (-23/2 tot +23/2). Heb je een 64-bits-cpu dan gaat dit bereik veel verder. Je kan gebruik maken van decimale, octale en hexadecimale getallen. Om aan te duiden dat je met octale getallen werkt, laat je het getal voorafgaan door een 0 (nul) (voorbeeld: 034) en om met hex-getallen te werken laat je het getal voorafgaan door een 0x (nul-x) (voorbeeld: 0xA). Als je een integer opgeeft die groter of kleiner is dan de minimum- of maximumwaarden wordt deze automatisch omgezet naar een float. Float In PHP wordt de term float gebruikt om aan te geven dat we met een kommagetal werken, positief of negatief. Er wordt gebruik gemaakt van 64 bits om het getal in op te slaan, hierdoor krijgen we getallen gaande van -264/2 tot +264/2. Hou er rekening mee dat floating point getallen, door de afronding, niet gebruikt mogen worden om te vergelijken. 0.7 kan opgeslagen worden als , maar ook als Vertrouw dus nooit vergelijkingen tussen floats. Floats worden ook soms als reals of doubles aangeduid. Strings Een string (tekenreeks) is eenvoudigweg een reeks karakters. Strings hebben geen echte grens, en worden alleen beperkt door de instellingen van het php.ini-bestand. Strings kunnen aan een variabele worden toegewezen door het gebruik van zowel dubbele, als enkele aanhalingstekens of door gebruik te maken van de speciale heredoc-syntax. Deze laatste wordt vaak gebruikt bij lange stukken tekst. Ook enkel karakter wordt gezien als een string. NULL Null-types kunnen slechts waarde bevatten, namelijk de waarde NULL. Deze speciale waarde betekent eigenlijk niets of inhoudloos. Ze wordt vaak gebruikt om de inhoud van een variabele te vernietigen. 25 P a g i n a

36 Arrays Dit is een gemengd type die gegevens van verschillende types kan bevatten. Over arrays zien we later meer. Objecten Objecten zijn een verzameling van gegevens (zoals array's) maar bevatten ook acties of methodes. Resources Dit type is bedoeld om een verwijzing naar een bestand of een database-koppeling te bevatten. We komen deze later in deze cursus nog tegen. Omzetten van type of casting Zelf omzetten In sommige gevallen is het nodig om zelf het type van een variabele aan te passen naar een ander type. Dit doen we door de naam van de variabele (of een letterlijke waarde) te laten voorafgaan door het type dat we wensen: 58 <p><?php print "De integer \$werkgeheugen wordt als boolean ". (bool)$werkgeheugen;?></p> De mogelijkheden zijn: (integer) of (int) (bool) of (boolean) (float), (double) of (real) (string) (array) (object) (unset) unset wordt meestal gebruikt als functie. Meer hierover later. Automatische conversie van types Zelf omzetten is in de meeste gevallen zelfs niet nodig. PHP zal zelf het nodige type bepalen en dit zo nodig aanpassen als dit nodig blijkt te zijn: 59 <p><?php 60 print "\"00\" + 5 = ". $var = "00" + 5; //$var is een integer (5) 6 print "<br />\"00\" = ". $var = "00" + 5.0; //$var is een float (5.0) 62 print "<br />8. \" meter\" = ". $var = 8. " meter"; //$var is een string ("8 meter") 63 print "<br />8 + \" meter\" = ". $var = 8 + " meter"; //$var is een integer (8) 64 print "<br />\"7 zotten zwemmen\" + 3 = ". $var = "7 zotten zwemmen" + 3; //$var is een integer (0) Ook verandert het type van de variabele naar gelang de bewerkingen die er op uitgevoerd worden: 65 $var = ""; //$var is een string 66 print "<br />\"\" + 3 = ". $var = $var + 3; //$var wordt een integer 67 print "<br />\$var / 3 = ". $var = $var / 3; //$var wordt een float 26 P a g i n a

37 68?></p> Bij het omzetten kun je het resultaat bepalen met onderstaande tabel: (int)$var (bool)$var (string)$var (float)$var NULL 0 False True True '' False 0 False '0' False '0' True '3.8' 3.8 '0' 0 False '0' True '0' 0 '8 meter' 8 True '8 meter' 8 True 'testbericht' 0 'testbericht' 0 0 Controleren van het type Doordat een variabele elk type kan zijn, kan het handig zijn om te weten welk type precies. Hiervoor hebben we een aantal mogelijke functies: boolean is_int(mixed variabele) boolean is_float(mixed variabele) boolean is_string(mixed variabele) boolean is_array(mixed variabele) Deze functie omschrijving lees je als volgt: boolean is_array(mixed variabele) boolean --> het type van het resultaat dat weergegeven wordt door de functie is_array --> de naam van de functie mixed variabele --> het type de parameter(s) die aan de functie doorgegeven worden Deze functies leveren een TRUE op, als de aangeleverde variabele van het aangegeven type is, respectievelijk integer, float, string en array. Deze TRUE kan gebruikt worden om een test uit te voeren: 69 <p><?php 70 $var = 0; 7 if (is_float($var)) { // $var is een int, er wordt dus niets weergegeven 72 print "De variabele \$var is een float."; 73 74?></p> var_dump() is een functie die rechtstreeks het type afdrukt, gettype() levert een string op, en moeten we laten weergeven met de print-functie: <p><?php $welkom = "Hallo allemaal"; var_dump($welkom); //drukt af: string(4) "Hallo allemaal" print gettype($welkom); //drukt af: string?></p> Om in een script te testen van welk type een variabele is, moet je gebruik maken van de is_*()-functies en niet van de gettype()-functie omdat de gettype()-functie soms onverwachte resultaten kan opleveren. Zo leveren sommige PHP-versies de naam float voor een kommagetal, terwijl andere real gebruiken. 27 P a g i n a

38 Gelijkheid Voor het toekennen van een waarde aan een variabele hebben we het gelijkheidssteken gebruikt. Stel dat we 2 variabelen willen vergelijken: <?php print "<p>"; $var = 3; $var2 = 4; if ($var = $var2){ print "\$var en \$var2 zijn gelijk.<br />";?> Dit zal niet het verwachte resultaat opleveren, want in de vergelijking, wordt aan $var, de waarde van $var2 toegekend, waardoor tussen de haakjes gewoon een toekenning komt te staan, en deze levert altijd de waarde TRUE op. Op het scherm zullen we dus verkrijgen dat "$var en $var2 zijn gelijk.". Om een vergelijking uit te voeren moeten we hiervoor een ander symbool gebruiken: de dubbele gelijkheidstekens (==) <?php print "<p>"; $var = 3; $var2 = 4; if ($var == $var2){ print "3 en 4 zijn gelijk.<br />";?> Deze melding zal niet afgedrukt worden, omdat we gebruik maken van de juiste vergelijkingsoperatoren. Op een gelijkaardige manier kunnen we ook de ongelijkheid testen: <?php $var = 3; $var2 = 4; if ($var!= $var2){ print "3 en 4 zijn niet gelijk.<br />";?> We kunnen bijvoorbeeld ook het volgende testen: <?php $var = "0"; $var2 = 0; if ($var == $var2){ print "\"0\" en 0 zijn gelijk.<br />";?> Deze vergelijking zal waar zijn, maar toch zijn $var en $var2 niet helemaal gelijk. De eerste is namelijk een string, de tweede een integer. Om ook de types te controleren gebruiken we driedubbele gelijkheidstekens (===) <?php if ($var === $var2){ print "\"0\" en 0 zijn identiek.<br />"; if ($var!== $var2){ print "\"0\" en 0 zijn niet identiek.<br />";?></p> Deze zal dus op ons scherm ""0" en 0 zijn niet identiek." afdrukken. Testen van variabelen Soms kan het nuttig zijn, om te controleren of een bepaalde variabele al bestaat of niet, of als er al een waarde is aan toegekend. Dit doen we met: 28 P a g i n a

39 boolean isset(mixed var); boolean empty(mixed var); Met isset() controleren we of een variabelen al aangemaakt is of niet, en levert een TRUE op als deze bestaat. empty() controleert of de waarde gelijk is aan 0, FALSE, NULL of een lege string en levert een TRUE op als dit zo is. Voorbeeld: <p><?php $var = NULL; if (isset($var)){ print "NULL bestaat.<br />"; //drukt niets af $var = 0; if (isset($var)) { print "0 bestaat.<br />"; //drukt wel af if (empty($var)) { print "0 is leeg.<br />"; //drukt wel af $var = "test"; if (isset($var)) { print "test bestaat.<br />"; //drukt wel af if (empty($var)) { print "test is leeg.<br />"; //drukt niet af?></p> Een variabele wordt altijd vernietigd op het einde van elk script, maar soms kan het nuttig, aangenaam, veilig, leuk zijn om deze toch manueel te vernietigen met: unset (mixed var) Voorbeelden: <p><?php $fout = true; if (isset($fout)) { print "Voor het uitvoeren van unset.<br />"; //drukt af unset($fout); if (isset($fout)) { print "Na het uitvoeren van unset.<br />"; //drukt niets af $var = 0; if ($var > 2) { $fout = true; if (isset($fout)) { print "De variabele is groter dan 2!";?></p> Constanten Deze zijn heel goed te vergelijken met variabelen, maar met dit verschil dat de inhoud ervan niet kan gewijzigd worden gedurende de uitvoering van het script. Ook de toewijzing is iets anders, we gebruiken hiervoor namelijk het kernwoord define: 29 P a g i n a

40 <p><?php define ("GEBRUIKERSNAAM", "Tim Brouckaert"); print GEBRUIKERSNAAM;?></p> Ook moeten we deze niet laten voorafgaan door het dollarteken en meestal gebruikt men hoofdletters voor constanten, hoewel dit niet verplicht is. Naast eigen constanten zijn er ook een aantal voorgedefinieerde constanten zoals PHP_VERSION en PHP_OS. Een overzicht van de voorgedefinieerde constanten vindt je op Oefeningen Haal de fouten er uit $var 2 = 3; print "Dit is een variabele: $var 2' //drukt iets af; if "$var 2 = 2" print "de variabele $var 2 is gelijk aan 2" Het project van deze cursus: Webshop Voor de gegevens in de pagina's zullen we variabelen gebruiken. Hierdoor wordt het onderhoud van de pagina's een stuk eenvoudiger. Je moet niet telkens in de code gaan opzoeken waar het item zich bevindt. Een volgend voordeel is dat we onze code veel eenvoudiger kunnen maken. Én dat we ook flexibeler kunnen werken met de bron van onze gegevens én het aantal gegevens. Maak in Dreamweaver in uw oefensite een map aan voor de Webshop (vb: webshop). Maak de PHP pagina met de naam index.php met de volgende inhoud aan: <?php $item = "Dreamweaver Deel "; $item2 = "Dreamweaver Deel 2"; $item3 = "JavaScript"; $item4 = "PHP"; $item5 = "Dreamweaver Eindwerk";?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>snt Webshop Informatica</title> </head> <body> <h>snt Webshop informatica</h> <table border="0"> <tr> <th>cursus</th> <th>inschrijven</th> </tr> <tr> 30 P a g i n a

41 <td><?php print $item;?></td> <td><a $item;?>">inschrijven</a></td> </tr> <tr> <td><?php print $item2;?></td> <td><a $item2;?>">inschrijven</a></td> </tr> <tr> <td><?php print $item3;?></td> <td><a $item3;?>">inschrijven</a></td> </tr> <tr> <td><?php print $item4;?></td> <td><a $item4;?>">inschrijven</a></td> </tr> <tr> <td><?php print $item5;?></td> <td><a $item5;?>">inschrijven</a></td> </tr> </table> </body> </html> <?php print <?php print <?php print <?php print <?php print Je hebt nu een HTML pagina waarin er telkens naar de php-mode overgegaan wordt. Als de parser deze pagina binnenkrijgt, dan gaat hij eerst op zoek naar alle php-tags en zal hetgeen er tussen staat, uitvoeren en omvormen naar zuivere HTML. De browser die deze pagina opvraagt, zal in de broncode enkel nog HTML code zien staan. Ronde-tijden Maak een programma dat uit drie ronde-tijden van bijvoorbeeld schaatsen de totale tijd en het gemiddelde uitrekent en afdrukt. Dat zou je kunnen aanpakken door als volgt te beginnen: $ronde_=46; $ronde_2=43; $ronde_3=52; en dan na het maken van een sommetje het volgende af te drukken: Totale tijd over 3 ronden is 4 seconden Het gemiddelde was 47 seconden Ronde-tijden in een tabel Pas het vorige script aan zodat de ronde-tijden in een tabel staan. 3 P a g i n a

42 De HTML broncode voor een tabel ziet er als volgt uit: Het resultaat van het script ziet er zo uit: <table border=""> <tr> <th>ronde</th> <th></th> <th>2</th> <th>3</th> </tr> <tr> <td>nederland</td> <td></td> <td></td> <td></td> </tr> </table> Types Maak een tabel waarbij de eerste kolom de letterlijke waarde van de variabele $var bevat. In de tweede kolom bepaal je met behulp van PHP het type van $var. In de derde kolom geef je met behulp van PHP de inhoud van $var weer. Vul aan de hand van dit script onderstaande tabel in. $var Type Weergave 0 "5" Tekst "nog meer tekst" "3 konijnen" 5 + "3 konijnen" "5 + 3 konijnen" 5. "3 konijnen" Constanten Maak een script, waarmee je aan de hand van de voorgedefinieerde constanten, de naam van het script kan afdrukken, welke PHP-versie je gebruikt en welk OS je gebruikt. Het resultaat: Dit script (/srv/www/htdocs/pc0/variabelen/constanten.php) wordt uitgevoerd op PHP versie onder Linux. 32 P a g i n a

43 Don Quichot Maak een script waarin je drie variabelen van het type string definieert. Maak gebruik van de heredoc-syntax. Deze variabelen plaats helemaal bovenaan (nog voor de start van de HTML code). Geef de volledige tekst weer. Neem als ste variabele de tekst: Door het lezen van te veel ridderromans is de hidalgo Don Quichot zijn verstand kwijtgeraakt. Denkend dat hij zelf een ridder is, verlaat hij zijn huis en begint een dwaaltocht over de wegen en het platteland van Spanje, op zoek naar avonturen. Als doel heeft hij voor ogen het rechtzetten van alle soorten onrecht, om door deze goede daden beroemd te worden. De 2de variabele wordt: Op zijn trektocht wordt Don Quichot vergezeld door zijn buurman en dienaar Sancho Panza. Sancho is een kleine boer, analfabeet maar niet dom, en heeft eten en drinken als zijn belangrijkste interesses. Hoewel Sancho weet dat z'n meester niet helemaal goed bij z'n hoofd is, volgt hij hem, want zijn zwakheid voor de aardse geneugten maakt dat hij gelooft in de grote beloning die Don Quichot hem in het vooruitzicht stelt. De 3de variabele wordt: Dat Don Quichot behoorlijk in de war is blijkt als hij herbergen aanziet voor kastelen, windmolens voor reuzen, een hoertje voor een prinses, een kudde schapen voor een leger... Maar zijn waanideeën stuiten steevast op de nuchterheid, de voorzichtigheid, en de spreekwoorden van Sancho. Deze botsing tussen de ideale en fictieve wereld van Don Quichot en de echte en biologische wereld van Sancho is een hoofdthema van het boek, en meteen ook de bron van een groot deel van zijn humor. Punten Maak een tabel waarin de resultaten van leerlingen worden bijgehouden. Zowel de namen als de resultaten van de leerlingen worden in variabelen bijgehouden. Deze variabelen plaats je helemaal bovenaan (nog voor de start van de HTML code). Bereken in de twee laatste kolommen het totaal en het behaalde percentage. Het percentage moet als integer weergegeven worden. Het resultaat wordt: Samengestelde woorden Maak een script waarmee je woorden kunt samenstellen aan de hand van basiswoorden in variabelen. Het script begint met het definiëren van de variabelen. Daarna plaats je met behulp van de heredoc-syntax en de variabelen de volledige htmlcode tussen de body tags samen. 2 3 <?php $woord = "school"; $woord2 = "politie"; 33 P a g i n a

44 $woord3 = "oefen"; $woord4 = "kost"; $htmlcode = <<<EOD <h>samengestelde woorden</h> De rest van de code vul je zelf aan. Het resultaat wordt: PHP Formulierverwerking Algemeen Het leuke aan PHP is dat we gebruik kunnen maken van dynamische pagina's. Dit zijn pagina's waarvan de inhoud bepaald wordt door een keuze of invoer van de gebruiker. Zo kun je een bezoeker vragen om zijn naam op te geven, waarna de bezoeker op de volgende pagina('s) wordt aangesproken met zijn eigen naam. Om de bezoeker zijn naam te vragen hebben we nood aan een invoermethode. In webpagina s maken we daarom gebruik van formulieren. Deze zijn ook de basis voor het verwerken van mailings, beveiligde webpagina s, weblogs,... We kunnen met 2 verschillende pagina's werken: met het formulier zelf er op (zuiver HTML, eventueel gemengd met PHP, die we kunnen gebruiken om foutmeldingen weer te geven) en waarin er met de gegevens gewerkt wordt. Een andere manier om gegevens te versturen, is door een parameter in de url te verwerken. Voorbeelden Je wilt een pagina maken, waarin er gevraagd wordt naar de naam van de gebruiker, deze naam wordt op de volgende pagina gebruikt voor een vriendelijke groet. Het formulier formulier.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 2 <html xmlns="http://www.w3.org/999/xhtml"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 5 <title>post formulier</title> 6 </head> 7 <body> 8 <form action="verwerk.php" method="post"> 9 <p>uw naam: <input name="naam" type="text" /> 0 <input type="submit" value="ok" /></p> </form> 34 P a g i n a

45 2 </body> 3 </html> en de pagina verwerk.php: 2 <?php $naam = $_POST['naam'];?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 3 <html xmlns="http://www.w3.org/999/xhtml"> 4 <head> 5 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 6 <title>post verwerken</title> 7 </head> 8 <body> 9 <p>hallo <?php print $naam;?></p> 0 </body> </html> Je wilt een gebruiker op een link laten klikken waarmee de achtergrondkleur van zijn pagina bepaald wordt: De pagina kleur.php: <?php $kleur = "ffffff"; // standaard achtergrondkleur if (isset($_get['kleur'])) { $kleur = $_GET['kleur'];?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>kleur kiezen</title> </head> <body style="background-color: #<?php print $kleur;?>;"> <p>klik op uw favoriete achtergrondkleur: <a href="kleur.php?kleur=ffff00">geel</a>, <a href="kleur.php?kleur=00ff00">groen</a>, <a href="kleur.php?kleur=00ffff">cyaan</a>.</p> <p>de kleurcode van de achtergondkleur is #<?php print $kleur;? >.</p> </body> </html> Werking van HTTP: GET en POST Het HTTP-protocol is in principe heel eenvoudig: de browser verstuurt een verzoek naar de webserver (request) en de server antwoord hierop door een antwoord (response) terug te sturen. Elke request wordt gevolgd door een response. Je kan dit het best vergelijken met een gewone conversatie tussen 2 mensen. Het HTTP-antwoord bevat het HTML-document of de afbeelding of de melding dat de gevraagde pagina niet kon gevonden worden (op voorwaarde dat de server actief is natuurlijk). 35 P a g i n a

46 De request van een pagina kan op verschillende manieren (methods), waarvan deze 2 het meest voorkomen: GET: de standaardmanier waarop gegevens, zoals webpagina-aanvragen, naar de server gestuurd worden. Door het toevoegen van extra parameters aan de URL, kunnen we bijkomende opties meegeven voor de volgende pagina. POST: deze manier verstuurd gegevens, niet in de URL maar in de body van de HTTPaanvraag. Deze manier wordt het meest gebruikt voor documenten en formulieren. Volgen van een hyperlink Als je op een link klikt op een een webpagina, wordt er altijd gebruik gemaakt van de GETmethode: <a href="volgende_pagina.php">klik hier</a> Je kunt de link ook uitbreiden met één of meerdere extra parameters: <a href="volgende_pagina.php?actie=weergeven">alles weergeven</a><br /> <a href="volgende_pagina.php?actie=weergeven&id=4">dit onderdeel weergeven</a> Je laat namelijk de naam van de link volgen door een vraagteken en de naam van de parameter met een toekenning via een gelijkheidsteken. Als je gebruik maakt van meerdere parameters, voeg je deze samen met een ampersand (&). Formulieren Bij formulieren kunnen we kiezen om ofwel de POST-methode, ofwel de GET-methode te gebruiken. De keuze zal afhangen van een aantal factoren. Oorspronkelijk werd GET gebruikt voor acties die geen wijzigingen teweeg brengen op de server, zoals het zoeken in een database naar iets, terwijl POST werd gebruikt voor acties die wel wijzigingen doorvoeren op de server, zoals het toevoegen van een nieuw element, of verwijderen van een bestaand element in een database. Maar uiteindelijk kunnen we beide methoden gebruiken om gegevens te verzenden. Het voor- en/of nadeel van GET is dat alle parameters meegestuurd worden in de URL. Hierdoor kan gevoelige informatie zichtbaar worden voor anderen (bijvoorbeeld bij het opvragen van de URL in de geschiedenis van de browser). Anderzijds kan dit ook gebruikt worden, om een URL in de favorieten op te slaan, inclusief de parameters. Hou er ook rekening mee dat de GET-methode er voor kan zorgen, dat je URL behoorlijk lang wordt en uiteindelijk zelfs de maximum lengte voor URL's overschrijdt. Volgende regels worden aangenomen voor het versturen van formulieren: Gebruik POST als minstens één van onderstaande regels waar is: het resultaat heeft blijvende werking aan de serverkant (vb: toevoegen of wissen van gegevens uit een database); data die geproduceerd wordt door het formulier, zal resulteren in een te lange URL bij het gebruik van GET (meer dan 024 karakters); de overgestuurde data bevat enig ander type dan standaard ASCII-karakters. Gebruik GET als alle onderstaande regels van toepassing zijn: de manier van verzenden gaat NIET via een formulier; de aanvraag wordt gebruikt om gegevens op te halen; het resultaat van de aanvraag heeft geen blijvende invloed op de webserver; de uiteindelijke URL bestaat in totaal uit minder dan 024 karakters. We zullen dus in bijna alle gevallen de POST-methode gebruiken om gegevens via formulieren te versturen. 36 P a g i n a

47 Formulieren Formulieren maken Aangezien we allemaal HTML kennen, zal het maken van formulieren heel kort nog eens herhaald worden. Een formulier in HTML begint altijd met de<form>-tag. Verder wordt er binnen de <form> ook opgegeven naar welke pagina de gegevens versluisd worden en welke methode er gebruikt wordt. Hieronder een voorbeeld van een formulier: <?php if (isset($_post['naam'])) { // zijn er reeds gegevens? $naam = $_POST['naam']; $wachtwoord = $_POST['wachtwoord']; $geslacht = $_POST['geslacht']; $kinderen = $_POST['kinderen']; $ouders = $_POST['ouders']; $rijbewijs = $_POST['rijbewijs']; $opmerking = $_POST['opmerking']; $actie = $_POST['actie'];?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>persoonlijke fiche</title> </head> <body> <h>persoonlijke fiche</h> <?php if (isset($_post['naam'])) { // zijn er reeds gegevens? print "<h2>deze gegevens heeft u doorgestuurd</h2>"; print "<p>naam: $naam<br />"; print "Wachtwoord: $wachtwoord<br />"; print "Geslacht: $geslacht<br />"; print "Kinderen ten laste: $kinderen<br />"; print "Ouders ten laste: $ouders<br />"; print "Rijbewijs: $rijbewijs<br />"; print "Opmerking: $opmerking<br />"; print "Verborgen veld: $actie</p>";?> <h2>vul hier uw gegevens in</h2> <form action="persoonlijk.php" method="post"> <table> <tr> <td>naam:</td> <td><input name="naam" type="text" value="<?php print $naam;?>" /></td> </tr> <tr> <td>wachtwoord:</td> 37 P a g i n a

48 <td><input name="wachtwoord" type="password" value="<?php print $wachtwoord;?>" /></td> </tr> <tr> <td>geslacht:</td> <td><label><input name="geslacht" type="radio" value="m" <?php if ($geslacht == "m") print "checked=\"checked\"";?> />Man</label> <label><input type="radio" name="geslacht" value="f" <?php if ($geslacht == "f") print "checked=\"checked\"";?> />Vrouw</label> </td> </tr> <tr> <td>ten laste</td> <td><input name="kinderen" type="checkbox" id="kinderen" <?php if ($kinderen == "on") print "checked=\"checked\"";?> /><label for="kinderen">kinderen</label> <input type="checkbox" name="ouders" id="ouders" <?php if ($ouders == "on") print "checked=\"checked\"";?> /><label for="ouders">ouders</label></td> </tr> <tr> <td>rijbewijs</td> <td><select name="rijbewijs"> <option value="geen" <?php if ($rijbewijs == "Geen") print "selected=\"selected\"";?>>geen</option> <option value="a3" <?php if ($rijbewijs == "A3") print "selected=\"selected\"";?> <?php if ($rijbewijs == "Geen") print "selected=\"selected\"";?>>bromfietsen</option> <option value="a2" <?php if ($rijbewijs == "A2") print "selected=\"selected\"";?>>motorfiets</option> <option value="a" <?php if ($rijbewijs == "A") print "selected=\"selected\"";?>>zware motorfiets</option> <option value="b" <?php if ($rijbewijs == "B") print "selected=\"selected\"";?>>gewone wagen</option> <option value="c" <?php if ($rijbewijs == "C") print "selected=\"selected\"";?>>zware wagen</option> <option value="d" <?php if ($rijbewijs == "D") print "selected=\"selected\"";?>>voertuig voor meer dan 9 personen</option> </select> </td> </tr> <tr> <td valign="top">opmerking:</td> <td><textarea name="opmerking"><?php print $opmerking;?> </textarea></td> </tr> <tr> <td><input name="actie" type="hidden" value="controle" /></td> <td><input name="" type="submit" value="verzenden" /></td> </tr> </table> </form> </body> </html> 38 P a g i n a

49 Input-tags Er zijn dus 3 veelgebruikte tags om gegevens in te voeren: input select textarea Bij de input hebben we een aantal types die het soort veld bepalen: text: wordt gebruikt voor gewone tekst; password: wordt vooral gebruikt om wachtwoorden in te geven, de ingetikte tekst wordt weergegeven als sterretjes / bolletjes (afhankelijk van de browser); radio: keuzerondjes; checkbox: selectievakjes, mogelijkheid om aan of uit te vinken; hidden: de gebruiker kan deze niet wijzigen, dit is handig om extra gegevens mee te sturen. Verborgen velden worden niet in de browser weergegeven (wel in de HTML-code). Inputs van het type button bestaan ook, maar die worden vooral gebruikt in combinatie met JavaScript. Bij select geven we de mogelijkheden weer tussen <option>-tags, die de waarde van de select zullen bepalen en de tekst die weergegeven wordt. Bij het opstellen van een formulier zorgen we er om te beginnen voor, dat elk veld een duidelijke naam (name) heeft, omdat we deze nodig hebben bij het verwerken. De value is verplicht bij radio, omdat de gebruiker zelf geen waarde kan invullen. De value van formuliervelden wordt gebruikt om beginwaarde mee te geven. Deze beginwaarden kunnen met behulp van PHP opdrachten ingevuld worden. Zie regel 39 voor een tekstveld, regel 47 voor keuzerondjes, regel 53 voor selectievakjes, regel 59 voor een vervolgkeuzelijst (menu) en regel 7 voor een tekstgebied. Dit is handig om formulieren reeds op voorhand met gegevens te vullen. Verwerken van de formulieren Nadat de gebruiker het formulier heeft ingevuld, is het de bedoeling om hier iets mee te doen. In een later stadium zullen we deze gegevens aan een database toevoegen of mailen naar iemand. Nu geven we deze weer op de pagina. Ten eerste moeten we weten met welke methode de gegevens doorgestuurd zijn: GET of POST? Dit dienen we te weten omdat er 2 variabelen gecreëerd zijn bij het versturen, waarin de formuliergegevens vervat zitten. $_GET: Als de gegevens via een URL worden doorgestuurd of als er geen methode is opgegeven bij een formulier. Parameters worden doorgegeven na het vraagteken; $_POST: De gegevens werden verstuurd via een formulier én de methode werd ingesteld op POST. Alle parameters krijgen de naam van de input-velden. 39 P a g i n a

50 Maken we gebruik van de URL om parameters door te sturen, zitten de gegevens altijd in de $_GET-variabele. Bij het gebruik van formulieren hebben we de methode, en dus de variabele, zelf gekozen bij de method van de form-tag. Nemen we voorgaand formulier, hier is al onze data opgeslagen in de $_POST-variabele. De regels 3 tot en met 0 zorgen voor het opvragen van de opgestuurde formulier gegevens. Dit geeft al een idee van de mogelijkheden. We zien hier wel nog staan bij geslacht "m" en bij kinderen "on". Als we verder willen werken met deze gegevens zullen we dit moeten "mooier" maken. Dit doen we aan de hand van if- en switch-statements. Als we in onze textarea gebruik maken van een nieuwe lijn (enter), wordt dit trouwens ook niet verwerkt in de weergave op de volgende pagina. Hierdoor komt alles achter elkaar te staan, in plaats van leesbare tekst te verkrijgen. En als toetje zullen we controles uitvoeren op de doorgestuurde gegevens: is de naam niet te lang (denk aan de database die komt), is het wachtwoord ingevuld, is een eventueel opgegeven adres geldig,... Verwerken van URL's Het verwerken van URL's of formulieren die de GET-methode gebruiken, is even eenvoudig, alleen moeten we gebruik maken van de $_GET-array. Nemen we volgende url.php script <?php $taal = "C++";?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>get en URL's</title> </head> <body> Klik op <a href="url_verwerking.php?taal=<?php print urlencode($taal);?>">c++</a>. </body> </html> Wordt verwerkt door...: <?php $taal = $_GET['taal'];?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>verwerking GET en URL's</title> </head> <body> <p><?php print $taal?> is een programmeertaal.</p> </body> </html> 40 P a g i n a

51 Opletten met URL's Een URL heeft naast de beperking in lengte (max 024 karakters) ook nog eens de beperking dat hij met een aantal speciale tekens niet overweg kan. Denk bijvoorbeeld aan é en '. Om een URL toch op een deftige manier te kunnen verwerken worden deze speciale tekens omgezet naar URL-equivalenten. Waarschijnlijk heb je in een link met spaties al gezien dat deze vervangen worden door '%20'. Dit is het URL-equivalent van een spatie. Om onze scripts goed te laten werken doen we dit beter zelf. Hiervoor kun je de functie urlencode() gebruiken. Gegevens die op deze manier doorgestuurd worden, worden zeker juist geïnterpreteerd. Bij het ontvangen kun je ze dan weer 'normaal' maken door de functie urldecode() te gebruiken (wat niet altijd noodzakelijk is, testen is hier de boodschap). Textarea's en nieuwe regels Als we een textarea gebruiken en we willen nieuwe lijnen gebruiken, dan worden deze niet opgeslagen in de variabele als <br /> maar als new-line (\n). Gelukkig bestaat er een functie die onze new-lines kan omzetten naar <br />, de nl2br(): $html_tekst = nl2br($tekst_van_textarea); oefeningen Het project van deze cursus: Webshop Om het aantal cursussen per pagina te beperken, zullen we gebruik maken van vier categorieën. Deze categorieën vullen we in het volgende hoofdstuk met cursussen. Om een categorie te kunnen kiezen, maken we juist onder de kop een navigatiebalk met de verschillende categorieën. Voeg daarvoor de volgende regel toe onder de regel met de h tag: <p><a href="index.php?cat=webdesign">webdesign</a> <a href="index.php? cat=kantoor">kantoor</a> <a href="index.php?cat=multimedia">multimedia</a> <a href="index.php?cat=programmeren">programmeren</a><p> Om de gebruiker te tonen welke categorie zichtbaar is, maken we deze zichtbaar in de kop. Daarvoor voeg je de volgende regels (7 0) toe aan het script: $cat = "Webdesign"; // standaard categorie if(isset($_get['cat'])) { // gekozen categorie $cat = $_GET['cat']; De kop wordt dan: <h>snt Webshop Informatica (<?php...?>)</h> Om een cursus te kunnen volgen moet er een inschrijvingsformulier ingevuld worden. De koppelingen Inschrijven veranderen we naar: <td><a href="inschrijven.php?cursus=<?php print $item;?>&cat=<?php print $cat;?>">inschrijven</a></td> Doe dit voor alle Inschrijven-koppelingen. De PHP pagina met het formulier wordt: <?php // Verwerken van de URL $cursus =... $cat =...?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> 4 P a g i n a

52 <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>snt Webshop Informatica</title> </head> <body> <h>inschrijvingsformulier voor de cursus <?php print $cat?> - <? php print $cursus?></h> <form action="inschrijven_verwerken.php" method="post"> <p> <label for="naam">naam</label> <input type="text" name="naam" id="naam" /> <label for="voornaam">voornaam</label> <input type="text" name="voornaam" id="voornaam" /> <label for="geslacht">geslacht</label> <select name="geslacht" id="geslacht"> <option value="man">man</option> <option value="vrouw">vrouw</option> </select> </p> <p> <label for="geboorteplaats">geboorteplaats</label> <input type="text" name="geboorteplaats" id="geboorteplaats" /> <label for="geboortedatum">geboortedatum</label> <input type="text" name="geboortedatum" id="geboortedatum" /> <label for="rijksregisternr">rijksregisternummer (5 laatste cijfers)</label> <input name="rijksregisternr" type="text" id="rijksregisternr" /> </p> <h3>volgende onderstaande velden enkel in te vullen door nieuwe cursisten of bij wijziging</h3> <p> <label for="adres">straat en nr</label> <input name="adres" type="text" id="adres" size="80" /> </p> <p> <label for="postnr">postnr</label> <input type="text" name="postnr" id="postnr" /> <label for="woonplaats">woonplaats</label> <input type="text" name="woonplaats" id="woonplaats" /> <label for="land">land</label> <input type="text" name="land" id="land" /> </p> <p> <label for="telefoon">telefoon</label> <input type="text" name="telefoon" id="telefoon" /> <label for=" "> </label> <input type="text" name=" " id=" " /> </p> <p> <label for="educatiefverlof">educatief verlof</label> <select name="educatiefverlof" id="educatiefverlof"> <option value="geen">geen</option> <option value="s">ambtenaar</option> <option value="p">privé</option> </select> 42 P a g i n a

53 <label <input <label <input for="socecostatuut">sociaal en economisch statuut</label> type="text" name="socecostatuut" id="socecostatuut" /> for="opleidingsniveau">opleidingsniveau</label> type="text" name="opleidingsniveau" id="opleidingsniveau" /> 63 <label for="nationaliteit">nationaliteit</label> 64 <input type="text" name="nationaliteit" id="nationaliteit" /> 65 <label for="datum">datum</label> 66 <input type="text" name="datum" id="datum" /> 67 </p> 68 <h3>voorbehouden SNT</h3> 69 <p> 70 <label for="afdeling">afdeling - jaar - klas</label> 7 <input name="afdeling" type="text" id="afdeling" readonly="readonly" /> 72 <label for="kwitantienr">kwitantie nr</label> 73 <input type="text" name="kwitantienr" id="kwitantienr" readonly="readonly" /> 74 <label for="attest">attest</label> 75 <input type="text" name="attest" id="attest" readonly="readonly" /> 76 <label for="prijs">prijs</label> 77 <input type="text" name="prijs" id="prijs" readonly="readonly" /> 78 </p> 79 <p> 80 <input type="checkbox" name="voorwaarden" id="voorwaarden" /> 8 <label for="voorwaarden">stemt in met de inschrijvingsvoorwaarden (Artikel 50 van het decreet op het volwassenenonderwijs)</label> 82 </p> 83 <p> 84 <input type="submit" name="button" id="button" value="verzenden" /> 85 </p> 86 <p> 87 <input name="cat" type="hidden" value="<?php print $cat?>" /> 88 <input name="cursus" type="hidden" value="<?php print $cursus? >" /> 89 </p> 90 </form> 9 </body> 92 </html> Het resultaat: 43 P a g i n a

54 De PHP pagina om de gegevens van het formulier te verwerken wordt: <?php define (" _ADMINISTRATIE", // Verwerken van formulier $naam =... $voornaam =... $geslacht =... $geboorteplaats =... $geboortedatum =... $rijksregisternr =... $adres =... $postnr =... $woonplaats =... $land =... $telefoon =... $ =... $educatiefverlof =... $socecostatuut =... $opleidingsniveau =... $nationaliteit =... $datum =... $afdeling =... $kwitantienr =... $attest =... $prijs =... $voorwaarden =... $cat =... $cursus =... $formuliergegevens = <<<eod Naam: $naam Voornaam: $voornaam Geslacht: $geslacht Geboorteplaats: $geboorteplaats Geboortedatum: $geboortedatum Rijksregisternummer (5 laatste cijfers): $rijksregisternr 32 Volgende onderstaande velden enkel in te vullen door nieuwe cursisten of bij wijziging 33 Straat en nr: $adres 34 Postnr: $postnr Woonplaats: $woonplaats Land: $land 44 P a g i n a

55 35 Telefoon: $telefoon $ 36 Educatief verlof: $educatiefverlof Sociaal en economisch statuut: $socecostatuut Opleidingsniveau: $opleidingsniveau 37 Nationaliteit: $nationaliteit Datum: $datum 38 Voorbehouden SNT 39 Afdeling - jaar - klas: $afdeling Kwitantie nr: $kwitantienr Attest: $attest Prijs: $prijs 40 $voorwaarden Stemt in met de inschrijvingsvoorwaarden (Artikel 50 van het decreet op het volwassenenonderwijs) 4 eod; $berichtadministratie = <<<eod 44 Beste, De volgende persoon wenst zich in te schrijven voor de cursus $cat $cursus $formuliergegevens 49 eod; 50 5 $berichtcursist = Beste $voornaam $naam, U bent ingeschreven voor de cursus Succes met uw opleiding De directeur en zijn team, 59 Dirk Temmerman // Verzenden van de mails. Syntax: mail(naar, onderwerp, bericht, header); 62 mail($ , "Inschrijving cursus $cat - $cursus", $berichtcursist, "FROM: ". _ADMINISTRATIE); // naar de administratie met als onderwerp Inschrijving, het hierboven aangemaakte bericht voor de administratie en als afzender het adres van de cursist 64?> 65 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 66 <html xmlns="http://www.w3.org/999/xhtml"> 67 <head> 68 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 69 <title>snt Webshop Informatica</title> 70 </head> 7 <body> 72 <h2>u bent ingeschreven voor de cursus...</h2> 73 <p>de volgende gegevens werden naar het secretariaat van de school gestuurd: 74 <pre><?php print $formuliergegevens;?></pre></p> 75 <p>u ontvangt per mail (<?php print $ ;?>) een bevestiging van de inschrijving.</p> 76 <p><a href="index.php">klik hier om door te gaan</a></p> 77 </body> 78 </html> Het resultaat: 45 P a g i n a

56 De ontvangen s (opvragen door te surfen naar en aan te melden met de gebruikersnaam pc0 en het standaard wachtwoord...): 46 P a g i n a

57 Enquête Voor het TV programma Ook getest op mensen wordt een fictieve seks-enquête opgemaakt. Deze enquête bestaat uit verschillende PHP pagina's met telkens één vraag. Pas na de laatste vraag wordt een overzicht gegeven van de antwoorden (met andere woorden de antwoorden uit de formulieren van de vorige vraag worden in verborgen velden opgeslagen en doorgegeven aan de volgende vraag op de volgende PHP pagina). De eerste vraag: De tweede vraag: De leeftijdscategorieën zijn: 6 29 jaar, jaar en 50+. De derde vraag: 47 P a g i n a

58 De vierde vraag: De mogelijke antwoorden zijn Geen enkele keer, Eén keer, Twee keer, Drie keer, Vier keer, Vijf keer, Zes keer, Zeven keer en Meer dan zeven keer. De vijfde vraag: Met dezelfde mogelijke antwoorden als in vraag vier. De zesde vraag: Met de volgende mogelijke antwoorden: Zeer veel zorgen of stress, Behoorlijk wat zorgen of stress, Een beetje zorgen of stress en Helemaal geen zorgen of stress. De zevende vraag: Met dezelfde mogelijke antwoorden als in vraag vier. Het resultaat: Het seksueel profiel wordt samengesteld met de antwoorden op de vragen, zorg dus voor aangepaste veldwaarden (value's). Zoeken Het internet kent verschillende zoeksites. We combineren deze in één pagina. Daar zoeksites enkel gegevens opvragen, maken ze meestal gebruik van de GET-methode. De externe pagina's met de zoekresultaten laten we verschijnen in een frame. Daarvoor heb je een de volgende pagina's nodig: De framesetpagina extern.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Frameset//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-frameset.dtd"> 48 P a g i n a

59 <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>gecombineerd zoeken</title> </head> <frameset rows="30,*" frameborder="no" border="0" framespacing="0"> <frame src="extern_top.php" name="topframe" scrolling="no" noresize="noresize" id="topframe" title="topframe" /> <frame src="extern_main.html" name="mainframe" id="mainframe" title="mainframe" /> </frameset> <noframes><body> </body></noframes> </html> De onderste pagina extern_main.html waar de zoekresultaten tevoorschijn komen: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> </head> <body> <p>hier verschijnen de externe pagina's.</p> </body> </html> De bovenste pagina... is een PHP pagina met de volgende onderdelen:. Een kop 2 waarin de opgegeven zoekwoorden verschijnen. 2. Een formulier om twee zoekwoorden op te geven. 3. De hyperlinks naar de externe zoeksites met de opgegeven zoekwoorden. Deze pagina heeft daarbij de volgende functionaliteiten:. Als het eerste zoekwoord niet werd opgegeven, worden de standaard zoekwoorden snt en brugge gebruikt. 2. Als er twee zoekwoorden zijn, moet in de kop 2 het woord en tussen de twee zoekwoorden staan. Indien geen tweede zoekwoord is opgegeven wordt het woord en niet gebruikt. 3. De formuliervelden bevatten de opgegeven of standaard zoekwoorden als beginwaarde. 4. De hyperlinks stel je als volgt samen: a. <a href="http://maps.google.be/maps?q=<?php...?>&output=embed" target="mainframe">google maps</a> b. <a href="http://be.bing.com/search?q=<?php...?>" target="mainframe">bing</a> c. <a href="http://search.yahoo.com/search?p=<?php...?>" target="mainframe">yahoo</a d. <a href="http://video.search.yahoo.com/search/video?p=<?php...?>" target="mainframe">video's</a> e. <a href="http://nl.wikipedia.org/w/index.php?&search=<?php...?>" target="mainframe">wikipedia</a> 49 P a g i n a

60 f. <a href="http://commons.wikimedia.org/w/index.php?search=<?php...?> &uselang=nl" target="mainframe">wikimedia</a> g. <a href="http://www.imdb.com/find?q=<?php...?>&s=all" target="mainframe">imdb</a> h. <a href="http://www.amazon.com/s?keywords=<?php...?>" target="mainframe">amazon</a> i. <a href="http://www.jamendo.com/en#en/search#qs=q=<? php...?>" target="mainframe">jamendo</a> Bij alle hyperlinks worden de twee zoekwoorden door een plusteken gescheiden, bij Jamendo echter door een spatie. Hou bij de hyperlink van Jamendo rekening met het feit dat een spatie in een URL eigenlijk niet mag voorkomen. Het resultaat: PHP Evaluaties en lussen Algemeen In PHP werken we constant op basis van keuzes van de gebruiker: als de bezoeker kiest om een pagina in het Nederlands weer te geven, dan moet dit ook zo getoond worden. Een andere mogelijkheid is het repetitief uitvoeren van een taak. Gegevens moeten bijvoorbeeld weergegeven worden, zolang er data voorhanden is. Of een formulier moet weergegeven worden, zolang er niet aan bepaalde voorwaarden voldaan is. Voorbeelden Voorbeeld Via een formulier wordt het geboortejaar van de bezoeker gevraagd. Naargelang deze ouder of jonger dan 8 is, wordt er een gepaste mededeling op het scherm geplaatst: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 2 <html xmlns="http://www.w3.org/999/xhtml"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 5 <title>leeftijd</title> 6 </head> 7 <body> 8 <form action="leeftijd.php" method="post"> 9 Uw leeftijd is 0 <input name="leeftijd" type="text" value="42" /> jaar 50 P a g i n a

61 2 <input type="submit" name="submit" value="verder" /> 3 </form> 4 </body> 5 </html> En zo wordt dit verwerkt: <?php $leeftijd = $_POST['leeftijd']; if ($leeftijd < 8){ $melding = "U bent te jong om op deze pagina's toegelaten te worden."; else { $melding = "Welkom, en geniet van deze pagina's.";?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>leeftijd</title> </head> <body> <p><?php print $melding;?></p> </body> </html> Voorbeeld 2 Er wordt de gebruiker naar een getal gevraagd, en dit aantal wordt gebruikt om er zoveel sterretjes (*) mee weer te geven, na elke 30ste ster moet er een nieuwe regel gemaakt worden, waardoor deze mooi onder elkaar komen te staan: <?php if (!empty($_post['aantal'])) { $aantal = $_POST['aantal'];?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>sterretjes weergeven</title> </head> <body> <form action="sterretjes.php" method="post"> Aantal weer te geven sterretjes: <input name="aantal" type="text" value="<?php print $aantal?>"/> <input name="submit" type="submit" value="weergeven" /> </form> <?php if (!empty($_post['aantal'])):?> <p>hier zijn uw sterretjes:<br /> <?php for ($i = ; $i <= $aantal; $i++):?> * <?php if (($i % 30) == 0):?> 5 P a g i n a

62 22 <br /> 23 <?php endif;?> 24 <?php endfor;?> 25 </p> 26 <?php endif;?> 27 </body> 28 </html> Evaluaties Evaluaties worden gebruikt om bepaalde zaken te controleren. Als bijvoorbeeld de naam niet ingevuld is in een veld, dan moet het formulier opnieuw getoond worden, samen met een foutmelding. If... else Dit is de meest voorkomende evaluatie en controleert of er aan een bepaalde voorwaarde (conditie) voldaan is. Afhankelijk hiervan wordt er iets uitgevoerd <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>evaluaties</title> </head> <body> <p><?php $var = 0; if ($var > 5) print "De variabele is groter dan 5.<br />";?></p> </body> </html> Dit lezen we als: "de variabele $var krijgt de waarde 0. Als de variabele $var groter is dan 5, zal de expressie uitgevoerd worden die na de if komt." Het wordt echter aangeraden om na de if-conditie een accolade te plaatsen en deze na het statement weer af te sluiten. Op die manier kun je meerdere statements uitvoeren per ifconstructie: 0 if ($var > 5) { print "De variabele is groter dan 5.<br />"; 2 $var = 2; 3 Voorgaande lezen we nu dus als: "als de waarde van $var groter is dan 5, wordt de melding afgedrukt, en wordt $var op 2 gezet." Als er aan de conditie niet voldaan is, willen we soms dat er iets anders uitgevoerd wordt: else { print "De variabele is kleiner of gelijk aan 5.<br />"; Daarvoor gebruiken we de else-uitbreiding. Zoals je ziet, kunnen we één statement tussen accolades plaatsen. We kunnen onze lus nog verder opsplitsen, misschien willen we testen als de variabele niet gelijk is aan 5: 52 P a g i n a

63 else { if ($var == 5) { print "De variabele is gelijk aan 5.<br />"; else { print "De variabele is kleiner dan 5.<br />"; Dit noemen we geneste evaluaties : als $var groter is dan 5, wordt de eerste melding afgedrukt, als dit niet het geval is, wordt gecontroleerd of $var gelijk is aan 5 en wordt eventueel de juiste melding afgedrukt. Als ook dit niet het geval is, is $var dus kleiner dan 5 en wordt deze melding afgedrukt. Dergelijke constructies kunnen snel ingewikkeld worden. Dit kunnen we als volgt oplossen: 3 elseif ($var == 5) { 4 print "De variabele is gelijk aan 5.<br />"; 5 else { 6 print "De variabele is kleiner dan 5.<br />"; 7 Deze manier van werken is veel duidelijker en overzichtelijker en verdient dus ook de voorkeur. Verschillende testen in één statement Soms is het nodig om verschillende elementen te testen alvorens een expressie uit te voeren. Hiervoor maken we gebruik van logische operatoren: $dag = "zaterdag"; if (($dag == "zaterdag") ($dag == "zondag")) { print "Het is weekend.<br />"; else { print "Het is vandaag werken geblazen.<br />"; Hier wordt er getest of $dag gelijk is aan "zaterdag" of aan "zondag", als dit zo is, dan is het weekend. Een ander voorbeeldje: $kleur = "rood"; $kleur2 = "blauw"; if (($kleur == "rood") && ($kleur2 == "blauw")) { print "Deze mengeling geeft \"paars\".<br />"; Switch-statement Heel veel elseif's worden onoverzichtelijk. Om dit op te lossen kunnen we gebruik maken van een switch-statement: 29 $dag = 3; 30 switch ($dag){ 3 case : 32 print "Het is maandag.<br />"; 33 break; 34 case 2: 35 print "Het is dinsdag.<br />"; 36 break; 37 case 3: 38 print "Het is woensdag.<br />"; 39 break; 40 case 4: 53 P a g i n a

64 print "Het break; case 5: print "Het break; case 6: print "Het break; case 7: print "Het break; default: print "Dit is donderdag.<br />"; is vrijdag.<br />"; is zaterdag.<br />"; is zondag.<br />"; is een ongeldige dag.<br />"; De variabele $dag wordt geëvalueerd. Als $dag gelijk is aan wordt de melding weergegeven die hier bij staat. Indien dit niet zo is, wordt er verder vergeleken, tot de juiste waarde gevonden wordt. Het gebruik van accolades, zoals bij een if-else-vergelijking, is hier niet toegelaten. Verder is de break opdracht nodig. Deze zorgt ervoor dat je uit de switch springt. Als je deze achterwege zou laten, worden alle meldingen weergegeven, die gepasseerd worden. Test desnoods eens uit. In sommige toepassingen is dit net wenselijk: case 6: case 7: print "Het is weekend.<br />"; break; default: print "Dit is een ongeldige dag.<br />"; Switch-statements worden alleen gebruikt voor eenvoudige vergelijkingen, waarbij je of een integer, of een string verwacht. Gebruik ze niet voor complexe structuren met and's en or's. Lussen Er zijn 4 soorten lussen die vaak gebruikt worden. De keuze ervan zal bepaald worden door het resultaat dat je wilt bereiken. While Bij een while-lus worden de expressies die tussen de accolades staan uitgevoerd, zolang de conditie waar is. Deze conditie wordt eerst gecontroleerd, en dan pas worden de expressies uitgevoerd. Dit betekent dat, als de conditie van in het begin al niet waar is, de lus niet zal uitgevoerd worden: print "While"; $teller = 0; while ($teller <= 0){ print " $teller"; $teller ++; print "<br />"; Deze lus zal dus 0 getallen naast elkaar afdrukken, gaande van 0 tot en met 0. Do...while Een do...while-lus doet hetzelfde als de while, met dit verschil, dat de conditie pas op het einde getest wordt, waardoor de lus sowieso altijd een keer uitgevoerd wordt: 54 P a g i n a

65 print "Do"; $teller = 0; do { print " $teller"; $teller ++; while ($teller <= 0); print " while<br />"; Deze manier kan soms interessant zijn om minstens tekstveld af te drukken, ongeacht de input van de gebruiker. For Deze derde, en meestgebruikte, lus bestaat uit 3 delen bij het aanroepen: print "For"; for ($teller = 0; $teller <= 0; $teller++){ print " $teller"; print "<br />"; Tussen de haakjes vinden we het volgende terug:. initiële waarde: een statement die één keer uitgevoerd wordt, bij het aanroepen van de for-lus. Meestal wordt hier de startwaarde van een teller opgegeven; 2. lusevaluatie: de evaluatie die na elke lus gecontroleerd wordt, als deze FALSE wordt, stopt de lus; 3. einde-lus-statements: deze statements worden telkens op het einde van de lus uitgevoerd. In ons voorbeeld, wordt de teller eerst op 0 geplaatst en start de lus. Na de uitvoering wordt er gecontroleerd of de teller kleiner of gelijk is aan 0, als dit zo is, wordt de teller met verhoogd, waarna de lus opnieuw wordt uitgevoerd. Zodra de teller groter wordt dan 0, stopt de lus. Je kunt tussen de haakjes meerdere waarden gebruiken, bijvoorbeeld om meerdere initiële waarden te gebruiken: 72 for ($teller = 0, $breekpunt = ; $teller < 0; $teller++){ 73 print "$teller "; 74 $breekpunt++; 75 if ($breekpunt == 3){ 76 $breekpunt = ; 77 print "breekpunt "; ?></p> HTML code binnen while, for en if structuren Om HTML code in een evaluatieblok of lus te plaatsen, gebruik je een alternatieve schrijfwijze. Daarmee kun je afhankelijk van een evaluatie HTML code toevoegen of weglaten <?php $rijen = 9; $kolommen = 5;?> <?php if ($rijen <= 0):?> <p>de tabel moet minstens rij bevatten.</p> <?php elseif ($kolommen <= 0):?> <p>de tabel moet minstens kolom bevatten.</p> <?php else:?> 55 P a g i n a

66 Deze tabel bevat <?php print $rijen?> rijen en <?php print $kolommen?> kolommen. <table border=""> <?php for($rij = 0; $rij < $rijen; $rij++):?> <tr> <?php for($kolom = 0; $kolom < $kolommen; $kolom++):?> <td><?php print "Rij $rij Kolom $kolom";?></td> <?php endfor;?> </tr> <?php endfor;?> </table> <?php endif;?> Bovenstaande voorbeeld bouwt een dynamische tabel op. Het begin van de evaluatie of lus eindigt met de tekens :?> waarbij eveneens het PHP blok wordt afgesloten. Na een afgesloten PHP blok komt HTML code te staan. Deze HTML code wordt echter alleen gebruikt indien de PHP evaluatie waar is. De evaluatie of lus eindigt met een nieuw PHP blok waarin het evaluatieblok of de lus wordt afgesloten. Deze alternatieve syntax wordt enkel ondersteund voor while, for en if structuren. Oefeningen Het project van deze cursus: Webshop Voorlopig heeft de Webshop enkel items voor de categorie Webdesign. Dit gaan we aanvullen met items voor de andere categorieën: De eerste regels van de PHP pagina veranderen naar: <?php if(isset($_get['cat'])) { // gekozen categorie $cat = $_GET['cat']; else { $cat = "Webdesign"; // standaard categorie... // items naargelang categorie case... // categorie Webdesign $item = "Dreamweaver Deel "; $item2 = "Dreamweaver Deel 2"; $item3 = "Javascript"; $item4 = "PHP"; $item5 = "Dreamweaver Eindwerk";... case... // categorie Kantoor $item = "Tekstverwerking"; $item2 = "Rekenblad"; $item3 = "Databasebeheer"; $item4 = "Personal Information Manager";... case... // categorie Multimedia $item = "Fotobewerking"; $item2 = "Videobewerking"; $item3 = "Geluidsbewerking"; $item4 = "Animaties";... case... // categorie Programmeren $item = "Javascript"; $item2 = "PHP"; $item3 = "SQL"; 56 P a g i n a

67 $item4 = "C"; $item5 = "C++";... default: exit("ongeldige categorie.");... $aantalitems = ; do { // tel het aantal items $aantalitems++; while (isset(${'item'.$aantalitems));?> Eerst bepalen we de categorie (gekozen via een URL of de standaard categorie Webdesign). Daarna gaan we op basis van de categorie de verschillende cursussen initialiseren. Daar niet alle categorieën evenveel items bevatten, tellen we het aantal items. Daar de items opgeslagen worden in variabelen met namen die beginnen met item gevolgd door een nr (vb: item, item2, enz.) stellen we de te testen variabelenaam samen door het woord 'item' en de variabele $aantalitems samen te voegen. Dit wordt pas een variabelenaam door deze in de $ { constructie te plaatsen. M.a.w. ${aangemaakte variabelenaam. Het HTML gedeelte van de pagina wordt dan: 42 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 43 <html xmlns="http://www.w3.org/999/xhtml"> 44 <head> 45 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 46 <title>snt Webshop Informatica</title> 47 </head> 48 <body> 49 <h>snt Webshop Informatica (<?php print $cat?>)</h> 50 <p><a href="index.php?cat=webdesign">webdesign</a> <a href="index.php?cat=kantoor">kantoor</a> <a href="index.php? cat=multimedia">multimedia</a> <a href="index.php? cat=programmeren">programmeren</a></p> 5 <table border="0"> 52 <tr> 53 <th>cursus</th> 54 <th>inschrijven</th> 55 </tr> 56 <?php for ($nr = ; $nr <...; $nr++):?> 57 <tr> 58 <td><?php print...;?></td> 59 <td><a href="inschrijven.php?cursus=<?php print...;?>&cat=<?php print $cat;? >">Inschrijven</a></td> 60 </tr> 6 <?php endfor;?> 62 </table> 63 </body> 64 </html> We gebruiken een for lus om de tabel met de items aan te maken. Opsplitsen voor MVC Om onze code duidelijker te houden, zullen we in de index-pagina, het logica-gedeelte er uit halen. Hierdoor zal onze uiteindelijke index.php veel eenvoudiger overkomen, én kunnen we, 57 P a g i n a

68 als we aanpassingen moeten doen, dit alleen nog in het logica-gedeelte uitvoeren. Voor de webdesigner wordt het aanpassen van de lay-out dan een stukje makkelijker. Maak een nieuwe PHP pagina aan en sla deze op als model.php. Kopieer alles dat tussen de php-tags bovenaan staat naar deze nieuwe pagina. Zorg er wel voor dat de code in de nieuwe builder-pagina tussen php-tags staat. In de index.php voegen we bovenaan alleen nog volgende regel toe: 2 3 <?php require 'model.php';?> In Dreamweaver verschijnt onder het tabblad index.php een extra balk met de knoppen broncode en model.php. Als je de knop model.php selecteert, werk je aan de php code in model.php. Selecteer de knop Broncode om aan de PHP pagina index.php te werken. Test de Webshop door je in te schrijven voor de cursus Programmeren C en C++. Zorg dat je geen tweemaal voor de cursus Programmeren C bent ingeschreven. Het resultaat: Getallen afdrukken while Maak een script dat de getallen 0 tot en met 99 onder elkaar afdrukt. Maak gebruik van een while lus. Getallen afdrukken for Pas de bovenstaande oefening aan zodat deze een for lus gebruikt. Dynamische tabel Maak een PHP pagina, die een tabel afdrukt met 30 kolommen en 0 rijen. Het aantal kolommen en rijen moet eenvoudig aan te passen zijn. Druk in elke cel een opeenvolgend nummer af, te beginnen bij 0 en eindigend bij 299 (naar gelang het aantal kolommen en rijen). Dynamische tabel met alternerende rijen Pas de vorige PHP pagina aan zodat de tabel geen randen heeft (<table border="0">) en zorg ervoor dat de regels afwisselend lichtblauw (oneven rijen) en wit (even rijen) gekleurd zijn. Maak hiervoor gebruik van de achtergrondkleur van de rij <tr bgcolor="#ddddff">. Dynamische tabel met alternerende rijen en tabelopties Breidt de vorige PHP pagina uit met de volgende onderdelen: 58 P a g i n a

69 Een formulier om het aantal rijen en kolommen in te stellen. Uit wetenschappelijk onderzoek blijkt dat mannen een uitgesproken voorkeur hebben voor blauw terwijl vrouwen een voorkeur hebben voor zowel blauw als paars. M.a.w. Zorg voor een vervolgmenu met deze keuze. De geslachtskeuze bepaalt de achtergrondkleur voor de even rijen (vrouw = #ffddff, man = #ffffff). De achtergrondkleur voor de oneven rijen blijft voor beide geslachten lichtblauw. Gebruik standaard 0 rijen, 30 kolommen en van het mannelijk geslacht. Geef het formulier als beginwaarde de opgegeven of standaard instellingen. Een mannelijk tabel gebruikt als rij-achtergrondkleuren blauw en wit. Een vrouwelijke tabel gebruikt als rij-achtergrondkleuren blauw en paars. Het resultaat: Getallen afdrukken en verwoorden Pas de tweede oefening aan zodat elk getal ook voluit geschreven wordt. Voor het voluit schrijven kan je de volgende werkwijze gebruiken. Bepaal de eenheden van het getal door de modulus met 0 van het getal te bereken. De verwoording van de eenheden tot en met 9 is één, twee, drie, vier, vijf, zes, zeven, acht, negen (vb: tweeëntwintig). Getallen groter dan 20 en een eenheid verschillend van 0 koppelen de eenheden en tientallen met en of ën: De eenheden twee en drie gebruiken het koppelwoord ën (vb: tweeëntwintig). De andere eenheden gebruiken het koppelwoord en (vb: vierentwintig). Bepaal het tiental door het getal te delen door tien en daarna het resultaat om te zetten naar een geheel getal (afronden). De verwoording van de tientallen tot en met 90 eindigt met tien, twintig, dertig, veertig, vijftig, zestig, zeventig, tachtig, negentig (vb: vierentwintig). Schrijf de uitzonderingen op deze regels zelf uit. 0,, 2, 3 en 4 worden nul, elf, twaalf, dertien en veertien. Geef het voluit geschreven getal weer op het scherm. Het resultaat zie je op de afbeelding rechts. 59 P a g i n a

70 PHP Arrays Algemeen Een veel gebruikt type variabele is een array. Een array is een verzameling van verschillende elementen. Deze verschillende elementen kunnen daarenboven ook van een verschillend type zijn, ze kunnen zelfs arrays bevatten. Stel de gegevens van een film: Naam Type IMDB nummer String Titel String Jaar Integer Regisseur String Taal String Genre String Deze verschillende gegevens, van verschillend types, kunnen we allemaal opslaan in één variabele, namelijk een array. Voorbeeld Een filmliefhebber wil enkele gegevens van films bijhouden. Deze gegevens worden in een array opgeslagen, waardoor we deze op verschillende manieren kunnen presenteren en verwerken <?php // films.php $titels = array ( // op basis van IMDBnrs '06' => 'The Shawshank Redemption', ' ' => 'The Godfather', '006096' => 'Il buono, il brutto, il cattivo', ' ' => '2 Angry Men' ); $jaartallen = array ( '06' => '994', ' ' => '974', '006096' => '966', ' ' => '957' ); $regisseurs = array ( '06' => 'Frank Darabont', ' ' => 'Francis Ford Coppola', '006096' => 'Sergio Leone', ' ' => 'Sidney Lumet' ); $talen = array ( '06' => 'Engels', ' ' => 'Engels', '006096' => 'Italiaans', ' ' => 'Engels' ); $genres = array ( '06' => 'Misdaad', ' ' => 'Misdaad', '006096' => 'Avontuur', 60 P a g i n a

71 30 ' ' => 'Drama' 3 ); 32?> 33 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 34 <html xmlns="http://www.w3.org/999/xhtml"> 35 <head> 36 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 37 <title>films</title> 38 </head> 39 <body> 40 <?php asort($jaartallen);?> 4 <table> 42 <tr> 43 <th>titel</th> 44 <th>jaar F</th> 45 <th>regisseur</th> 46 <th>taal</th> 47 <th>genre</th> 48 <th>imdb nr</th> 49 </tr> 50 <?php foreach ($jaartallen as $IMDBnr => $jaartal):?> 5 <tr> 52 <td><?php print $titels[$imdbnr];?></td> 53 <td><?php print $jaartal;?></td> 54 <td><?php print $regisseurs[$imdbnr];?></td> 55 <td><?php print $talen[$imdbnr];?></td> 56 <td><?php print $genres[$imdbnr];?></td> 57 <td><?php print $IMDBnr;?></td> 58 </tr> 59 <?php endforeach;?> 60 <?php asort($genres);?> 6 <tr> 62 <th>titel</th> 63 <th>jaar</th> 64 <th>regisseur</th> 65 <th>taal</th> 66 <th>genre F</th> 67 <th>imdb nr</th> 68 </tr> 69 <?php foreach ($genres as $IMDBnr => $genre):?> 70 <tr> 7 <td><?php print $titels[$imdbnr];?></td> 72 <td><?php print $jaartallen[$imdbnr];?></td> 73 <td><?php print $regisseurs[$imdbnr];?></td> 74 <td><?php print $talen[$imdbnr];?></td> 75 <td><?php print $genres[$imdbnr];?></td> 76 <td><?php print $IMDBnr;?></td> 77 </tr> 78 <?php endforeach;?> 79 </table> 80 </body> 8 </html> 6 P a g i n a

72 Vullen van arrays Om arrays te vullen hebben we twee manieren, de eerste manier zullen we voornamelijk gebruiken, als we een array op voorhand definiëren. De tweede als we een array gaandeweg aanvullen. Als we het over arrays hebben, dan hebben we altijd een sleutel (of key, of index) en een waarde (of value). Array() De eerst manier om een array te vullen is door gebruik te maken van de key => value-syntax: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 2 <html xmlns="http://www.w3.org/999/xhtml"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 5 <title>arrays</title> 6 </head> 7 <body> 8 <?php 9 $fruit = array("appel" => "Groen", "Peer" => "Groen", "Banaan" => "Geel", "Kers" => "Rood", "Citroen" => "Geel", "Pruim" => "Paars", "Aardbei" => "Rood"); 0?> <pre>associatieve array 2 <?php print_r($fruit);?></pre> 3 </body> 4 </html> Of iets leesbaarder: $fruit = array( "Appel" => "Groen", "Peer" => "Groen", "Banaan" => "Geel", "Kers" => "Rood", "Citroen" => "Geel", "Pruim" => "Paars", "Aardbei" => "Rood");?> <pre>associatieve array <?php print_r($fruit);?></pre> Arrays waarvan de sleutel aangeduid wordt door een string-waarde, worden associatieve arrays genoemd. Numerieke arrays maken gebruik van een integer-waarde als sleutel: <?php $fruit = array( 0 => "Groen", => "Groen", 2 => "Geel", 3 => "Rood", 4 => "Geel", 5 => "Paars", 6 => "Rood");?> <pre>nummerieke array <?php print_r($fruit);?></pre> 62 P a g i n a

73 Bij het gebruik van numerieke arrays, beginnen we meestal op positie 0. Een numerieke array kun je vullen zonder het opgeven van de numerieke indexen (keys). De index wordt dan automatisch aangemaakt (laatste index + ). Dit is handig bij het vullen van een array met behulp van een lus <?php for($jaar = 202; $jaar <= 2050; $jaar += 4){ $schrikkeljaren[] = $jaar;?> <pre>numerieke array gevuld met een lus <?php print_r($schrikkeljaren);?></pre> Soms speelt de exacte positie geen rol, en maken we volgende opsomming:: 39 <?php $fruit = array("groen", "Groen", "Geel", "Rood", "Geel", "Paars", "Rood");?> 40 <pre>nummerieke array 4 <?php print_r($fruit);?></pre> Ook hier zal het eerste element automatisch op 0 beginnen en krijgt het volgende element de index, enz. Als je gegevens wil bijvoegen bij een array kun je geen gebruik maken van de array()-functie of je moet gebruik maken van de functies array_push() en array_unshift(). Óf je maakt gebruik van volgende methode. Vierkante haakjes [ ] Om een array te wijzigen wordt de notatie met vierkante haken het meest gebruikt: <?php $assoc_fruit["appel"] = "Groen"; $assoc_fruit["peer"] = "Groen"; $assoc_fruit["banaan"] = "Geel"; $assoc_fruit["kers"] = "Rood"; $assoc_fruit["citroen"] = "Geel"; $assoc_fruit["pruim"] = "Paars"; $assoc_fruit["aardbei"] = "Rood";?> <pre>associatieve array aanpassen <?php print_r($assoc_fruit);?></pre> Je kan op gelijkaardige manier ook gebruik maken van de nummers. Waarvan de meest eenvoudige vorm is: <?php $num_fruit[0] = "Groen"; $num_fruit[] = "Groen"; $num_fruit[2] = "Geel"; $num_fruit[3] = "Rood"; $num_fruit[4] = "Geel"; $num_fruit[5] = "Paars"; $num_fruit[6] = "Rood";?> <pre>numerieke array aanpassen <?php print_r($num_fruit);?></pre> Je kunt dit gebruiken om een array die gedefinieerd is met array(), te wijzigen of gegevens toe te voegen. 63 P a g i n a

74 Opvragen van de gegevens Als we nu deze array oproepen met als gegevens de naam, dan verkrijgen we de er aan toegekende waarde, in dit geval het kleur: 64 <p>een appel is <?php print $assoc_fruit['appel']?>.<br /> 65 Een aardbei is <?php print $assoc_fruit['aardbei']?>.</p> Bij numerieke arrays gebruiken we het volgnummer: 66 <p>het eerste stuk fruit is <?php print $num_fruit[0]?>.<br /> 67 Het zevende stuk fruit is <?php print $num_fruit[6]?>.</p> Nog een voorbeeld: <p><?php $autos = array('ford', 'Renault', 'Jaguar', 'BMW'); for ($i=0; $i < 4; $i++):?> Auto <?php print $i;?>: <?php print $autos[$i];?><br /> <?php endfor;?></p> Bij het uitvoeren van dit script wordt er op de eerste regel een array (autos) aangemaakt. De pointer wijst nu nog naar positie 0 en zal dus ook de string-waarde 'Ford' op deze positie bewaren. Intern wordt de pointer verhoogd en wijst nu naar positie die nu nog leeg is. Vervolgens wordt 'Renault' op positie bewaard, 'Jaguar' op 2 en 'BMW' op 3. In de daaropvolgende for-lus wordt er 4 maal een tekst weergegeven, op de plaats van $i wordt achtereenvolgens 0,, 2 en 3 ingevuld, en op de plaats van $autos[$i] de overeenkomstige waarde uit de array. Vervolgens wordt de regel afgesloten met een nieuwe regel. Gemengde arrays Persoonsgegevens zijn ideaal om een gemengde array mee te demonstreren: <?php $persoon['voornaam'] = 'Dany'; $persoon['naam'] = 'Pinoy'; $persoon['straat'] = 'Prachtstraat'; $persoon['huisnummer'] = 4; $persoon['contact']['telefoon'] = ' '; $persoon['contact']['gsm'] = ' '; $persoon['contact']['web'] = 'webserver.snt'; $persoon['contact'][' '] = <pre>gemengde array <?php print_r($persoon);?></pre> Deze array bevat elementen van het type string, integer en array. Een andere manier om deze array op te vullen is: 85 <?php 86 $persoon = array( 87 'voornaam' => 'Dany', 88 'naam' => 'Pinoy', 89 'straat' => 'Prachtstraat', 90 'huisnummer' => 4, 9 'contact' => array( 92 'telefoon' => ' ', 93 'gsm' => ' ', 94 'web' => 'webserver.snt', 95 ' ' => 96 ) 64 P a g i n a

75 97 ); 98?> 99 <pre>gemengde array initialiseren 00 <?php print_r($persoon);?></pre> Om gegevens op te vragen, gaan we als volgt te werk: 0 <p>we krijgen les van <?php print $persoon['voornaam'];?> <?php print $persoon['naam'];?>.<br /> 02 De lesgever kun je bellen op de nummers <?php print $persoon['contact']['telefoon'];?> en <?php print $persoon['contact']['gsm'];?>.</p> Bij het gebruik van strings als key-naam moeten we ook gebruik maken van aanhalingstekens. Op zich speelt het niet veel rol welke je gebruikt, maar enkele worden het meest gebruikt. $fruit['banaan'] = 'geel'; Als je een variabele gebruikt als key (index), plaats je deze niet tussen aanhalingstekens: $vrucht = 'banaan'; $fruit[$vrucht] = 'geel'; Array leegmaken Om een variabele te verwijderen, maak je gebruik van de functie unset(). Ook voor Arrays kunnen we dit gebruiken: unset ($persoon['voornaam']); unset ($persoon); Met de eerste regel maken we het genoemde element leeg, met de tweede de volledige array. Array-gerelateerde functies Een overzicht van alle mogelijke functies vind je hier: Hieruit halen we de volgende handige functies: Afdrukken van array-inhoud Om een idee te krijgen wat er in een array zit, kunnen we, naar analogie met de print-functie, de print_r()-functie gebruiken. Deze geeft weer wat er exact in een array zit. De output die dit oplevert is niet geschikt om te gebruiken in een uiteindelijke website, maar kan wel gebruikt worden, om tijdelijk de resultaten tijdens het ontwikkelen weer te geven. Sorteren van arrays De meest eenvoudige functie is sort(). Deze functie sorteert alle elementen van een array in oplopende volgorde (van klein naar groot, alfabetisch). De nieuwe array wordt opgeslagen in de oorspronkelijke array. De oorspronkelijke inhoud gaat dus verloren! Een voorbeeld om dit te illustreren: 03 <?php $groenten = array('sla', 'wortelen', 'aardappelen', 'ajuin');?> 04 <pre>ongesorteerde groenten: 05 <?php print_r($groenten);?> 06 </pre> 07 <?php sort($groenten);?> 08 <pre>gesorteerde groeten: 09 <?php print_r($groenten);?></pre> 65 P a g i n a

76 Hier wordt print_r() gebruikt om de inhoud van de array af te drukken, eenmaal niet gesorteerd, eenmaal wel gesorteerd. De tag <pre></pre> zorgt ervoor dat de uitvoer in de browser netjes weergegeven wordt. Deze wordt afgeraden om te gebruiken in je uiteindelijke script. Bij het aanmaken van de nieuwe array, komt "aardappelen" op positie 0 te staan, "ajuin" op,... Als je gebruik maakt van een associatieve array, dan gaan de oorspronkelijke sleutels ook verloren. rsort() zal onze tabel omgekeerd sorteren. Met asort() worden de keys (sleutels) bij de values (waarden) gehouden <?php $fruit = array( 'citroen' => 'geel', 'sinaasappel' => 'oranje', 'banaan' => 'geel', 'appel' => 'groen' );?> <pre>ongesorteerd fruit: <?php print_r($fruit);?></pre> <?php asort($fruit);?> <pre>op kleur gesorteerd fruit: <?php print_r($fruit);?></pre> M.a.w. de array wordt gesorteerd op de waarden en de associatieve sleutels blijven bij de overeenkomstige waarden staan. arsort() zal hetzelfde doen als asort, maar in omgekeerde volgorde. Je kan ook sorteren op de key (sleutel), terwijl de waarde bij de betreffende key (sleutel) blijft met ksort() of omgekeerd met krsort(). 23 <?php ksort($fruit);?> 24 <pre>op naam gesorteerd fruit: 25 <?php print_r($fruit);?></pre> Tellen van het aantal elementen in een array Kunnen we met de zelfverklarende functie count(): 26 <p>de array $fruit bevat <?php print count($fruit);?> elementen, de array $groenten bevat <?php print count($groenten);?> elementen.</p> Count() geeft een getal terug die het aantal elementen aangeeft, of 0 indien de array leeg is of niet bestaat, controleer dus eerst met de functie is_array() om zeker te zijn van het resultaat. Als je een array hebt waar een aantal elementen meerdere malen in voorkomen, en je wilt weten hoeveel maal elk element voorkomt, gebruiken we array_count_values(). Deze functie geeft een array terug met enkel de waarden van de oude array als nieuwe sleutel, en het aantal maal dat deze voorkomt als nieuwe waarde: 27 <?php 28 $huisdieren = array( 29 "Dirk" => "hond", 30 "Sophie" => "paard", 3 "Ingrid" => "eekhoorn", 32 "Lucie" => "paard", 33 "Bart" => "hond" 34 ); 66 P a g i n a

77 35 $aantal_huisdieren = array_count_values($huisdieren); 36?> 37 <p><?php print $aantal_huisdieren["hond"];?> personen hebben als huisdier een hond.</p> Strings omzetten naar arrays en omgekeerd Het kan voorkomen dat je een string hebt, die je wilt opslaan als een array. Hiervoor kunnen we de functie explode() gebruiken: 38 <?php 39 $zin = "De woorden in deze zin kan je met een array eenvoudiger bewerken."; 40 $woordarray = explode (" ", $zin); 4?> 42 <p><?php print $zin;?></p> 43 <pre>bovenstaande zin bevat de volgende woorden: 44 <?php print_r($woordarray);?></pre> Regel 40 splitst de zin in verschillende array-elementen, daarbij wordt een spatie als scheidingsteken tussen de verschillende woorden (array-elementen) gebruikt. Omgekeerd kan ook met implode(): <?php $mijnhuisdieren = array("hond", "kat", "parkiet", "goudvis"); $huisdieren_string = implode (", ", $mijnhuisdieren);?> <p>ik heb <?php print count($mijnhuisdieren);?> huisdieren: <?php print $huisdieren_string?>.</p> De functie join() heeft hetzelfde resultaat. Minimum en maximum waarden zoeken Het maximum en het minimum zijn te vinden met max() en min(): 50 <?php $meetwaarden = array(, 56, -5, 6);?> 5 <p>de meetwaarden <?php print implode (", ", $meetwaarden);?> variëren tussen het maximum <?php print max($meetwaarden);?> en het minimum <?php print min($meetwaarden);?>.</p> Gegevens zoeken in een array Met in_array() kunnen we zoeken of een bepaalde waarde voorkomt in de array: 52 <?php if(in_array(, $meetwaarden)):?> 53 <p>de meetwaarden bevatten de waarde.</p> 54 <?php elseif(in_array(0, $meetwaarden)):?> 55 <p>de meetwaarden bevatten de waarde 0.</p> 56 <?php endif;?> Met de functie array_key_exists(): controleer je of een bepaalde sleutel in een array voorkomt: 57 <?php if(array_key_exists("bart", $huisdieren)):?> 58 <p>bart heeft als huisdier een <?php print $huisdieren['bart'];?>.</p> 59 <?php else:?> 60 <p>bart heeft geen huisdier.<p> 6 <?php endif;?> De sleutels haal je uit een array met array_keys(): 67 P a g i n a

78 62 <?php $eigenaars = array_keys($huisdieren);?> 63 <p>de huisdieren hebben de volgende baasjes: <?php print implode (", ", $eigenaars);?>.</p> Om enkel de waarden over te houden gebruiken we array_values(), die een nieuwe array oplevert, met enkel de waarden, zonder de associatieve sleutels. Een array met enkel de unieke waarden halen we op met array_unique(). Arrays doorlopen Een array kun je doorlopen met een for-lus, in combinatie met een count-functie. Maar het nadeel hiervan is, als je de index ook nodig hebt, dat je hier het raden naar hebt. Bij numerieke arrays is dit geen zo'n probleem, maar bij associatieve arrays kunnen we niet verder. Met de foreach-lus kunnen we eenvoudig een array doorlopen en er alle elementen van weergeven. De foreach loopt totdat alle elementen de revue gepasseerd zijn. Een foreach kunnen we op 2 manieren gebruiken, om enkel de values weer te geven en om de values én de keys weer te geven: <p>mijn vrienden hebben de volgende huisdieren: <?php foreach($huisdieren as $huisdier){ print $tussenstuk. $huisdier; $tussenstuk = ", ";?>.</p> <p> <?php foreach($huisdieren as $baas => $huisdier):?> <?php print $baas;?> heeft als huisdier een <?php print $huisdier;?>.<br /> 74 <?php endforeach;?> 75 </p> Let op het gebruik van HTML code binnen de laatste foreach lus. Voorgedefinieerde arrays Er zijn een aantal variabelen, voornamelijk arrays, die gebruikt worden voor speciale doeleinden. Het grootste gedeelte hiervan zijn zogenaamde superglobals, omdat ze voornamelijk dienen om gegevens tussen pagina's uit te wisselen. $_SESSION, $_POST, $_GET en $_REQUEST. Deze zullen we vaak gebruiken, om waarden van een pagina, voornamelijk via formulieren en hyperlinks door te sturen naar een volgende pagina. De $_POST en de $_GET zijn we al tegengekomen, de $_REQUEST is een combinatie van de $_POST en de $_GET, maar het gebruik ervan wordt afgeraden. De $_SESSION zullen we gebruiken om gegevens over meerdere pagina's toegankelijk te maken. $_SERVER Variabelen die bepaalde instellingen van de server bevatten. Deze kunnen enkel gelezen worden. De opdracht phpinfo() geeft alle instellingen van PHP op de webserver weer. $_COOKIE Variabelen die gebruikt worden voor en door cookies. Met cookies kunnen we instellingen opslaan op de computer van de bezoeker van de webpagina. Met deze cookies kunnen we bijvoorbeeld een gebruiker omleiden naar een op voorhand gekozen taal, of een gebruiker 68 P a g i n a

79 automatisch laten aanmelden op een pagina waar hij bij een vorig bezoek zijn gegevens achtergelaten heeft. $_FILES Een variabele die namen en gegevens bevat van geüploade bestanden. Deze kunnen we dan gebruiken om bijvoorbeeld een fotoboek mee te maken. $GLOBALS Deze variabele wordt gebruikt om globale variabelen te gebruiken, die over verschillende functies heen gebruikt worden, voorbeelden zijn gegevens van databases, zoals de naam ervan, de databasegebruiker,... Op de site php.net staat een volledige Array Manual met alle informatie i.v.m. arrays in PHP. Oefeningen Het project van deze cursus: Webshop Om het script nog flexibeler te maken, zullen we onze gegevens niet meer in gewone variabelen plaatsen maar in arrays. Ook kunnen we nu een winkelmandje toevoegen om weer te geven welke gegevens er al besteld zijn. Opslaan van de gegevens in arrays Plaats de volgende PHP code op de juiste plaats in model.php: switch ($cat){ // items naargelang categorie case 'Webdesign': // categorie Webdesign $items = array( "Dreamweaver Deel ", "Dreamweaver Deel 2", "Javascript", "PHP", "Dreamweaver Eindwerk" ); break; Ga op dezelfde manier te werk om de andere categorieën in het array $items op te slaan. Aangezien we met een foreach lus gaan werken, hebben we de vier regels om het aantal items te berekenen niet meer nodig. Plaats deze voorlopig tussen /* en */ waardoor deze regels niet langer actief zijn (ze worden als commentaar beschouwd). Nadat alle aanpassingen uitgevoerd werden en alles naar behoren werkt, mag je deze uitgeschakelde code verwijderen. Doorlopen van de gegevens In index.php (View) passen we de regels om de items weer te geven aan: <?php foreach ($items as $item):?> <tr> <td><?php print $item;?></td> <td><a href="inschrijven.php?cursus=<?php print urlencode($item);? >&cat=<?php print $cat;?>">inschrijven</a></td> </tr> <?php endforeach;?> Na het succesvol testen van de webshop, mag je de door commentaar uitgeschakelde regels verwijderen. 69 P a g i n a

80 Meerdere categorieën Als we nu het aantal categorieën ook makkelijker bewerkbaar willen maken, dan kunnen we deze ook in een array plaatsen. Dit wordt de array voor de categorieën: $categorieen = array( "Webdesign", ); Voeg deze code toe aan het begin van het bestand... De regel waarmee je de standaard categorie vastlegt, wordt dan: $cat = $categorieen[0]; // standaard categorie M.a.w. de eerste categorie in het array $categorieen. De hyperlinks met de categorieën worden dan opgebouwd met: <p> <?php foreach(... as $categorie):?> <a href="index.php?cat=<?php print $categorie;?>"><?php print $categorie;?></a> <?php if($categorie!= $categorieen[count($categorieen) - ]):?> <?php...?> <?php...?> </p> Om de items een omschrijving en een prijs te geven gaan we de array items omvormen tot een gemengde array: case 'Webdesign': // categorie Webdesign $items = array( array( "naam" => "Dreamweaver Deel ", "omschrijving" => "Basis webdesign", "prijs" => ), array( "naam" => "Dreamweaver Deel 2", "omschrijving" => "Gevorderde webdesign", "prijs" => ), array( "naam" => "Javascript", "omschrijving" => "Programmeren in de browser", "prijs" => ), array( "naam" => "PHP", "omschrijving" => "Programmeren op de server", "prijs" => ), array( "naam" => "Dreamweaver Eindwerk", "omschrijving" => "Webdesign in de praktijk", 70 P a g i n a

81 ) "prijs" => ); break; De tabel wordt dan als volgt aangepast: <table border="0"> <tr> <th>cursus</th> <th>omschrijving</th> <th>prijs</th> <th>inschrijven</th> </tr> <?php foreach ($items as $item):?> <tr> <td><?php print $item['naam'];?></td> <td><?php...?></td> <td> <?php print $item['prijs'];?></td> <td><a href="inschrijven.php?cursus=<?php print urlencode($item['naam']);?>&cat=<?php print $cat;? >">Inschrijven</a></td> </tr> <?php endforeach;?> </table> Pas de andere categorieën aan tot je de volgende resultaten bekomt: 7 P a g i n a

82 Speelkaarten Definieer twee array's, één voor de kleuren van de kaarten (Harten, Ruiten, Schoppen en Klaveren) en één voor waarden van de kaarten (, 2, 3, 4, 5, 6, 7, 8, 9, 0, Boer, Vrouw, Heer). Maak met behulp van deze twee array's een derde array voor alle 52 speelkaarten. Laat uit deze lijst een willekeurige kaart weergeven (gebruik daarvoor de functie array_rand(): de werkwijze en correcte notatie zoek je op de site php.net). 0 willekeurige speelkaarten trekken Pas de vorige oefening aan zodat er 0 willekeurige (en unieke) speelkaarten in de browser worden weergegeven. 0 willekeurige speelkaarten grafisch weergeven Pas de vorige oefening aan zodat de afbeeldingen van de 0 willekeurige kaarten in de browser weergegeven worden. De HTML code om een afbeelding van de Harten kaart (uit de gepubliceerde map kaarten) weer te geven is: <img src="kaarten/harten_.svg" /> Bezoeker bepaalt aantal te trekken speelkaarten Pas de vorige oefening aan zodat de bezoeker kan kiezen hoeveel kaarten hij wil zien. Laat het formulier wijzen naar de eigen pagina: als resultaat heb je dus pagina, waarin de gebruiker het aantal kaarten kiest, en waarin het aantal weergegeven wordt. HTML en arrays Ook in html kun je arrays gebruiken voor input-velden, dit ziet er als volgt uit: <input type="text" name="getallen[]> <input type="text" name="getallen[]> <input type="text" name="getallen[]> Maak nu een script waarbij een gebruiker kan bepalen hoeveel getallen hij wil ingeven. Daarna geef je het gevraagde aantal velden weer. Hier kan de gebruiker dan zijn getallen invullen. Bij het klikken op de knop Berekenen, wordt het maximum, het minimum en het gemiddelde weergegeven. Daaronder geef je de getallen in oplopende volgorde weer. 72 P a g i n a

83 PHP Functies Algemeen Functies zijn mini-programmaatjes, die een aantal zaken voor ons uitvoeren. In het vorige hoofdstuk hebben we al een paar eenvoudige functies gezien, zoals print(), echo(), unset(), isset(), is_int(),... In dit hoofdstuk bekijken we functies nog wat meer in detail en zullen we zelf onze eigen functies maken. Voorbeelden Gemiddelde berekenen In een bepaald programma moeten we regelmatig het gemiddelde berekenen van een onbekend aantal getallen. We weten dat het berekenen van het gemiddelde het optellen van de getallen is, en daarna deze som delen door het aantal getallen. Dit kan een oplossing zijn: <?php //functies.php function som($nummers){ $som = 0; foreach ($nummers as $nummer){ $som += $nummer; return $som; function gemiddelde(){ $aantal = func_num_args(); $getallen = func_get_args(); $som = som($getallen); $gem = $som / $aantal; return ($gem); $nummer = 2; $nummer2 = 5; $nummer3 = 8; $nummer4 = 3; $nummer5 = 6; $het_gemiddelde = gemiddelde($nummer, $nummer2, $nummer3, $nummer4, $nummer5);?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> 73 P a g i n a

84 26 <meta http-equiv="content-type" content="text/html; charset=utf8" /> 27 <title>functies</title> 28 </head> 29 <body> 30 <p>het gemiddelde van de getallen is <?php print $het_gemiddelde;? >.</p> 3 </body> 32 </html> Opbouw van functies Voorbeeld In de PHP-handleiding (php.net) zie je dat functies als volgt uitgelegd worden: string addslashes (string $str) Dit lezen we als volgt: de naam van de functie is addslashes; de waarde die de functie addslashes teruglevert is van het type string; de functie neemt argument aan; het eerste argument vertelt de functie in welk type het argument doorgegeven moet worden, in dit geval is dit het type string; Uit de handleiding kunnen we iets meer details over deze functie halen. Een uittreksel: addslashes (PHP 4, PHP 5) addslashes Quote string with slashes Description string addslashes ( string $str ) Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte). An example use of addslashes() is when you're entering data into a database. For example, to insert the name O'reilly into a database, you will need to escape it. It's highly recommended to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using does't have an escape function and the DBMS uses \ to escape special chars, you can use this function. This would only be to get the data into the database, the extra \ will not be inserted. Having the PHP directive magic_quotes_sybase set to on will mean ' is instead escaped with another '. The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping. The function get_magic_quotes_gpc() may come in handy for checking this. De functie addslashes is toegankelijk in versie 4 én 5 van PHP. 74 P a g i n a

85 Deze functie zal dus een backslash toevoegen voor een aanhalingsteken ('), een dubbel aanhalingsteken ("), een backslash (\) of voor NULL. Dit is vooral van belang als je een string wilt gebruiken in databasequeries: als er in je string gewone aanhalingstekens zouden staan, zal de query zich hierin verslikken. Hou er wel rekening mee dat dit standaard al gedaan wordt, en dat het aangewezen is om eerst te controleren met get_magic_quotes_gpc() of dit al werd uitgevoerd. Voorbeeld 2 Een 2de voorbeeldje die in dezelfde reeks thuishoort is volgende: string htmlspecialchars ( string string [, int quote_style]) Deze functie vertelt ons het volgende: de functienaam is htmlspecialchars; de functie levert als resultaat een string op; de functie neemt verplicht argument string van het type string; de functie neemt een 2de optioneel argument (te zien aan de vierkante haakjes []) quotestyle van het type integer; Voor meer uitleg weer een stukje uit de handleiding: htmlspecialchars (PHP 4, PHP 5) htmlspecialchars Convert special characters to HTML entities Description string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] ) Certain characters have special significance in HTML, and should be represented by HTML entities if they are to preserve their meanings. This function returns a string with some of these conversions made; the translations made are those most useful for everyday web programming. If you require all HTML character entities to be translated, use htmlentities() instead. This function is useful in preventing user-supplied text from containing HTML markup, such as in a message board or guest book application. The translations performed are: '&' '"' ''' '<' '>' (ampersand) becomes '&' (double quote) becomes '"' when ENT_NOQUOTES is not set. (single quote) becomes '&#039;' only when ENT_QUOTES is set. (less than) becomes '<' (greater than) becomes '>' Deze functie zorgt er dus voor dat ingevoerde karakters &, ", ', < en > omgezet worden naar een bruikbare code. Dit zal er voor zorgen dat code die ingegeven wordt via gastenboeken of forums, geen HTML-code zal produceren. Een uitgebreider voorbeeld: <?php $var = "<a href='http://www.snt.be'>snt Brugge</a>";?> <p>de variabele bevat HTML-code: <?php print $var;?>.<br /> 75 P a g i n a

86 35 HTML-code weergeven: <?php print htmlspecialchars($var);?>.</p> Nog functies Op de officiële website van PHP (php.net) vind je de volledige lijst met alle PHP-functies, maar in de loop van de cursus zullen we er een flink aantal tegenkomen, waarvan je de volledige uitleg altijd op deze site terugvindt. Van print en echo, en nog andere, hebben we gezegd dat dit niet echt functies zijn, maar language constructions. Het verschil met functies zit er hem in, dat echte functies een waarde teruggegeven aan het programma zelf, en language constructions niet. Om het verschil duidelijk te maken, worden functies altijd met ronde haakjes gebruikt, en language constructs niet. Eigen functies Naast het gebruik van bestaande functies, kunnen we ook eigen functies maken. Zoals we hierboven gezien hebben, kunnen we functies aanroepen, met behulp van parameters en wordt er door de meeste functies een waarde teruggegeven. Een functie begint altijd met het kernwoord function, gevolgd door de naam van de functie let er wel op dat deze nog niet bestaat in de bestaande functielijst, anders krijg je conflicten <?php function product($argument, $argument2){ $product = $argument * $argument2; return $product; $getal = 0; $getal2 = 20;?> <p>het product van <?php print $getal;?> en <?php print $getal2;? > is <?php print product($getal, $getal2);?>.</p> Hoe zit dit in mekaar? Voor de duidelijkheid plaatsen we de functie vóór de rest van de code. Dit is niet verplicht, maar het maakt de code wel overzichtelijker. Nog beter is trouwens de functies te groeperen in een bibliotheekbestand. De functie begint met het kernwoord function, gevolgd door de functienaam. Let er op: deze is niet hoofdlettergevoelig zoals bij variabelen wel het geval is (product = Product = PRODUCT = product). Probeer wel je functienaam op te bouwen volgens het camelcase-principe. Tussen haakjes worden de namen van de parameters gebruikt, zoals die in de functie gebruikt zullen worden, deze bepalen ook ineens het aantal mogelijke argumenten. Na de haakjes openen we de accolades, waarin de functie uiteindelijk begint. Binnen deze functie mag elke geldige PHP-code gebruikt worden. Het is zelfs mogelijk om andere, eigen, functies op te roepen, of om de dezelfde functie aan te roepen (recursieve functies). Vergeet ook niet om de accolades op het einde opnieuw te sluiten. Na deze laatste sluitaccolade plaats je geen puntkomma. De waarde die aan het hoofdscript wordt teruggeleverd, wordt bepaald door de returnwaarde. Deze is niet altijd nodig, soms zul je het afdrukken van de som ook binnen de functie kunnen afwerken, maar ook dan nog wordt er een returnwaarde verwacht door de functie, om eventuele testen te kunnen uitvoeren. Meestal wordt er een true of een false aan het hoofdprogramma teruggegeven, naargelang de functie al dan niet gelukt is. Binnen het eigenlijke script, kunnen we de functie dan gebruiken, zoals een normale functie. 76 P a g i n a

87 Bij het uitvoeren van het script, herkent de parser de functie en weet dat deze bestaat, zodra er in het script dan een aanroep gebeurt naar de functie, wordt de functie op de plaats van de aanroep gezet. Variabelen en functies Het gebruik van variabelen kan nu wel verwarrend worden, als we binnen de functie én binnen het hoofdscript gebruik willen maken van variabelen met dezelfde namen. Variabelen zijn enkel geldig in het script dat uitgevoerd wordt; zodra er naar een deelfunctie gesprongen wordt, zijn deze variabelen ontoegankelijk. Het is ook zo dat de inhoud van een variabele altijd verloren gaat als er gesprongen wordt naar een volgende pagina. Om dit probleem op te lossen maken we gebruik van globale variabelen. Lokale en globale variabelen Lokale variabelen Variabelen zijn, zonder speciale declaratie, altijd local. Dit betekent dat ze niet bereikbaar zijn buiten de functie of buiten het hoofdscript. Een voorbeeld: <?php function lokaal(){ $a = 0; print $a; $a = 4;?> <p style="margin-bottom:0">de waarde van de lokale variabele $a:</p> <ul style="margin-top:0"> <li>voor de functie-aanroep: a = <?php print $a;?>,</li> <li>binnen de functie: a = <?php lokaal();?>,</li> <li>na de functie-aanroep: a = <?php print $a;?>.</li> </ul> Neem bovenstaande over in, en sla op. Controleer de uitvoer. Wat zie je?... Om een variabele toch bereikbaar te maken buiten deze functie maken we gebruik van het sleutelwoord global. Globale variabelen Onze gebruikte variabelen zijn wel beschikbaar over ons gehele script, daarom noemen we deze variabelen global. Het global maken kan wel enkel en alleen binnen de functie. Een manier om variabelen verder beschikbaar te hebben, is het gebruik van de speciale arrayvariabele $GLOBALS <?php function globaal(){ $GLOBALS['a'] = 0; print $GLOBALS['a']; $a = 4;?> <p style="margin-bottom:0">de waarde van de globale variabele $a:</p> <ul style="margin-top:0"> <li>voor de functie-aanroep: a = <?php print $a;?>,</li> <li>binnen de functie: a = <?php globaal();?>,</li> <li>na de functie-aanroep: a = <?php print $a;?>.</li> </ul> 77 P a g i n a

88 En voer opnieuw uit. Wat is er gebeurd?... Variabelen doorgeven via verwijzing (referentie) Een andere manier om variabelen aan een functie door te geven is door te verwijzen naar het adres waar de variabele wordt opgeslagen. Zo wordt de variabele ook bereikbaar van buiten de functie. Om te verwijzen naar het adres van een variabele, laten we deze variabele voorafgaan door een ampersand (&). Voorbeeld: <?php function incrementeren(&$getal){ $getal++; $a = 5;?> <p style="margin-bottom:0">de waarde van de variabele doorgegeven via referentie $a:</p> <ul style="margin-top:0"> <li>voor de functie-aanroep: a = <?php print $a;?>,</li> <li><?php incrementeren($a);?>na de functie-aanroep: a = <?php print $a;?>.</li> </ul> Als gebruiker van een functie moet je dus niet weten of deze functie met het adres werkt, of met de variabele zelf. Het is natuurlijk wel van belang om te weten of je originele waarde niet gewijzigd werd.. Statische variabelen In een normale functie gaat de inhoud van variabelen verloren, zodra de functie verlaten wordt. Om deze inhoud en variabele toch te bewaren, maken we gebruik van statische variabelen. De waarde van dergelijke variabele wordt telkens bijgehouden als de functie verlaten wordt. De variabele is echter niet toegankelijk buiten de functie! Een voorbeeld: <?php function statisch(){ static $a = ; print "$a"; $a = $a + ;?> <p style="margin-bottom:0">de waarde van de statische variabele $a:</p> <ul style="margin-top:0"> <li>bij de eerste functie-aanroep: a = <?php statisch();?>,</li> <li>bij de tweede functie-aanroep: a = <?php statisch();?>,</li> <li>bij de derde functie-aanroep: a = <?php statisch();?>.</li> </ul> Tik dit in, sla op, voer uit en bekijk de uitvoer. Hoe komt dit?... Argument met een standaardwaarde Het is ook mogelijk om een argument in een functie reeds een standaard waarde mee te geven. Dit kan het gebruik van een functie soms eenvoudiger maken: 95 <?php 96 function dessert($dessert = "rijstpap"){ 78 P a g i n a

89 print $dessert; return true; $morgen = "yoghurt";?> <p style="margin-bottom:0">standaard argumenten:</p> <ul style="margin-top:0"> <li>vandaag is er <?php dessert();?> als dessert.</li> <li>morgen is er <?php dessert($morgen);?> als dessert.</li> </ul> Aantal argumenten opvragen Soms wil je een functie, waarbij het exacte aantal argumenten niet vastligt. Met de functies func_num_args(), func_get_arg() en func_get_args() kunnen we hier mee overweg: <?php function aantalargumenten(){ $argumenten['aantal'] = func_num_args(); $argumenten['twee'] = func_get_arg(); $argumenten['argumenten'] = func_get_args(); return $argumenten;?> <pre>functies met een variabel aantal argumenten: <?php print_r(aantalargumenten('eerste', 'tweede', 'derde'));? ></pre> Let goed op het verschil tussen func_get_arg() en func_get_args(). De eerste levert één waarde op, de tweede een array. Bij func_get_arg() bevat de array-waarde met de index 0 het eerste argument. Recycleren van functies In bovenstaande voorbeelden hebben we de functies in de pagina opgenomen, maar meestal is het handiger om een functie in meerdere pagina's te kunnen gebruiken, denk maar aan een test of je aangemeld bent, of een teller die het bezoek op elke pagina moet bijhouden, of zelfs een banner die op elke pagina voorkomt, of Al onze functies zullen we opslaan in bibliotheekbestanden. Deze bestanden kunnen we dan importeren door gebruik te maken van include- en require-statements. Deze statements zorgen ervoor, dat we een script kunnen binnenhalen in een pagina of een ander script. Je kunt het het best vergelijken met externe javascript. Stel dat je een volledige bibliotheek met eigen functies hebt aangelegd, en dat je deze in verschillende pagina's of zelfs verschillende websites wilt gebruiken. Om niet telkens de volledige functies te moeten kopiëren, sla je al je eigen functies op in bibliotheekbestanden. Deze bibliotheekbestanden importeren we in andere scripts met de control-structure include(). Maak daarvoor een nieuwe PHP-pagina en verwijder indien nodig alle HTML code. Verplaats alle PHP code met functies uit de oorspronkelijke pagina en plak deze in de nieuwe PHP-pagina (script) <?php //functies.inc.php function som($nummers){ $som = 0; foreach ($nummers as $nummer){ $som += $nummer; 79 P a g i n a

90 return $som; function gemiddelde(){ $aantal = func_num_args(); $getallen = func_get_args(); $som = som($getallen); $gem = $som / $aantal; return ($gem); function product($argument, $argument2){ $product = $argument * $argument2; return $product; function lokaal(){ $a = 0; print $a; function globaal(){ $GLOBALS['a'] = 0; print $GLOBALS['a']; function incrementeren(&$getal){ $getal++; function statisch(){ static $a = ; print "$a"; $a = $a + ; function dessert($dessert = "rijstpap"){ print $dessert; return true; function aantalargumenten(){ $argumenten['aantal'] = func_num_args(); $argumenten['twee'] = func_get_arg(); $argumenten['argumenten'] = func_get_args(); return $argumenten;?> Sla het PHP script met de functies op als functies.inc.php. In de oorspronkelijke PHP-pagina roepen we dan het bestand functies.inc.php op (de eerste 0 regels van de PHP-pagina): <?php //functies.php include 'functies.inc.php'; $nummer = 2; $nummer2 = 5; $nummer3 = 8; $nummer4 = 3; $nummer5 = 6; $het_gemiddelde = gemiddelde($nummer, $nummer2, $nummer3, $nummer4, $nummer5); 9?> 0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> 80 P a g i n a

91 Naast include kunnen we require() gebruiken. Het verschil tussen beide zit hem in de foutafhandeling. Als een bestand ge-include wordt, maar het bestand bestaat niet, zal dit resulteren in een foutmelding zodra de functie opgeroepen wordt. Door gebruik te maken van require zal de parser onmiddellijk een foutmelding geven, als hij het gevraagde bestand niet vindt en het script onderbreken. Gebruik include voor het aanroepen van minder kritische bibliotheken. Verder kunnen we gebruik maken van include_once() en require_once(). Deze doen net hetzelfde als include() en require(), maar zorgen er voor dat het include-bestand maximum één keer aangeroepen wordt, om eventuele fouten veroorzaakt door het meermaals definiëren van dezelfde functies te vermijden. OPLETTEN!! Vaak krijgen include bestanden de extentie.inc mee. Dit mag, omdat het bestand door de php-parser wordt aangeroepen en niet door de webserver. Hou er echter rekening mee, dat als iemand de naam van dit bestand weet, ze via de browser dit bestand kunnen oproepen. De inhoud zal letterlijk weergegeven worden omdat het bestand niet eindigt op.php en de parser zal dit bestand dan dus ook niet verwerken. Om dit te voorkomen zijn er een aantal oplossingen: In de webserverconfiguratie zorg je ervoor dat de gebruiker geen.inc bestanden kan opvragen. Daarvoor heb je wel toegang tot de webserver nodig. Je geeft je bestand de extentie.php of.inc.php. Op die manier wordt het sowieso door de parser gehaald, en aangezien er geen print zal instaan van je gegevens, zullen deze dan ook niet weergegeven worden. Je plaatst je bibliotheekbestanden buiten de map waar je HTML-documenten opgeslagen worden. Daarvoor heb je wel toegang tot de webserver nodig. Specifieke functies voor getallen Integers en floats Zoals we reeds gezien hebben kan PHP overweg met gehele getallen (integers) en kommagetallen (floats). Gehele getallen worden opgeslagen in 32bits geheugenlocaties. Waardoor we getallen kunnen hebben gaande van tot Als er nu echter nog waarde bijkomt bij het maximum, of afgaat van het minimum, dan wordt het getal opgeslagen als een float (overflow), waarvoor er 64bits in het geheugen voorzien zijn. Volgend voorbeeld (toevoegen aan functies.php) illustreert dit: <?php $var = ;?> <pre>overgang van type door overflow van variabelen: <?php var_dump($var++);?> <?php var_dump($var);?></pre> De grenzen van integers kunnen echter verschillend zijn op verschillende systemen, afhankelijk van de processor en het besturingssysteem (32- of 64-bit). Floats hebben als voordeel dat ze zowel heel grote als heel kleine getallen kunnen opslaan, maar hebben als nadeel dat ze bij bewerkingen een deel van de precisie kunnen verliezen. Gebruik daarom nooit floats als je twee getallen met elkaar wil vergelijken. Bij getallen mag je de decimale, hexadecimale en octale schrijfwijze gebruiken: <?php $pos_int $neg_int $oct_int $hex_int?> = = = = 42; //positieve integer -42; //negatieve integer 052; //octaal getal 0x2A; //hexadecimaal getal 8 P a g i n a

92 <p>inhoud variabele met positieve integer: <?php print $pos_int;?>, met negatieve integer: <?php print $neg_int;?>, met octaal getal: <? php print $oct_int;?>, met hexadecimaal getal: <?php print $hex_int;? >.</p> Floats voor decimale getallen en getallen met exponentiële notatie: <?php $pos_float = 42.0; //positieve float $neg_float = ; //negatieve float $grote_float =.2e65; //een heel groot getal $kleine_float = 0e-75; //een heel klein getal?> <p>inhoud variabele met positief kommagetal: <?php print $pos_float;? >, met negatief kommagetal: <?php print $neg_float;?>, met zeer groot kommagetal: <?php print $grote_float;?>, met zeer klein kommagetal: <? php print $kleine_float;?>.</p> Werken met getallen Naast de standaardoperators +, -, /, * en % kent PHP nog een uitgebreid aantal functies om op getallen los te laten. Absolute waarde De absolute waarde van een getal is de waarde van het getal zonder het teken. Daarvoor kunnen we de functie abs() gebruiken: <p>de absolute waarde van -22 is <?php print abs(-22);?>, van 22 is <?php print abs(22);?>, van is <?php print abs( );?>.</p> Hoger, lager Een getal naar boven of naar onder afronden kan zonder problemen. Het resultaat is van het type float, omdat het doorgegeven getal mogelijks te groot zijn voor een integer: <p>het getal 27.3 afgerond naar boven is <?php print ceil(27.3);?>, naar beneden <?php print floor(27.3);?>.</p> Met ceil() rond je altijd af naar het hoger gelegen gehele getal, met floor() naar het lager gelegen gehele getal. Afronden Bovenstaande functies zijn niet handig bij het "echte" afronden. Daarvoor gebruiken we round(), die getallen naar boven afrond als het decimaal 5 is of groter, en naar onder als het decimaal kleiner is dan 5. Het is ook mogelijk om een precisie mee te geven, tot op hoeveel getallen er afgerond moet worden. Een negatieve precisie rond af op de tientallen, hondertallen, duizendtallen,...: <p>0.4 afronden wordt <?php print round(0.4);?>, 0.5 afronden wordt <?php print round(0.5);?>, op 2 cijfers afronden wordt <?php print round(34.345, 2);?>, op duizendtallen afronden wordt <?php print round( , -3);?>.</p> Getalstelsels Natuurlijk zijn er ook een aantal functies om getallen om te zetten tussen de verschillende meest gebruikte talstelsels zoals: decimaal, hexadecimaal, octaal en binair: 82 P a g i n a

93 decimaal -> binair string decbin(integer number) binair -> decimaal integer bindec(string binair_getal) decimaal -> hexadecimaal string dechex(integer number) hex -> decimaal integer hexdec(string hex_getal) decimaal -> octaal string decoct(integer number) octaal -> decimaal integer octdec(string oct_getal) Random getallen Om willekeurige getallen te genereren kent PHP de pseudo-random-functie rand(): integer rand ([integer min, integer max]) Zonder argumenten geeft de functie een geheel getal weer tussen 0 en een getal bepaald door getrandmax(). Getrandmax() is afhankelijk van het systeem. Als rand() aangeroepen wordt met een minimum en een maximum, krijg je een geheel getal tussen deze: <p>een willekeurig getal tussen 0 en <?php print getrandmax();?>: <? php print rand();?>, een willekeurig getal tussen en 0: <?php print rand(, 0);?>.</p> Specifieke functies voor datums Met PHP krijgen we heel wat mogelijkheden voor het manipuleren en werken met datums. De meeste datum-gerelateerde functies werken op basis van de Unix-timestamp. Deze timestamp is het aantal seconden die er verstreken zijn sedert januari :00:00 GMT. De meeste systemen slaan deze waarde op in een 32bits integer, waardoor het mogelijk wordt om te rekenen met datums van 3 december 90 tot 9 januari Door deze beperking moeten we rekening houden met problemen die kunnen optreden bij integeroverflows. Huidige tijd Om de huidige tijd als timestamp weer te geven kunnen we werken met de functie: integer time(void); Voorbeeld: <p> januari :00:00 GMT ligt reeds <?php print time();?> seconden in het verleden.<br /> Volgende week al <?php print time() + (60 * 60 * 24 * 7);?> seconden.</p> 83 P a g i n a

94 Aangezien de tijd als een aantal seconden wordt weergegeven, is het mogelijk de timestamp voor over 7 dagen te berekenen (tweede regel in het voorbeeld). Datums weergeven Vertrekkende van timestamps kunnen we ook een datum weergeven, met een opmaak naar wens. Hiervoor maken we gebruik van de functie: string strftime ( string format [, int timestamp]) waarbij het formaat zal bestaan uit of meerdere van in de tabel opgesomde onderdelen (voor een volledige lijst: zie de php.net). Let ook op het verschil in hoofd- en kleine letters: Karakter Omschrijving Resultaat Dagen %a Verkorte tekstuele weergave van de weekdag za %A Volledige tekstuele weergave van de weekdag zaterdag %d Dag van de maand, 2 cijfers 0 tot 3 %e Dag van de maand, zonder voorafgaande nullen tot 3 %j Dag van het jaar (beginnend bij 0) 00 tot 366 %u ISO-860 numerieke weergave van de weekdag (maandag) tot 7 (zondag) %w Numerieke weergave van de weekdag 0 (zondag) tot 6 (zaterdag) Week %V ISO-860 weeknummer van het jaar, beginnend 42 (de 42ste week van het op maandag jaar) Maand %B Volledige tekstuele weergaven van de maand januari tot december %m Numerieke weergave van de maand, 2 cijfers 0 tot 2 %b Korte tekstuele weergave van de maand jan tot dec %Y Volledige numerieke weergave van het jaar 999 of 202 %y Numerieke weergave van het jaar, 2 cijfers 99 of 2 %P Weergave am of pm am of pm %p Weergave AM of PM AM of PM %l (kleine L) 2uur-formaat, zonder voorafgaande nullen tot 2 %I 2uur-formaat, inclusief voorafgaande nullen 0 tot 2 %H 24uur-formaat, inclusief voorafgaande nullen 00 tot 23 %M Minuten, incl nullen 00 to 59 Jaar Tijd %S Seconden, incl nullen 00 tot 59 Als er geen timestamp wordt opgegeven, wordt de huidige tijd als basis gebruikt. Om een tijdstip in een bepaalde taal- en landnotatie weer te geven, stel je alle lokale instellingen voor Nederlandstalig België in met de functie: string setlocale(lc_all, 'nl_be'); Voorbeelden: <?php setlocale(lc_all, 'nl_be');?> <p>vandaag: <?php print strftime("%a %e %B %Y");?>, tijd: <?php print strftime("%h:%m");?>. Morgen: <?php print strftime("%a %e %B %Y", time() + (60 * 60 * 24));? >.</p> 84 P a g i n a

95 Zelf tijden samenstellen Je kunt de timestamp van een tijd tussen 3 december 90 tot 9 januari 2038 aanmaken met de functies mktime() en gmmktime(): int mktime(int hour, int minute, int second, int month, int day, int year [, int is_dst]) mktime() gebruik je als volgt: <p>zelf aangemaakt tijdstip: <?php $tijdstip = mktime (9, 37, 0, 9, 30, 202); print strftime("%a %e %B %Y %H:%M", $tijdstip);?>.<br /> Argumenten kunnen en mogen weggelaten worden van RECHTS naar LINKS. De weggelaten argumenten zullen aangevuld worden met de lokale tijd. Een handige eigenschap van deze functie is dat het mogelijk is om het aantal dagen te laten "overlopen" in het aantal maanden. Zo zal volgend voorbeeld, de timestamp bepalen van oktober 202: Tijdstip met overlopende maand: <?php $tijdstip = mktime (9, 37, 0, 9, 3, 202); print strftime("%a %e %B %Y %H:%M", $tijdstip);?>.<br /> Of die van de laatste dag van de voorgaande maand: Tijdstip met overlopende maand in het verleden: <?php $tijdstip = mktime (9, 37, 0, 9, 0, 202); print strftime("%a %e %B %Y %H:%M", $tijdstip);?>.</p> Of je kunt gebruik maken van variabelen: <p><?php for ($maand = 0; $maand <= 2; $maand++){ $datum[$maand] = mktime (0,0,0, + $maand, 2, 202); foreach ($datum as $maand):?> <?php print strftime("%a %e %B %Y", $maand);?><br /> <?php endforeach;?></p> Tekst omzetten naar een tijdstip Een tekst met een formaat zoals gebruikt in de strftime() kan je met de functie strptime ontbinden in zijn verschillende onderdelen die in een array worden opgeslagen. array strptime ( string $date, string $format ) De associatieve array bevat de volgende variabelen: tm_sec Seconden (0-6) tm_min Minuten (0-59) tm_hour Uren (0-23) tm_mday Dag van de maand (-3) tm_mon Maand (0-) tm_year Jaar sinds P a g i n a

96 tm_wday Weekdag (0-6) tm_yday Dag van het jaar (0-365) unparsed Voorbeeld: Het niet herkende deel van de string <?php $formaat = "%A %e %B %Y %H:%M"; $nu = strftime($formaat);?> <pre>nu weergegeven met strftime: <?php print $nu;?> en ontbonden in een array: <?php print_r(strptime($nu, $formaat));?></pre> Microseconden Voor de meeste toepassingen heb je genoeg aan gehele seconden. Soms heb je microseconden nodig. Gelukkig hebben we hiervoor de functie: string microtime([ bool $get_as_float ]); die een string teruggeeft met als onderdelen een timestamp in seconden en microseconden, met de microseconden eerst. Als je echter een true meegeeft als parameter, krijg je het resultaat als een float in de plaats, waardoor het makkelijker rekenen wordt. <p>een tijdstip in microseconden: <?php print microtime();?> of weergegeven als een float: <?php print microtime(true);?>.</p> Controleren van datums Een heel handige functie is checkdate() waarmee we de geldigheid van datums kunnen controleren: boolean checkdate (integer month, integer day, integer year) De functie is niet gebaseerd op timestamps en kan gebruikt worden voor datums gaande van het jaar tot Deze functie houdt rekening met schrikkeljaren: <p>202 is <?php if(checkdate(2,29,202)):?> een <?php else:?> geen <?php endif;?> schrikkeljaar, 203 is <?php if(checkdate(2,29,203)):?> een <?php else:?> geen <?php endif;?> schrikkeljaar.</p> Opletten met datums Let goed op met de beperking van timestamps. Als de datum boven de maximumwaarde, of onder de minimumwaarde komt, zul je heel onvoorspelbare resultaten verkrijgen: <p>php en een toekomstige millenniumbug: 86 P a g i n a

97 <?php $laatstedag = mktime(2,0,0,,9,2038); for ($i=; $i<7; $i++){ print "<br />". strftime("%a %e %B %Y %H:%M", $laatstedag); $laatstedag += 3600;?></p> Als je buiten deze grenzen wilt werken, zul je de datums zelf moeten berekenen. Specifieke functies voor strings In dit deel zullen we wat dieper ingaan op het gebruik van strings en het opmaken van tekst. Lengte van een string Net zoals we het aantal elementen in een array kunnen bepalen, kunnen we met een eenvoudige functie, strlen(), het aantal karakters in een string bepalen: <?php $tekst = "Deze tekst is opgeslagen in een string.";?> <p>de zin "<?php print $tekst;?>" bevat <?php print strlen($tekst);?> tekens.</p> Opmaak van tekst Sprintf() en printf() Deze functies, die identiek zijn aan die in C, zorgen er voor dat tekst met een mooiere opmaak kunnen weergegeven worden. Het verschil tussen de 2 is dat printf() de uitvoer onmiddellijk afdrukt, zoals het geval is bij de print(), en dat sprintf() een string oplevert, die verder kan gebruikt worden. Voorbeeld: <?php $wortel = sqrt(2);?> <p>de vierkantswortel van 2 is <?php printf("%.2f", $wortel);?>.</p> De "%.2f" zorgt ervoor dat de variabele, die erna opgeroepen wordt, afgerond wordt op 2 decimalen. De omzetting begint altijd met een "%", gevolgd door een aantal parameters die de opmaak zullen bepalen, deze parameters zijn optioneel: Naam Omschrijving Voorbeeld Sign specifier Geeft aan of er ook voor positieve getallen een printf("resultaat: %+.2f\n", teken moet worden afgedrukt, gebruik hiervoor $var); //resultaat: +3.4 een + Padding specifier Geeft weer welk soort karakter er moet gebruikt worden voor het uitlijnen van een waarde, dit kan een spatie (standaard) of een 0 printf("resultaat: %'00.2f\n", (nul) zijn. De eventuele padding specifier laat je $var); //resultaat: voorafgaan door een enkele aanhalingsteken ('), enkel van belang als ook de width specifier is opgegeven Width specifier Een getal voor het punt duidt het aantal printf("resultaat: %'00.2f\n", karakters aan dat minimum zal gebruikt worden $var); //resultaat: voor het weergeven van het getal. Als er minder karakters zijn om weergegeven te worden, wordt het getal rechts uitgelijnd en verder opgevuld met spaties ervoor (of wat er opgegeven is in de padding specifier). De 87 P a g i n a

98 precisie wordt ook meegeteld in de width specifier. Precision specifier Een getal na het punt duidt de precisie aan. Kan enkel gebruikt worden bij floats. Bij strings: geeft het getal ná de punt het maximaal weer te geven karakters aan. Type specifier Deze geeft aan als welk type de variabele moet weergegeven worden. Zie onderstaande tabel Type Omschrijving %% Weergeven van een % %b Integer opgemaakt als binair getal %c Integer opgemaakt als ASCII-karakter %d Integer opgemaakt als signed decimaal getal %u Integer opgemaakt als unsigned decimaal getal %o Integer opgemaakt als octaal getal %x of %X Integer opgemaakt als hexadecimaal getal met kleine letters of met hoofdletters %f Floating point getal %s String Het zal ook duidelijk zijn dat je enkel decimalen kunt gebruiken als je met kommagetallen te maken hebt. Een paar voorbeelden: <p><?php printf("pi is gelijk aan %f,<br />", 3.459); printf("en afgerond: %.2f,<br />", 3.459); printf("met 0 cijfers na de komma: %.0f.<br />", 3.459); printf("%.5s<br />", "Toont slechts een stukje van deze regel."); printf("binair: %b, decimaal: %d en kommagetal: %f.<br />", 23, 23, 23); printf("de BTW bedraagt %d%% (%.2f Euro).", 2, );?></p> Om de eerste n karakters van een string weer te geven, gebruik je "%.ns", waarbij n het aantal karakters is, dat je wilt weergeven. Deze functies worden in de eerste plaats gebruikt om opmaak met cijfers mee te geven, zonder dat de inhoud ervan verloren gaat. Hoofdletters en kleine letters Er zijn 4 functies ter beschikking die we kunnen gebruiken om met hoofdletters te spelen: <p>spelen met hoofdletters:<br /> <?php $tekst = "The Fantastic Four: HTML, CSS, JavaScript en PHP."; print strtolower ($tekst). "<br />"; print strtoupper ($tekst). "<br />"; print ucfirst ($tekst). "<br />"; print ucwords ($tekst);?></p> Vergelijken van strings Terwijl we integers heel eenvoudig kunnen vergelijken, wordt dit bij strings iets moeilijker, vooral als er gebruik gemaakt wordt van binaire inhoud. Met strcmp() en strncmp() lukt dit zonder probleem. Beide functies nemen 2 strings als argument en de functie levert een 0 af als beide argumenten gelijk zijn, een getal groter dan 0 als string groter is dan string 2, en een getal kleiner dan 0 als string kleiner is dan string 2. De vergelijking gebeurt op ASCII-niveau. 88 P a g i n a

99 strncmp() neemt nog een derde argument dat bepaald tot hoeveel karakters er moet vergeleken worden: <?php function vergelijk($woord, $woord2, $aantal) { if (isset($aantal)){ $volgorde = strncmp($woord, $woord2, $aantal); else { $volgorde = strcmp($woord, $woord2); if($volgorde == -){ print "voor"; elseif ($volgorde == ) { print "na"; else { print "naast";?> <p>sorteren:<br /> aap komt <?php vergelijk("aap", "zebra");?> zebra.<br /> zebra komt <?php vergelijk("zebra", "aap");?> aap.<br /> aap komt <?php vergelijk("aap", "aap");?> aap.<br /> aap komt <?php vergelijk("aap", "Aap");?> Aap.<br /> zeehond komt <?php vergelijk("zeehond", "zeekoe", 3);?> zeekoe (sortering op eerste 3 tekens).</p> Als we hoofdletterongevoelig willen werken doen we dit met strcasecmp() en strncasecmp(). Zoeken van substrings Net zoals we in arrays kunnen zoeken naar onderdelen, kunnen we dit ook met strings. En net zoals bij arrays, begint een string te tellen vanaf positie 0 voor het eerste karakter. Uitfilteren van een substring Met substr() kunnen we een stukje uit een string filteren: <?php $alfabet = "abcdefghijklmnopqrstuvwxyz";?> <p>het alfabet vanaf de derde letter: <?php print substr($alfabet, 2);?>.<br /> Drie letters vanaf de derde letter: <?php print substr($alfabet, 2, 3);?>.</p> Het tweede argument bepaalt vanaf welke positie de karakters weergegeven worden. Een optioneel derde argument bepaalt hoeveel karakters er in totaal weergegeven worden. Positie vinden van een substring Met strpos() kunnen we de positie bepalen van een substring uit een string. De functie geeft de eerste plaats weer waar het opgegeven argument voorkomt: <?php function opsporen($gezocht) { $verdachten = 'Jan, Piet, Joris en Corneel'; $pos = strpos($verdachten, $gezocht); if ($pos === false) { print "$gezocht is niet op de lijst van verdachten ($verdachten) gevonden."; else { print "$gezocht is op positie $pos op de lijst van verdachten ($verdachten) gevonden."; 89 P a g i n a

100 ?> <p><?php opsporen("jan");?><br /> <?php opsporen("dany");?></p> Als de string niet gevonden wordt, wordt er een false weergegeven. Als er een derde argument opgegeven wordt ($pos =strpos($verdachten, $gezocht, 0);), bepaalt deze vanaf welke plaats er gezocht wordt. Met strrpos() wordt er gezocht naar de laatste keer dat de gezochte substring voorkomt. Nog meer uitfilteren Met strstr() en stristr() gaan we op zoek naar een substring in een string, en worden de resterende tekens weergegeven: <?php $ = <p>het adres <?php print $ ;?> heeft als domein <?php print strstr($ , /> en als gebruiker <?php print strstr($ , true);?>.</p> Als de substring niet gevonden wordt, wordt er een false weergegeven. Vanaf PHP versie kun je met het derde argument true de tekens voor de gevonden substring weergeven. Met stristr() wordt er gezocht zonder rekening te houden met hoofdletters. Tekens en substrings vervangen Soms is het nuttig om een aantal karakters of een volledige substring te vervangen. Vervangen van substrings op basis van positie Met substr_replace vervangen we een aantal tekens in een string: <?php $leerkracht = 'PHP wordt gegeven door Tim Broeckaert.';?> <p>tekstonderdelen vervangen:<br /> Originele tekst: <?php print $leerkracht;?><br /> Volledige tekst vervangen: <?php print substr_replace($leerkracht, 'Dany Pinoy.', 0);?><br /> Tekst aan het begin toevoegen: <?php print substr_replace($leerkracht, 'JavaScript wordt gegeven door Dany Pinoy. ', 0, 0);?><br /> Naam leerkracht vervangen: <?php print substr_replace($leerkracht, 'Dany Pinoy', 23, 4);?><br /> Einde van de tekst vervangen: <?php print substr_replace($leerkracht, 'Dany Pinoy en is een onderdeel van Webdesign', -5, -);?><br /> Voornaam verwijderen: <?php print substr_replace($leerkracht, '', 23, 4);?></p> Het derde argument geeft op, vanaf welke positie er moet vervangen worden. Een negatieve positie begint af te tellen vanaf het einde van de string. Als er een vierde argument wordt opgegeven, zal deze het aantal te vervangen tekens bepalen. Het aantal - vervangt alle tekens tot het einde van de string. Vervangen van substrings op basis van tekst Met str_replace() zoeken we naar een substring en vervangen we deze door een nieuwe. <?php $spreuk = "Zoals het klokje thuis tikt, tikt het nergens."; $klinkers = array("a", "e", "i", "o", "u"); $voeding = "Eet elke dag fruit, groenten en vezels."; 90 P a g i n a

101 $gezond = array("fruit", "groenten", "vezels"); $lekker = array("pizza", "friet", "roomijs");?> <p>tekst vervangen:<br /> Originele spreuk: <?php print $spreuk;?><br /> Werkwoord vervangen: <?php print str_replace("tikt", "roffelt", $spreuk);?><br /> <?php str_replace("tikt", "roffelt", $spreuk, $aantal);?> Het werkwoord werd <?php print $aantal;?> keer vervangen<br /> Zonder klinkers: <?php print str_replace($klinkers, "", $spreuk);?><br /> Originele uitspraak: <?php print $voeding;?><br /> Aangepaste uitspraak: <?php print str_replace($gezond, $lekker, $voeding);?></p> Recursieve functie Een recursieve functie is een functie die zichzelf aanroept. Een voorbeeldje van een recursieve functie is deze: <?php function faculteit( $n ) { if ($n == 0 $n== ) { // stoppen indien $n == 0 of $n == return ; else { // De volgende regel bevat de recursieve oproep return ( $n * faculteit($n-));?> <p>de faculteit van 5 is <?php print faculteit(5);?>.</p> Bij de aanroep van deze functie wordt er eerst gecontroleerd of het getal nul of is. Indien dit zo is, wordt de berekening afgebroken. Indien het getal niet nul of is, wordt de berekening $n * faculteit($n -) berekend. M.a.w. De functie faculteit wordt gebruikt vanuit de functie faculteit (recursie). Deze bewerking gaat door tot de waarde in $n wordt, waardoor de functie faculteit wordt verlaten en waarde wordt teruggeven aan de oproepende bewerking (eveneens in de functie faculteit). M.a.w. de weg wordt in omgekeerde volgorde terug afgelopen ($n stijgt daarbij terug naar de oorspronkelijke waarde). Met andere woorden de faculteit van 5 bereken is eigenlijk 5 * 4 * 3 *. Let op bij recursieve functies, dat je deze wel weer moet kunnen verlaten. Oefeningen Het project van deze cursus: Webshop Sla al de functies die je in deze oefeningen maakt op in een apart bestand (functies.php) die je importeert in de pagina's waar je de functies gebruikt. Prijzen netjes weergeven Schrijf de functie prijsweergeven($prijs) waarin de prijs met twee cijfers na de komma wordt weergegeven. Gebruik deze functie bij het weergeven van de prijzen in de webshop. Prijs van een cursus opzoeken Bij het inschrijven voor een cursus moet de prijs automatisch in het formulier ingevuld worden. 9 P a g i n a

102 Zorg dat de pagina inschrijven.php zowel het script model.php (met de prijzen van de cursussen opgeslagen in arrays) als het script functies.php importeert. Daar de gebruikte categorie ($cat) reeds in het script model.php wordt opgevraagd, mag je de regel met dezelfde functie in de pagina inschrijven.php uitschakelen of verwijderen: // $cat = $_GET['cat']; // opgenomen in model.php De functie om de prijs van een cursus op te zoeken wordt: function prijscursus($cursus, $items) {...($items as $item) { // elke item onderzoeken...($item['naam'] == $cursus) { prijsweergeven($item['prijs']);...; // de prijs is gevonden, de functie wordt verlaten. Gebruik de functie prijscursus in het formulier: <input type="text" name="prijs" id="prijs" readonly="readonly" value="<?php prijscursus($cursus, $items);?>" /> Datum weergeven Maak een functie (datumweergeven()) die de huidige datum in de vorm dag maand jaar (voorbeeld: 7 april 202) weergeeft. Gebruik deze functie om rechts in de Kop op de pagina index.php de huidige datum weer te geven: <h>snt Webshop Informatica (<?php print $cat?>)<span style="float:right; font-size:medium" ><?php datumweergeven();? ></span></h> Gebruik deze functie om op de pagina inschrijven.php de datum in het formulier in te vullen. Ingevulde datum controleren De functie datumcontrole($datum) controleert of een datum bestaat en dus correct is: function datumcontrole($datum, $url) {...(LC_ALL, 'nl_be'); $tijdstip = strptime($datum, "%e %B %Y"); if(! checkdate($tijdstip['tm_mon'], $tijdstip['tm_mday'], $tijdstip['tm_year'] +...) $tijdstip['tm_year'] < 0) { header("location: $url"); exit; Daarbij gebruiken we de functie header om bij een foutieve datum de browser naar een andere pagina (URL) te sturen. Deze functie werkt alleen als er nog geen HTML-code aangemaakt werd. Op de pagina inschrijven_verwerken.php zorg je dat de functies in het script functies.php gebruikt kunnen worden. Na het opvragen van de formuliergegevens plaats je de controle van de datum: // controle formuliergegevens...($datum, "inschrijven.php?cursus=". urlencode($cursus). "&datumstyle=". urlencode("background-color:#ffcccc"). "&cat=". $cat. "&cursus=". $cursus); 92 P a g i n a

103 De doorgegeven URL bestaat uit de pagina inschrijven.php (formulier opnieuw invullen) met een extra GET argument waarmee we de fout (met een CSS stijl) kunnen markeren. Op de pagina inschrijven.php vraag je de doorgegeven datumstyle op met: $datumstyle = $_GET['...']; Deze stijl pas je dan toe in de aangepaste regel: <input type="text" name="datum" id="datum" value="<?php datumweergeven();?>" style="<?php print...;?>" /> Ingevulde adres controleren Schrijf een functie om een adres op de volgende eigenschappen te controleren. Een adres bevat Een adres bevat een punt. In een adres staat steeds voor de punt. Indien het adres niet geldig is, moet de browser het formulier met het gemarkeerde foutief ingevulde veld tonen. Koppen Schrijf in een nieuwe PHP-pagina een functie waarmee je een HTML-kop maakt. De HTML-code voor een kop heeft de volgende vorm: <h style="color: #000000;">HTML-code schrijven met PHP.</h> Waarbij h de tag is voor een Kop (h2 dus voor een Kop 2, enz.). Eindigt met </h>. Waarbij # de zwarte tekstkleur bepaalt (#ff0000 is rood, #00ff00 is groen en #0000ff is blauw). Waarbij 'HTML-code schrijven met PHP.' de tekst van de kop is. Laat de gebruiker via een formulier zelf kiezen welke kop (-6), kleur (zwart, rood, groen of blauw) en tekst hij wil zien. Alle kopformaten weergeven Maak in een nieuwe PHP-pagina een functie die bij elke aanroep een kop met een hoger cijfer aanmaakt. De variabele met het kopcijfer wordt in de functie bijgehouden en is enkel in deze functie bruikbaar. M.a.w. In de body tag plaats je zesmaal de regel <?php kop();?> en krijg je het volgende resultaat: 93 P a g i n a

104 Zinnen beginnen met een hoofdletter Schrijf in een nieuwe PHP-pagina een functie waarmee je elke zin van een tekst voorziet van een hoofdletter. Zet daarbij de tekst om naar een array van zinnen. Een zin wordt van de volgende zin gescheiden door een punt gevolgd door een spatie. Geef daarna elke zin een beginhoofdletter. Stop deze aangepaste zin in een array met de aangepaste zinnen. Maak van de array met aanpaste zinnen een tekst waarbij de zinnen gescheiden worden door een punt en een spatie. Daar de oorspronkelijke tekst moet worden aangepast, werkt je met referentievariabele. Als voorbeeld: $tekst = "deze tekst bevat geen beginhoofdletters. deze worden door een PHP functie automatisch aangemaakt. deze correctie wordt in 99% van de gevallen gewaardeerd."; wordt in de browser weergegeven als: Horeca Schrijf in een nieuwe PHP-pagina een functie om het aantal weken tussen twee datums te berekenen. Rond het resultaat af naar het dichtstbijgelegen geheel getal. Gebruik de functie om het aantal weken tussen april en november van dit jaar te berekenen. Gebruik het resultaat in de volgende zin (punten = het resultaat): Het seizoen in de horeca bestaat uit... weken hard werken. Jubileum Schrijf in een nieuwe PHP-pagina een functie om een datum in het Nederlands volledig weer te geven. Schrijf een functie om een leeftijd te berekenen. Gebruik deze functies om het volgende resultaat te bereiken: 94 P a g i n a

105 Factuur opmaken Gebruik een nieuwe PHP-pagina om facturen op te maken. Deze pagina bevat de volgende eigenschappen: De factuur bestaat uit een dynamische tabel waarbij de gebruiker zelf het aantal te factureren artikels kan opgeven. Standaard bevat de factuur 5 artikels. De datums worden door één functie weergegeven. De vervaldag wordt berekend door 30 dagen bij de datum te tellen. Het factuurnummer wordt samengesteld aan de hand van het tijdstip waarop de factuur wordt opgemaakt: jaar 900 maand met 2 cijfers (00-2) dag van de maand met twee cijfers (0-3) uur met twee cijfers (00-23) minuten met twee cijfers (00-59) De kolommen met de omschrijvingen, aantallen, eenheidsprijzen en de btw worden door de gebruiker ingevuld. De volgende velden worden door PHP-code berekend: Het Bedrag exclusief wordt per artikel met de formule aantal * eenheidsprijs berekend. Het Btw bedrag wordt per artikel met de formule Bedrag exclusief * Btw / 00 berekend. Het Totaal inclusief wordt per artikel met de formule Bedrag exclusief + Btw bedrag berekend. In de onderste rij bereken je de totalen van de volgende kolommen: Bedrag exclusief Btw bedrag Totaal inclusief Zorg dat alle bedragen en prijzen met twee cijfers na de komma worden weergegeven. Plaats alle functies in het externe script factuurfuncties.php. Plaats alle PHP code om het formuliergegevens op te halen en om de berekeningen te maken in het externe script factuurmodel.php. 95 P a g i n a

106 Analyse van adressen Maak een nieuwe PHP-pagina om adressen te analyseren. Zorg daarbij voor een formulier waarbij de gebruiker een adres kan opgeven. Haal uit het opgegeven De gebruikersnaam (deel voor Het domein (deel na Schrijf een functie om een melding met het IP-adres van een domein weer te geven. Om het IP-adres van een domein op te zoeken heb je de functie gethostbyname() nodig (hoe je deze functie moet gebruiken staat op de site php.net) Indien het IP-adres niet bestaat (dus ook het domein niet) wordt de melding De domeinnaam geen.ip bestaat niet. (waarbij geen.ip het geteste domein voorstelt) weergegeven. Gebruik dezelfde functie om het IP-adres van het domein voorafgegaan door www. te achterhalen (te testen). Schrijf een functie om bepaalde domeinnamen te weigeren en een gepaste melding op het scherm te plaatsen. Gebruik een array om de te weigeren domeinnamen in op te slaan. PHP en AJAX AJAX maakt het mogelijk onderdelen van een webpagina aan te passen zonder de pagina volledig te herladen. AJAX maakt interactievere webpagina's mogelijk. 96 P a g i n a

107 Wat is AJAX? AJAX = Asynchronous JavaScript and XML. AJAX is een techniek waarmee snelle dynamische webpagina's gemaakt worden. AJAX kan gebruikt worden om interactief met een database te communiceren. AJAX kan gebruikt worden om interactief met een XML bestand te communiceren. AJAX zorgt voor het asynchroon aanpassen van webpagina's door achter de schermen kleine hoeveelheden gegevens met de server uit te wisselen. Klassieke webpagina's (die geen AJAX gebruiken) moeten bij elke kleine aanpassing op een pagina de volledige pagina herladen. Voorbeelden van AJAX toepassingen: Google Maps, Gmail, Youtube en Facebook. AJAX werd populair in 2005 door Google, met Google Suggest. Google Suggest gebruikt AJAX in zijn zoekpagina. Bij het intypen van een zoekwoord worden de reeds ingetypte letters met behulp van JavaScript naar de server gestuurd, waarop deze een lijst met suggesties terugstuurt. PHP scripts op de server zorgen dat de juiste informatie naar de webpagina gestuurd wordt. Hoe werkt AJAX? AJAX is gebaseerd op Internet Standaarden AJAX is gebaseerd op bestaande internet standaarden en gebruikt een combinatie van: XMLHttpRequest objecten (om gegevens asynchroon met de server uit te wisselen) JavaScript/DOM (om de gegevens weer te geven of om erop te reageren) CSS (de gegevens op te maken) XML (het formaat waarin de gegevens uitgewisseld worden) AJAX toepassingen zijn dus browser- en systeem onafhankelijk. Internet Explorer 9 gebruikt een lokale cache, waardoor IE9 niet steeds contact opneemt met de webserver bij het vernieuwen van de pagina. M.a.w. gebruikt voor het testen van AJAX een andere browser of sluit IE9 voor elke nieuwe test eerst af. 97 P a g i n a

108 AJAX PHP Voorbeeld Bij het intypen van een letter in het tekstveld wordt de functie showhint() uitgevoerd. De functie wordt geactiveerd door de onkeyup gebeurtenis (event). De HTML-pagina hint.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>ajax voorstellen</title> <script type="text/javascript"> function showhint(str){ if (str.length==0){ document.getelementbyid("txthint").innerhtml=""; return; if (window.xmlhttprequest){// code voor IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); else {// code voor IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readystate==4 && xmlhttp.status==200){ document.getelementbyid("txthint").innerhtml=xmlhttp.responsetext; xmlhttp.open("get","gethint.php?q="+str,true); xmlhttp.send(); </script> </head> <body> <p><b>begin met het typen van een naam in het tekstveld:</b></p> <form> <p>voornaam: <input type="text" onkeyup="showhint(this.value)" /></p> </form> <p>suggesties: <span id="txthint"></span></p> </body> </html> Indien het tekstveld leeg is (str.length==0) wordt de inhoud van de span tag met het id txthint leeggemaakt en wordt de functie afgebroken. Indien het tekstveld niet leeg is: wordt er een XMLHttpRequest object aangemaakt, wordt een functie aangemaakt die pas uitgevoerd wordt als de gegevens van de server komen, wordt een aanvraag naar een script op de server gestuurd, let op het argument (q) dat aan de URL werd toegevoegd (met de inhoud van het tekstveld). Het PHP script dat door JavaScript op de HTML pagina wordt opgeroepen is gethint.php. 98 P a g i n a

109 Het PHP script zoekt in een array met namen naar overeenkomsten en stuurt deze terug naar de browser: <?php // gethint.php // De array met namen vullen $a[]="anna"; $a[]="brittany"; $a[]="chris"; $a[]="david"; $a[]="eva"; $a[]="frank"; $a[]="geert"; $a[]="hendrik"; $a[]="ilse"; $a[]="jan"; $a[]="koen"; $a[]="luc"; $a[]="nina"; $a[]="ophelia"; $a[]="petunia"; $a[]="amanda"; $a[]="ronny"; $a[]="cindy"; $a[]="dany"; $a[]="eve"; $a[]="evita"; $a[]="sunniva"; $a[]="theo"; $a[]="unni"; $a[]="violet"; $a[]="liza"; $a[]="elizabeth"; $a[]="ellen"; $a[]="willem"; $a[]="vicky"; $a[]="pol"; $a[]="tom"; $a[]="hawa"; // het argument van de URL ophalen $q=$_get["q"]; // de suggesties opzoeken als de lengte van q > 0 if (strlen($q) > 0){ $hint=""; for($i=0; $i < count($a); $i++){ if (strtolower($q) == strtolower(substr($a[$i],0,strlen($q)))){ if ($hint == ""){ $hint=$a[$i]; else { $hint=$hint.", ".$a[$i]; // Geef als antwoord "Geen suggesties" als er geen gevonden zijn 53 // of geef de gevonden suggesties door 54 if ($hint == ""){ 55 $antwoord="geen suggesties"; 99 P a g i n a

110 else { $antwoord=$hint; // antwoord weergeven print $antwoord;?> Als er tekst door het JavaScript wordt doorgegeven (strlen($q) > 0): wordt er gezocht naar namen waarvan het begin overeenkomt met de ingetypte tekens, als er geen overeenkomsten zijn wordt de tekst Geen suggesties teruggestuurd, indien er één of meer namen gevonden werden, worden deze teruggestuurd, de teruggezonden namen worden uiteindelijk weergegeven in de browser. AJAX Database voorbeeld In ons volgende voorbeeld worden database gegevens met behulp van AJAX in de browser weergeven. De MySQL Database We gebruiken de volgende database tabel: De HTML pagina Bij het selecteren van een gebruiker wordt de functie showuser uitgevoerd. M.a.w. de functie wordt door de gebeurtenis onchange gestart. De HTML pagina database.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>ajax Database</title> <script type="text/javascript"> function showuser(str){ if (str==""){ document.getelementbyid("txthint").innerhtml=""; return; if (window.xmlhttprequest) {// code voor IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); else {// code voor IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange=function(){ 00 P a g i n a

111 8 9 if (xmlhttp.readystate==4 && xmlhttp.status==200){ document.getelementbyid("txthint").innerhtml=xmlhttp.responsetext; xmlhttp.open("get","getuser.php?q="+str,true); xmlhttp.send(); </script> </head> <body> <form> <select name="users" onchange="showuser(this.value)"> <option value="">selecteer een persoon:</option> <option value="">peter Degroot</option> <option value="2">leo Degroot</option> <option value="3">jan VanZwam</option> <option value="4">guido Deboek</option> </select> </form> <p id="txthint"><b>informatie over de persoon wordt hier weergegeven.</b></p> 38 </body> 39 </html> De showuser functie controleert of er een persoon geselecteerd is, maakt een XMLHttpRequest object aan, maakt een functie aan die pas uitgevoerd wordt als de gegevens van de server komen, stuurt een aanvraag naar een script op de server, let op het argument (q) dat aan de URL werd toegevoegd (met de inhoud van de selectie). Het PHP script Het PHP script getuser.php laat een query uitvoeren door de MySQL database en plaatst het resultaat in een HTML tabel: <?php // getuser.php $q=$_get["q"]; $verbinding = mysql_connect('localhost', 'pc0', 'snt+456') or die('kon geen verbinding maken: '. mysql_error()); mysql_select_db("database0", $verbinding) or die('kon de database niet openen: '. mysql_error()); $sql="select * FROM ajax_demo WHERE id = '".$q."'"; $records = mysql_query($sql) or die('query mislukt: '. mysql_error()); print "<table border=''> <tr> <th>voornaam</th> <th>naam</th> <th>leeftijd</th> <th>woonplaats</th> <th>beroep</th> </tr>"; while($record = mysql_fetch_array($records)){ print "<tr>"; 0 P a g i n a

112 print print print print print print "<td>". "<td>". "<td>". "<td>". "<td>". "</tr>"; $record['voornaam']. "</td>"; $record['naam']. "</td>"; $record['leeftijd']. "</td>"; $record['woonplaats']. "</td>"; $record['beroep']. "</td>"; print "</table>"; mysql_close($verbinding);?> Het PHP script reageert als volgt op de JavaScript aanvraag: PHP maakt een verbinding met de MySQL server, de persoon wordt in de database opgezocht, er wordt een HTML tabel met de gevonden gegevens aangemaakt, de HTML tabel wordt naar het JavaScript in de browser gestuurd. AJAX en XML Het volgende voorbeeld toont hoe je met AJAX informatie uit een XML bestand kunt weergeven. Het XML bestand Het XML bestand cd_ cataloog.xml met de gegevens: <?xml version=".0" encoding="utf-8"?> 2 <Cataloog> 3 <CD> 4 <Titel>Empire Burlesque</Titel> 5 <Artiest>Bob Dylan</Artiest> 6 <Land>USA</Land> 7 <Platenmaatschappij>Columbia</Platenmaatschappij> 8 <Prijs>0.90</Prijs> 9 <Jaar>985</Jaar> 0 </CD> <CD> 2 <Titel>Hide your heart</titel> 3 <Artiest>Bonnie Tyler</Artiest> 4 <Land>UK</Land> 5 <Platenmaatschappij>CBS Records</Platenmaatschappij> 6 <Prijs>9.90</Prijs> 7 <Jaar>988</Jaar> 8 </CD> 9 <CD> 20 <Titel>Greatest Hits</Titel> 2 <Artiest>Dolly Parton</Artiest> 22 <Land>USA</Land> 23 <Platenmaatschappij>RCA</Platenmaatschappij> 24 <Prijs>9.90</Prijs> 25 <Jaar>982</Jaar> 26 </CD> 27 </Cataloog> Een XML bestand wordt zoals HTML opgebouwd met tags (<...></...>). De namen van de tags mag je wel zelf kiezen (let op: een geopende tag moet steeds een overeenkomende sluitende tag hebben). 02 P a g i n a

113 In ons voorbeeld bestaat ons XML bestand uit een Root element (Cataloog) die alle andere elementen bevat. Het Root element Cataloog bevat drie CD elementen. Elke CD element bevat op zijn beurt zes elementen (Titel, Artiest, Land, Platenmaatschappij, Prijs en Jaar). Een XML bestand is dus ideaal om gestructureerde gegevens in op te slaan. De HTML pagina Bij het selecteren van een artiest wordt de functie showcd uitgevoerd. M.a.w. de functie wordt door de gebeurtenis onchange gestart. De HTML pagina xml.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>ajax XML</title> <script type="text/javascript"> function showcd(str){ if (str==""){ document.getelementbyid("txthint").innerhtml=""; return; if (window.xmlhttprequest){// code voor IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); else {// code voor IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readystate==4 && xmlhttp.status==200){ document.getelementbyid("txthint").innerhtml=xmlhttp.responsetext; xmlhttp.open("get","getcd.php?q="+str,true); xmlhttp.send(); </script> </head> <body> <form> Selecteer een CD: <select name="cds" onchange="showcd(this.value)"> <option value="">selecteer een artiest:</option> <option value="bob Dylan">Bob Dylan</option> <option value="bonnie Tyler">Bonnie Tyler</option> <option value="dolly Parton">Dolly Parton</option> </select> </form> <p id="txthint"><b>de CD informatie verschijnt hier...</b></p> </body> </html> De functie showcd 03 P a g i n a

114 controleert of er een artiest geselecteerd is, maakt een XMLHttpRequest object aan, maakt een functie aan die pas uitgevoerd wordt als de gegevens van de server komen, stuurt een aanvraag naar een script op de server, let op het argument (q) dat aan de URL werd toegevoegd (met de inhoud van de selectie). Het PHP script Het PHP script getcd.php opent het XML bestand, zoekt naar de aangevraagde artiest en stuurt een antwoord in HTML code naar het JavaScript in de browser: <?php $q=$_get["q"]; $xmldoc = new DOMDocument(); $xmldoc->load("cd_cataloog.xml"); $cds = $xmldoc->getelementsbytagname('cd'); // opzoeken CD tags for ($cd = 0; $cd <= $cds->length-; $cd++){ // alle CD tags doorlopen if ($cds->item($cd)->nodetype == ){ // enkel de betekenisvolle elementen onderzoeken $artiesten = $cds->item($cd)>getelementsbytagname('artiest'); // alle tags Artiesten in de CD opzoeken for ($artiest = 0; $artiest <= $artiesten->length-; $artiest++){ // alle Artiesten tags doorlopen if ($artiesten->item($artiest)->nodetype == ){ // enkel de betekenisvolle elementen onderzoeken if($artiesten->item($artiest)->nodevalue == $q){ // Artiest is de opgegeven artiest // Titel van de CD met de opgegeven artiest weergeven $titels = $cds->item($cd)>getelementsbytagname('titel'); for ($titel = 0; $titel <= $titels->length-; $titel++){ if ($titels->item($titel)->nodetype == ){ print "<b>". $titels->item($titel)>nodename. ":</b> "; print $titels->item($titel)->nodevalue; print "<br />"; // Artiest van de CD met de opgegeven artiest weergeven print "<b>". $artiesten->item($artiest)>nodename. ":</b> "; print $artiesten->item($artiest)->nodevalue; print "<br />"; // Land van de CD met de opgegeven artiest weergeven $landen = $cds->item($cd)>getelementsbytagname('land'); for ($land = 0; $land <= $landen->length-; $land++){ if ($landen->item($land)->nodetype == ){ 04 P a g i n a

115 29 >nodename. ":</b> "; print "<b>". $landen->item($land)print $landen->item($land)->nodevalue; print "<br />"; artiest weergeven 35 // Platenmaatschappij van de CD met de opgegeven $platenmaatschappijen = $cds->item($cd)>getelementsbytagname('platenmaatschappij'); for ($platenmaatschappij = 0; $platenmaatschappij <= $platenmaatschappijen->length-; $platenmaatschappij++){ if ($platenmaatschappijen>item($platenmaatschappij)->nodetype == ){ print "<b>". $platenmaatschappijen>item($platenmaatschappij)->nodename. ":</b> "; print $platenmaatschappijen>item($platenmaatschappij)->nodevalue; print "<br />"; // Prijs van de CD met de opgegeven artiest weergeven $prijzen = $cds->item($cd)>getelementsbytagname('prijs'); for ($prijs = 0; $prijs <= $prijzen->length-; $prijs++){ if ($prijzen->item($prijs)->nodetype == ){ print "<b>". $prijzen->item($prijs)>nodename. ":</b> "; print $prijzen->item($prijs)->nodevalue; print "<br />"; // Jaar van de CD met de opgegeven artiest weergeven $jaren = $cds->item($cd)>getelementsbytagname('jaar'); for ($jaar = 0; $jaar <= $jaren->length-; $jaar++){ if ($jaren->item($jaar)->nodetype == ){ print "<b>". $jaren->item($jaar)>nodename. ":</b> "; print $jaren->item($jaar)->nodevalue; print "<br />";?> Bij een CD aanvraag vanuit JavaScript naar het PHP script: wordt een XML DOM object aangemaakt, wordt op alle CD's naar alle <Artiest> elementen met de opgegeven naam gezocht, 05 P a g i n a

116 wordt de gevonden informatie in HTML vorm naar de browser gestuurd. Opiniepeiling met resultaten De HTML pagina Bij het maken van een keuze wordt de functie getvote uitgevoerd. De functie wordt actief bij het klikken op een keuze (onclick gebeurtenis). De HTML pagina peiling.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>opiniepeiling</title> <script type="text/javascript"> function getvote(int){ if (window.xmlhttprequest){// code voor IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); else {// code voor IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readystate==4 && xmlhttp.status==200){ document.getelementbyid("poll").innerhtml=xmlhttp.responsetext; xmlhttp.open("get","poll_vote.php?vote="+int,true); xmlhttp.send(); </script> </head> <body> <div id="poll"> <h3>ga je in de toekomst de interessante combinatie PHP en AJAX gebruiken?</h3> <form> Ja: <input type="radio" name="vote" value="0" onclick="getvote(this.value)" /> <br />Neen: <input type="radio" name="vote" value="" onclick="getvote(this.value)" /> </form> </div> </body> </html> De getvote functie: maakt een XMLHttpRequest object aan, maakt een functie aan die pas uitgevoerd wordt als de gegevens van de server komen, stuurt een aanvraag naar een script op de server, 06 P a g i n a

117 let op het argument (vote) dat aan de URL werd toegevoegd (met de inhoud van de keuze). Het PHP script Het PHP script poll_vote.php: <?php $vote = $_REQUEST['vote']; //openen resultaten vorige stemmem $bestandsnaam = "poll_results.txt"; $inhoud = file($bestandsnaam) or die("kon het bestand $bestandsnaam niet openen."); //plaats de resultaten in een array $array = explode(" ", $inhoud[0]); $ja = $array[0]; $neen = $array[]; if ($vote == 0){ $ja = $ja + ; if ($vote == ){ $neen = $neen + ; //voeg de stem toe aan het bestand met de resultaten $stemresultaten = $ja." ".$neen; $fp = fopen($bestandsnaam,"w"); fputs($fp,$stemresultaten); fclose($fp);?> <h2>resultaat:</h2> <table> <tr> <td>ja:</td> <td> <span style="display: inline-block; width:<?php print 00*round($ja/($neen+$ja),2);?>px; height:20px; backgroundcolor:#afa"></span> <?php print 00*round($ja/($neen+$ja),2);?>% </td> </tr> <tr> <td>neen:</td> <td> <span style="display: inline-block; width:<?php print 00*round($neen/($neen+$ja),2);?>px; height:20px; backgroundcolor:#faa"></span> <?php print 00*round($neen/($neen+$ja),2);?>% </td> </tr> </table> Na het ontvangen van de JavaScript aanvraag wordt het bestand poll_results.txt geopend, de resultaten worden in variabelen geplaatst, de nieuwe stem wordt aan de resultaten toegevoegd, de aangepaste resultaten worden in het bestand poll_results.txt opgeslagen, 07 P a g i n a

118 er wordt een grafische HTML voorstelling van de resultaten aangemaakt en doorgestuurd. Het tekstbestand Het tekstbestand poll_results.txt bevat de resultaten van de stemmen. Deze worden op de volgende manier opgeslagen: 0 0 Het eerste getal bevat het aantal ja stemmen, het tweede getal het aantal neen stemmen. Opmerking: Zorg dat de webserver het tekstbestand kan aanpassen. Geef niet iedereen toegang, enkel de webserver (PHP). Oefeningen Het project van deze cursus: Webshop De verschillende categorieën gaan we via AJAX uit een XML bestand halen. Maak het nieuwe XML bestand categorieen.xml aan: <?xml version=".0" encoding="utf-8"?> <categorieen> <categorie>webdesign</categorie> <categorie>kantoor</categorie>...multimedia... <categorie>programmeren</categorie>... Om AJAX te kunnen gebruiken heeft de pagina index.php in de head sectie een JavaScript functie nodig: <script type="text/javascript"> var xmlhttp = new Array(); // meerdere oproepen tegelijk behandelen function ajax(url, id){ if (window.xmlhttprequest){// code voor recente browsers xmlhttp[id]=new XMLHttpRequest(); else {// code voor IE6, IE5 xmlhttp[id]=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp[id].onreadystatechange=function(){ if (xmlhttp[id].readystate==4 && xmlhttp[id].status==200){ document.getelementbyid(id).innerhtml=xmlhttp[id].responsetext; xmlhttp[id].open("get",url,true); xmlhttp[id].send(); </script> Vervang het weergeven van de categorie in de Kop door een span tag met het ID categorie_in_titel, deze kan dan met JavaScript ingevuld worden. <h>snt Webshop Informatica (<span id="categorie_in_titel"></span>)<span style="float:right; fontsize:medium" ><?php datumweergeven();?></span></h> Vervang het weergeven van de categorieën door een AJAX aanroep: <p id="categorieen"></p> 08 P a g i n a

119 <script type="text/javascript"> ajax("categorieen.php","categorieen"); </script> Maak het nieuwe PHP script voor het doorsturen van de AJAX HTML-code: <?php $xmldoc = new DOMDocument(); $xmldoc->load("categorieen.xml"); $categorieen = $xmldoc->getelementsbytagname('categorie'); // opzoeken... tags for ($categorie = 0; $categorie <=...; $categorie++):?> <?php if ($categorieen->item($categorie)->nodetype == ):?> <span style="color:#00f; text-decoration:underline; cursor:pointer" onclick=" ajax('cursussen.php?cat=<?php print $categorieen>item($categorie)->nodevalue;?>','cursussen'); document.getelementbyid('categorie_in_titel').innerhtml='<? php print $categorieen->item($categorie)->nodevalue;?>';"> <?php print $categorieen->item($categorie)->nodevalue;? ></span> <?php if($categorie!= $categorieen->length-):?> <?php...?> <?php...?> <?php...?> Ook de cursussen per categorie gaan we via AJAX en XML weergeven. Maak voor de cursussen Webdesign het nieuw XML bestand Webdesign.xml: <?xml version=".0" encoding="utf-8"?> 2 <cursussen> 3 <cursus> 4 <Naam>Dreamweaver Deel </Naam> 5 <Omschrijving>Basis Webdesign</Omschrijving> 6 <Prijs>77.00</Prijs> 7 </cursus> 8 <cursus> 9 <Naam>Dreamweaver Deel 2</Naam> 0 <Omschrijving>Gevorderde Webdesign</Omschrijving> <Prijs>77.00</Prijs> 2 </cursus> 3 <cursus> 4 <Naam>JavaScript</Naam> 5 <Omschrijving>Programmeren in de browser</omschrijving> 6 <Prijs>77.00</Prijs> 7 </cursus> 8 <cursus> 9 <Naam>PHP</Naam> 20 <Omschrijving>Programmeren op de server</omschrijving> 2 <Prijs>77.00</Prijs> 22 </cursus> 23 <cursus> 24 <Naam>Dreamweaver Eindwerk</Naam> 25 <Omschrijving>Webdesign in de praktijk</omschrijving> 26 <Prijs>77.00</Prijs> 27 </cursus> 28 </cursussen> Vervang op de pagina... het weergeven van de cursussen door een AJAX aanroep: 09 P a g i n a

120 <div id="cursussen"></div> <script type="text/javascript"> ajax("cursussen.php?cat=<?php print $cat;?>","cursussen"); document.getelementbyid("categorie_in_titel").innerhtml="<?php print $cat;?>"; </script> Maak het nieuwe PHP script voor het doorsturen van de AJAX HTML-code: <?php require 'functies.php'; // voor de functie prijsweergeven()?> <table border="0"> <tr> <th>cursus</th> <th>omschrijving</th> <th>prijs</th> <th>inschrijven</th> </tr> <?php $cat=$_get["cat"]; $xmldoc = new DOMDocument(); $xmldoc->load("$cat.xml"); $cursussen = $xmldoc->getelementsbytagname('...'); // opzoeken cursus tags for ($cursus = 0; $cursus <=...; $cursus++):?> <tr> <td><?php $namen = $cursussen->item($cursus)->...('naam'); for ($naam = 0; $naam <= $namen->length-; $naam++){ if ($namen->item($naam)->nodetype == ){ $cursusnaam = $namen->item($naam)->nodevalue; print $cursusnaam;?></td> <td><?php $omschrijvingen = $cursussen->item($cursus)->...; for ($omschrijving = 0; $omschrijving <=...; $omschrijving++){ if ($omschrijvingen->item($omschrijving)->nodetype == ){ print $omschrijvingen->item($omschrijving)->...;?></td> <td> <?php $prijzen = $cursussen->item($cursus)->...('prijs'); for ($prijs = 0; $prijs <= $prijzen->length-; $prijs++){ if ($prijzen->item($prijs)->nodetype == ){ print prijsweergeven($prijzen->item($prijs)->nodevalue);?></td> <td><a href="inschrijven.php?cursus=<?php print urlencode($cursusnaam);?>&cat=<?php print $cat;? >">Inschrijven</a></td> </tr> <?php endfor;?> </table> Om een gegeven (eigenschap) van een bepaalde cursus uit een XML bestand te halen voeg je de volgende functie in het PHP script functies.php toe: 0 P a g i n a

121 function cursuseigenschap($cat, $cursusnaam, $eigenschap) { $xmldoc = new DOMDocument(); $xmldoc->load("$cat.xml"); $cursussen = $xmldoc->...; // opzoeken cursus tags for ($cursus = 0; $cursus <= $cursussen->length-; $cursus++){ $namen = $cursussen->item($cursus)->...; for ($naam = 0; $naam <= $namen->length-; $naam++){ if ($namen->item($naam)->nodetype == ){ if ($cursusnaam == $namen->item($naam)->nodevalue){ switch($eigenschap){ case "Omschrijving": $omschrijvingen = $cursussen->item($cursus)>getelementsbytagname('omschrijving'); for ($omschrijving = 0; $omschrijving <= $omschrijvingen->length-; $omschrijving++){ if ($omschrijvingen->item($omschrijving)>nodetype == ){ return $omschrijvingen>item($omschrijving)->nodevalue; break; case "Prijs": // schrijf zelf de regels voor prijs Aangezien we nu elke eigenschap van een cursus kunnen opvragen wordt de functie prijscursus() overbodig. Verwijder deze functie. De functie prijscursus() wordt enkel gebruikt in de PHP pagina inschrijven.php. Vervang de regel met de functie prijscursus() door de nieuwe functie: <input type="text" name="prijs" id="prijs" readonly="readonly" value="<?php cursuseigenschap($cat, $cursus, "Prijs");?>" /> Werk de webshop af door voor alle categorieën een XML bestand met cursussen te maken. P a g i n a

122 Ruim de overbodig geworden code in het PHP script model.php op. Doe dit voorzichtig en test grondig. LiveSearch Bij het intypen van een letter moeten er suggesties komen met te bezoeken koppelingen (hyperlinks). Maak daarvoor een XML bestand aan waarin je alle te bezoeken koppelingen opslaat, elke koppeling heeft een titel en een URL. Titel URL Webdesign Stedelijke Nijverheids- en Taalleergangen Brugge Linux Dokeos Maak een HTML pagina met een formulier met een tekstveld. Dit tekstveld voert na het typen van een teken een JavaScript functie uit waarmee via AJAX een PHP script op de webserver wordt gestart. De door het PHP script aangemaakte HTML code wordt door de JavaScript functie in het HTML element met het ID livesearch geplaatst. Onder het tekstveld plaats je een lege div-tag met het id livesearch <div id="livesearch"></div> Schrijf een PHP script waarmee in de titels van het XML bestand gezocht wordt naar de reeds ingetypte tekens. De gevonden resultaten worden als HTML koppelingen (hyperlinks) naar de browser doorgestuurd. Indien geen resultaten gevonden werden wordt de melding Geen suggesties naar de browser doorgestuurd. <a href="http://linux.pindanet.be" target="_blank">linux</a> PHP Sessies Algemeen We kunnen gegevens doorsturen tussen verschillende pagina's door gebruik te maken van de $_POST- en de $_GET-variabele. Het is echter behoorlijk omslachtig om bepaalde gegevens constant op deze manier door te sturen. Het zou handiger zijn mochten we een aantal gegevens kunnen opslaan in een variabele die altijd toegankelijk is gedurende het bezoek aan de website. 2 P a g i n a

123 Hiervoor kunnen we gebruik maken van sessies. Een andere mogelijkheid is, om bepaalde zaken te bewaren tussen de verschillende bezoeken van de website in. Denken we bijvoorbeeld aan de taalkeuze, de gebruikersnaam,... Hiervoor kunnen we gebruik maken van cookies. Dit zijn kleine bestandjes die opgeslagen worden op de harde schijf van de gebruiker. Voorbeelden We lezen een gebruikersnaam in via een formulier. Deze naam moet op elke die bezocht wordt, worden weergegeven. Ook wordt het aantal bezoeken bijgehouden gedurende deze sessie: Op de pagina gebruikersnaam.html wordt de gebruikersnaam ingelezen: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>gebruikersnaam</title> </head> <body> <form id="form" name="form" method="post" action="gebruikersnaam.php"> <label for="gebruikersnaam">gebruikersnaam:</label> <input type="text" name="gebruikersnaam" id="gebruikersnaam" /> <input type="submit" name="button" id="button" value="verzenden" /> </form> </body> </html> De gebruikersnaam wordt bewaard in een sessie: <?php session_start(); $gebruikersnaam = $_POST['gebruikersnaam']; $_SESSION ['gebruikersnaam'] = $gebruikersnaam;?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>gebruikersnaam opslaan</title> </head> <body> <p>welkom <?php print $gebruikersnaam;?></p> <p><a href="gebruikersnaam2.php">naar de volgende pagina</a></p> </body> </html> Het aantal bezoeken wordt telkens verhoogd: <?php session_start(); $gebruikersnaam = $_SESSION['gebruikersnaam']; $bezoeken = ++$_SESSION['bezoeken']; 3 P a g i n a

124 5 6?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.0 Transitional//EN" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf8" /> <title>gebruikersnaam opvragen en bezoeken tellen</title> </head> <body> <p><?php print $gebruikersnaam;?> bezocht deze pagina al <?php print $bezoeken;?> keer.</p> <p><a href="gebruikersnaam2.php">deze pagina nog een keer bezoeken.</a></p> </body> </html> Werking Sessies maken gebruik van twee gegevens: De sessie-variabele De sessie-id De variabelen zelf worden bewaard op de server en niet op de computer van de gebruiker. Op die manier is er geen misbruik van de gegevens mogelijk en blijf je onafhankelijk van de browser van de gebruiker. Een sessie loopt, zolang de gebruiker met zijn browser een bepaalde website bezoekt. Keert de gebruiker nadien, zonder de browser af te sluiten en binnen een bepaalde tijd, terug naar deze website, wordt de sessie verder gezet. Sluit de gebruiker de browser af, dan wordt ook de sessie afgesloten. Bij sommige browsers is dit echter niet het geval, en blijft een sessie bestaan, zolang de sessietijd niet overschreden werd, onafhankelijk van het sluiten van de browser of niet. De variabelen zelf worden wel nog een tijdje op de server bewaard, omdat de server niet kan weten dat de gebruiker zijn browser heeft afgesloten. Deze tijd wordt bepaald in het php.inibestand door de session.gc_maxlifetime-instelling. Deze staat standaard op 440 seconden of 24 minuten. Dit betekent dat er, om een sessie in stand te houden, niet meer dan 24 minuten inactiviteit mag zijn. Er bestaat echter wel een mogelijkheid om deze sessie toch expliciet te stoppen en daarmee alle variabelen op de server te wissen. De gegevens worden op de server geïdentificeerd door de sessie-id. Deze ID wordt telkens doorgegeven aan de server, als de bezoeker gebruik maakt van sessies. Als de ID nog niet bestaat, wordt deze aangemaakt als een uniek nummer. Omdat de ID telkens moet doorgegeven worden aan de server bij het versturen van gegevens wordt deze ID opgeslagen op de computer in de vorm van een cookie. Het enige wat dus over gestuurd wordt is de sessie-id. De gegevens worden enkel op de server bewaart en de ID is als het ware de sleutel tot deze gegevens. Hou er dus wel rekening mee, dat als je gebruik wilt maken van sessies, dat de gebruiker cookies moet toestaan. Werken met sessies Het werken met sessies is behoorlijk eenvoudig. PHP bevat namelijk een uitgebreide verwerking van sessies. Het werken zal voornamelijk uit 3 stappen bestaan: opstarten van een sessie het gebruik van de sessie het stoppen van de sessie 4 P a g i n a

125 Opstarten van een sessie Het opstarten gebeurt door eenvoudig de functie session_start() op te roepen. Bij het opstarten van deze sessie, wordt er eerst gecontroleerd of er al een sessie voor deze gebruiker bestaat. Daarvoor wordt er gekeken of er een cookie op de pc van de bezoeker staat die aan de juiste omschrijving voldoet (correcte session-id). Indien dit niet zo is, wordt er op de server ruimte voorzien voor het opslaan van de gebruikte sessie-variabelen en wordt er een cookie gestuurd naar de browser met daarin de waarde van de sessie-id. Deze ID is een nummer bestaande uit 32 hexadecimale cijfers, vb: 6bf5ejk2lmviflr4e5dtiquv. Als er wel al een sessie loopt, wordt er geen nieuwe opgestart, maar wordt de cookie uitgelezen. Aan de hand van deze cookie weet de server welke variabelen hij moet gebruiken in het script. Doordat de session_start() iets terugstuurt naar de browser in de HTTP-headers, moet session_start() opgeroepen worden vóór er iets van output naar de browser gestuurd wordt. Doe je dit niet dan zal je script niet werken. De ID van de huidige sessie kun je terugvinden door de functie session_id() op te roepen. Gebruik van de sessie variabelen Nadat je de session_start() opgeroepen hebt, kun je gebruik maken van de variabele $_SESSION[]. Deze array-variabele kan gebruikt worden om elk type gegevens in op te slaan, inclusief andere arrays. Vergeet je de functie session_start() op te roepen in het begin van je script dan gaan de eventuele wijzigingen in de $_SESSION[]-variabele verloren zodra het script eindigt. Sessies verwijderen In sommige omstandigheden wil je alle of slechts een aantal sessievariabelen verwijderen. Denk bijvoorbeeld aan foutafhandelingen in een formulier, of het afmelden bij een bepaalde pagina. Gedeeltelijk verwijderen van sessievariabelen Om één sessievariabele te verwijderen tijdens de uitvoer van een script, kun je gebruik maken van de standaardfunctie unset(). Deze functie zorgt ervoor dat de opgeroepen variabele verwijderd wordt: Vergeet vooral niet om op te geven welke waarde je wilt verwijderen uit je $_SESSION[]variabele. Geef je deze niet op, dan wordt je volledige $_SESSION-variabele verwijdert. De volledige sessie verwijderen We zouden ook unset($_session) kunnen gebruiken om een volledige sessie te beëindigen. Meestal wordt hiervoor echter meestal de functie session_destroy() gebruikt, omdat de volledige $_SESSION[] verwijdert wordt. Deze session_destroy() wordt meestal gebruikt bij afmeld-pagina's. <?php session_start(); session_destroy(); header("location: login.php");?> Vergeet niet om de session_destroy te laten voorafgaan door een session_start()! Oefeningen Het project van deze cursus: Webshop We gaan onze Webshop uitbreiden met een winkelwagen vol met cursussen. 5 P a g i n a

126 Aangezien we de sessie variabelen op alle pagina's gaan gebruiken, starten we het gebruik van sessies in het script functies.php (dit script wordt in het begin van alle pagina's uitgevoerd). session_... Meerdere cursussen In plaats van rechtstreeks naar een inschrijfpagina te gaan, gaan we via een pagina die de gegevens aan de winkelwagen toevoegt en terug springt naar de pagina waar onze cursussen staan. De koppeling in het script... wordt nu: <td><a href="winkelwagen.php?cursus=<?php print urlencode($cursusnaam);?>&cat=<?php print $cat;?>">toevoegen</a></td> Uit dit fragment blijkt dat we springen naar het script... en we als argumenten de cursus én de categorie meegeven. Pas de de bijhorende kolomtitel van de tabel aan naar: <th>winkelwagen</th> Cursussen aan de winkelwagen toevoegen De doorgestuurde gegevens bevinden zich in $_GET-variabele. Het script om een cursus aan de sessie variabelen toe te voegen wordt: <?php require 'functies.php'; $categorie = $_GET['cat']; $cursus = $_GET['cursus']; $_SESSION['winkelwagen'][] = array ( 'categorie' => $categorie, 'cursus' => $cursus); header("location: index.php?cat=$categorie");?> De sessie variabele winkelwagen is dus een array met cursussen. Elke cursus in de sessie variabele winkelwagen is op zijn beurt een array met de categorie en de naam van de cursus. De sessie variabele winkelwagen is dus een meervoudige array. Uiteindelijk gebruiken we de header()-functie om terug te springen naar de pagina index.php. Deze header kun je enkel en alleen aanroepen, als er nog geen output naar de browser verstuurd werd. Let er dus op dat er geen spaties (of nieuwe regels) buiten de php-code staan. Ook niet in het door winkelwagen.php opgeroepen functies.php script. Het winkelmandje weergeven Daarvoor gebruiken we een op de PHP pagina index.php onder de cursussen de volgende AJAX aanroep: <div id="winkelwagen"></div> <script type="text/javascript"> ajax("winkelwagenweergeven.php?cat=<?php print $cat;?>","..."); </script> Het PHP script om de winkelwagen via AJAX weer te geven wordt dan: 2 3 <?php // winkelwagenweergeven.php... 'functies.php'; $cat = $_GET['cat']; 6 P a g i n a

127 4?> 5 <h2>winkelwagen</h2> 6 <?php if (is_array($_session['winkelwagen'])):?> 7 <table border="0"> 8 <tr> 9 <th>cursus</th> 0 <th>omschrijving</th> <th>categorie</th> 2 <th align="right">prijs</th> 3 </tr> 4 <?php...($_session['winkelwagen'] as $cursus):?> 5 <tr> // een rij per cursus 6 <td><?php print $cursus['cursus'];?></td> 7 <td><?php print cursuseigenschap($cursus['categorie'], $cursus['cursus'], 'Omschrijving');?></td> 8 <td><?php print $cursus['categorie'];?></td> 9 <td align="right"><?php $prijs = cursuseigenschap(...,..., 'Prijs'); 20 $tebetalen += $prijs; 2 print prijsweergeven($prijs);?></td> 22 </tr> 23 <?php endforeach;?> 24 <tr> 25 <td align="center"><a href="inschrijven.php">inschrijven</a></td> 26 <td align="center"><a href="winkelwagenwissen.php?cat=<? php...;?>">winkelwagen wissen</a></td> 27 <th align="right">totaal:</th> 28 <td align="right"><?php print prijsweergeven($tebetalen);?></td> 29 </tr> 30 </table> 3 <?php...?> 32 <p>de winkelwagen is leeg.</p> 33 <?php...?> De winkelwagen leegmaken Dit kunnen we door de sessie-variabele te verwijderen waarin de winkelwagen bijgehouden wordt. Het PHP script... wordt: <?php session_start(); unset($_session['winkelwagen']); $categorie = $_GET['cat']; header("...");?> Op het laatste springen we dan terug naar onze index-pagina. 7 P a g i n a

128 Weergeven van de winkelwagen bij de inschrijving Ook in inschrijving.php willen we de gekozen cursussen netjes weergeven. Daarvoor passen we het PHP script... voor de weergave van de winkelwagen als volgt aan: De Kop 2 (h2) mag weergegeven worden als de GET variabele weergave niet de waarde inschrijven bevat. Als de GET variabele weergave de waarde inschrijven bevat, wordt als Kop 2 de tekst U wenst zich in te schrijven voor: weergegeven. Ook de koppelingen (hyperlinks) in de onderste rij naar inschrijven.php en winkelwagenwissen.php mogen enkel weeggegeven worden als de GET variabele weergave de waarde inschrijven bevat. De PHP pagina... om in te schrijven pas je als volgt aan: Voeg de JavaScript code voor AJAX toe aan de pagina. Zorg dat de winkelwagen onder de Kop (h) wordt weergegeven. Pas de Kop aan naar: <h>inschrijvingsformulier</h> Om de prijs automatisch in het formulier in te vullen, pas je volgende zaken aan: Pas het PHP script winkelwagenweergeven.php aan zodat de cel waarin de te betalen prijs staat het id tebetalen krijgt <td align="right" id="tebetalen"><?php print prijsweergeven($tebetalen);?></td> Voeg in de PHP pagina inschrijven.php juist na de JavaScript regel waarmee de ontvangen HTML code op het scherm wordt geplaatst de regel: document.getelementbyid("prijs").value = document.getelementbyid("tebetalen").innerhtml; 8 P a g i n a

129 Weergeven van de winkelwagen bij het verwerken van de inschrijving Bij het doorsturen van de verschillende s moet de winkelwagen weergegeven worden. Pas het PHP script voor het weergeven van de winkelwagen als volgt aan: De Kop 2 (h2) mag niet weergegeven worden als de GET variabele weergave de inhoud bevat. De koppelingen (hyperlinks) in de onderste rij naar inschrijven.php en winkelwagenwissen.php mogen enkel weeggegeven worden als de GET variabele leeg is. Pas de PHP pagina met de verwerking van de inschrijving als volgt aan: Met de volgende regels PHP code wordt de weergave van een winkelwagen in een string opgeslagen: ob_start(); // vang de uitvoer van een PHP script op $_GET['weergave'] = " "; // zet gewenste GET variabele include "winkelwagenweergeven.php"; // Voer het externe PHP script uit $winkelwagen = ob_get_contents(); // plaats de ontvangen uitvoer van het externe PHP script in een string ob_end_clean(); // stop het opvangen van de uitvoer Daar zowel de PHP pagina inschrijven_verwerken.php als het PHP script winkelwagenweergeven.php het PHP script functies aanroept, krijgen we een conflict (2 maal aanroepen zorgt voor een fout). Pas de aanroep in het PHP script winkelwagenweergeven.php als volgt aan: require_once 'functies.php'; // enkel laden indien nog niet aanwezig Pas het bericht naar de administratie als volgt aan: $berichtadministratie = <<<eod <p>beste,</p> $voornaam $naam wenst zich in te schrijven voor: $winkelwagen <pre>$formuliergegevens</pre> eod; Pas het bericht naar de cursist op een gelijkaardige manier aan. Daar de winkelwagen in een HTML tabel wordt weergegeven, moeten de s in HTML verzonden worden. Pas het verzenden van de naar de cursist als volgt aan: 9 P a g i n a

130 $header = "FROM: ". _ADMINISTRATIE. "\r\nmime-version:.0\r\ncontent-type: text/html; charset=utf-8"; mail($ , "Inschrijving", $berichtcursist, $header); Pas op een gelijkaardige manier het verzenden van de naar de administratie aan. Om de HTML weergave van de s te zien, moet je in de Opties bij de Weergavevoorkeuren de optie HTML-versie standaard tonen activeren. Vergeet de aanpassing niet te versturen (knop). Zorg dat na het versturen van de s de winkelwagen wordt leeggemaakt. Categorie bijhouden Nu houden we de categorie bij door deze telkens via GET aan de PHP pagina's door te geven. Pas de webshop aan zodat je de categorie met behulp van een sessie variabele bijhoudt. Webshop afwerken Bij het online testen blijkt bij het toevoegen van cursussen aan de winkelwagen de volledige pagina te herladen, en dit kost tijd. Met AJAX kan dit sneller: In het PHP script verantwoordelijk voor het toevoegen van cursussen (winkelwagen.php) schakel je de regel verantwoordelijke voor het herladen van de PHP pagina index.php uit. In het PHP script verantwoordelijk voor het weergeven van de cursussen (cursussen.php) pas je cel met de koppeling (hyperlink) aan voor AJAX: <td><span style="color:#00f; text-decoration:underline; cursor:pointer" onclick="ajax('winkelwagen.php?cursus=<?php print urlencode($cursusnaam);?>&cat=<?php print $cat;?>','winkelwagen'); ">Toevoegen</span> </td> <td><span style="color:#00f; text-decoration:underline; cursor:pointer" onclick="ajax('winkelwagen.php?cursus=<?php print urlencode($cursusnaam);?>&cat=<?php print $cat;?>','winkelwagen'); ">Toevoegen</span> </td> Na het aanpassen van de winkelwagen moet deze nog worden weergegeven. Dit gebeurt na het ontvangen van de HTML code van winkelwagen.php (niets) in de JavaScript functie op de pagina index.php. Na het weergeven van de ontvangen HTML code voeg je de volgende functionaliteit toe: if (url.search("winkelwagen.php") == 0){ ajax("winkelwagenweergeven.php?cat=<?php print $cat;?>","winkelwagen"); Waarschuwing Bij de ontwikkeling van een echte Webshop komt nog veel meer kijken. M.a.w. de webshop uit deze cursus diende enkel om de theorie in te oefenen en is zeker niet veilig genoeg om op het Internet als een actieve webshop gebruikt te worden. Om PHP scripts te beveiligen lees je best ook het aanvullende hoofdstuk i.v.m. beveiliging. Aanmelden Maak een PHP pagina waarop een gebruiker zijn voornaam en naam moet opgegeven om zichzelf aan te melden. 20 P a g i n a

131 Controleer met behulp van een PHP pagina of de voornaam en naam overeenkomen met een lijst van toegelaten personen. Indien de gebruiker niet voorkomt in de lijst met toegelaten personen, moet aanmeldpagina terug verschijnen. Indien de gebruiker wel in de lijst opgenomen is, wordt de inhoud van de PHP pagina getoond en worden de gegevens in een sessie variabele opgeslagen. Een derde pagina, doet een controle of de gebruiker aangemeld is of niet. Als deze niet correct is aangemeld, moet hij teruggestuurd worden naar de aanmeldpagina. Als hij wel correct is aangemeld, krijgt hij een aangepaste pagina te zien. Geef bij het opgeven van een verkeerde voornaam of naam een foutmelding weer. Maak ook een pagina waar je je kan afmelden (sessie vernietigen). PHP beveiliging Sql-injectie en xss: de beste verdediging Het is je misschien opgevallen dat er de laatste tijd in de media nogal vaak over datalekken wordt gesproken. De meeste beveiligingslekken hebben één ding gemeen: ze worden allemaal veroorzaakt door sql-injectie. Sql-injectie is een van de aanvalsmethoden die een hacker kan gebruiken als gebruikersinvoer op een website niet met voldoende zorg wordt behandeld. Ook cross site scripting wordt daardoor veroorzaakt. Deze problemen zijn al jaren bekend, maar toch blijken er keer op keer websites kwetsbaar voor te zijn. Dat het een groot probleem is, blijkt ook uit de top-0 van beveiligingsrisico's die het Open Web Application Security Project opstelde. Injecties, waaronder die van sql, staan op de eerste plaats. Veel ontwikkelaars lijken dus niet of niet goed genoeg te weten wat sql-injectie is en hoe het kan worden voorkomen. Wat zijn deze problemen, hoe worden ze veroorzaakt en hoe kunnen ze worden voorkomen? We richten ons vooral op de talen PHP en MySQL, hoewel het probleem ook bij andere programmeertalen en databasesoftware speelt. PHP en MySQL treffen we echter het meest aan bij datalekken waarbij sql-injectie een rol speelt. Om uit te leggen wat sql-injectie is, is enige kennis van programmeertalen nodig. Programmeertalen maken gebruik van strings - simpel gezegd: een verzameling karakters in een bepaalde volgorde. Strings die veranderd kunnen worden, worden variabelen genoemd. Veel ontwikkelaars maken gebruik van variabele strings om database-opdrachten samen te stellen. Daardoor kan zo'n opdracht dynamisch worden aangepast, bijvoorbeeld als een gebruiker een bepaalde pagina wil opvragen. Voor een inlogsysteem waarbij gebruikersnaam en wachtwoord moeten worden gecontroleerd, zou je bijvoorbeeld de volgende serie opdrachten kunnen gebruiken: 2 P a g i n a

132 Een normale gebruiker vult gewoon zijn gebruikersnaam en wachtwoord in om in te loggen. In de eerste twee statements wordt uitgelezen wat deze gebruiker heeft ingevoerd. In de derde opdracht (die hier voor de leesbaarheid op twee regels staat) wordt, aan de hand van de invoer, een string met een sql-opdracht samengesteld. De laatste twee opdrachten voeren deze query uit en controleren of de invoer het gewenste resultaat oplevert. Een kwaadwillende gebruiker doet het anders. Stel dat die kwaadwillende gebruiker wil inloggen met de username 'Joost', dan hoeft hij in het loginveld enkel Joost' -- in te voeren om MySQL om de tuin te leiden. Dat is een sql-injectie. Het invoerveld $username is namelijk bedoeld voor pure data, maar door de apostrof toe te voegen, worden de twee koppeltekens door MySQL geïnterpreteerd als een deel van de opdracht, om precies te zijn: "dit is het einde van de opdracht; negeer de rest van de regel." Het gedeelte van de opdracht waarin wordt gecontroleerd of het wachtwoord bij deze user correct is opgegeven, wordt zo overgeslagen. Als we aannemen dat er maar één username 'Joost' is - en dat wordt vrijwel altijd door de database afgedwongen - bevestigt de laatste opdracht uit het codeblok altijd dat naam en wachtwoord bij elkaar horen. Het wachtwoord is dan echter niet daadwerkelijk gecontroleerd. Er kunnen natuurlijk ook andere opdrachten aan de query worden toegevoegd. Via sql-injectie kunnen zo complete databases worden geplunderd of gemanipuleerd. Dat is geen theoretisch probleem: het gebeurt dagelijks. Het misbruiken van sql-injectie is simpeler dan op het eerste gezicht lijkt, want er zijn kant-en-klare tools die het zware werk doen. Bij die tools zijn het invoeren van een url en een paar drukken op de knop voldoende: de software gaat dan op zoek naar kwetsbaarheden en, indien aanwezig, slurpt deze desgewenst de hele database leeg. De effectiviteit verschilt van geval tot geval, maar over het algemeen geldt: als een website lek is, is het gebruiken van deze software kinderlijk eenvoudig. 22 P a g i n a

133 Cross site scripting Cross site scripting - vaak afgekort tot xss - is een vergelijkbaar probleem, dat opduikt wanneer user-input wordt verwerkt in de html-output. Een simpel voorbeeld is bij slecht gebouwde zoekmachines te zien. Als een gebruiker daar <script>alert('hoi');</script> als zoekterm invoert, wordt er niet op die term gezocht, maar wordt het javascript uitgevoerd: er verschijnt een pop-up. Een kwaadwillende kan een url zo opstellen, dat een argeloze gebruiker die erop klikt, ongewild een script laat uitvoeren. Dat script heeft dan toegang tot alle gegevens waar die gebruiker toegang toe heeft. Zo kunnen bijvoorbeeld cookies worden gestolen. Soms kunnen ook variabelen worden gebruikt die aan andere gebruikers worden getoond. Als een forum bijvoorbeeld niet goed is beveiligd, kan een kwaadwillende een script in een posting opnemen, maar ook bijvoorbeeld in zijn username. Xss kan ook worden misbruikt om beveiligingsproblemen in browsers te misbruiken, bijvoorbeeld door een Flash- of javascript-kwetsbaarheid te injecteren. Vooral input die aan andere gebruikers wordt getoond is daarvoor gevoelig. Vertrouw nooit een gebruiker "Het probleem is dat het al bij de start misgaat", zei HP-beveiligingsonderzoeker Alexander Hoole op de RSA Conference, een beveiligingsconferentie die eind februari in San Francisco van start ging. Hoewel sql-injectie vrij eenvoudig te voorkomen is, ontbreekt bij programmeurs toch vaak de benodigde kennis: "In leerboeken staat het al fout." mysql_real_escape_string De belangrijkste les is: wantrouw alle data die van de gebruiker afkomstig is. Het beste is om altijd aan te nemen dat een gebruiker te kwader trouw is - de kans dat een van de bezoekers dat ook daadwerkelijk ís, is gezien het grote aantal datalekken redelijk groot. Om te voorkomen dat MySQL-opdrachten in een variabele worden verstopt, kan in PHP de functie mysql_real_escape_string worden gebruikt. Die zorgt ervoor dat bepaalde karakters, waarmee het onderscheid tussen data en MySQL-code worden gemaakt, onschadelijk worden gemaakt. Dit noemt men 'escaping': voor een teken als een apostrof wordt dan een backslash geplaatst, zodat dat teken door MySQL als data wordt gezien, en niet als deel van de query. Deze opdracht zou voldoende moeten zijn om sql-injecties af te vangen. Het is van belang mysql_real_escape_string op het allerlaatste moment toe te passen: zo wordt voorkomen dat andere, latere bewerkingen nog onverwachte en mogelijk schadelijke resultaten opleveren. htmlspecialchars Een vergelijkbare functie is er in php voor het bewerken van user-input voordat deze in html wordt getoond: met htmlspecialchars worden karakters als '<', '>' en aanhalingstekens vervangen door html-entiteiten, zodat ze door de browser niet als onderdeel van de html-code worden verwerkt. Dit geldt voor alle input die van gebruikers afkomt en niet alleen voor invoervelden die zichtbaar zijn voor de gebruiker. Xss-scripts zijn hiermee effectief tegen te gaan. Maar uiteindelijk is bescherming tegen kwaadaardige code, hoe noodzakelijk ook, niet genoeg. De website Just-Eat.nl, waar mensen eten kunnen laten thuisbezorgen, liet het bedrag dat mensen moesten betalen door de browser van de gebruiker uitrekenen. Vervolgens werd bedrag dat naar de server gestuurd in een verborgen html-invoer-veld. 'Onzichtbaar' is echter niet hetzelfde als 'niet aan te passen': gebruikers konden het bedrag zelf veranderen en 23 P a g i n a

Dynamische websites met PHP (basis) Karel Nijs 2010/09

Dynamische websites met PHP (basis) Karel Nijs 2010/09 Dynamische websites met PHP (basis) Karel Nijs 2010/09 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen Editor = UltraEdit Geen DreamWeaver Browser = Internet Explorer Vereiste voorkennis: (X)HTML

Nadere informatie

De tag aan het begin van het PHPscript is "".

De tag aan het begin van het PHPscript is <?php aan het einde van het PHPscript gebruik je ?>. PHP Les 3 Commando ECHO Interessante links: o http://www.donboscozwijnaarde.be/~moermant/ o http://php.net/manual/en/function.echo.php o http://www.w3schools.com/php/default.asp Wat is PHP? PHP is een

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP.... 8 Joomla installeren op XAMPP... 15 Handige links... 16 2 Disclaimer Bij de samenstelling

Nadere informatie

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................

Nadere informatie

Over PHP. PHP en MySQL. 1.1 Inleiding. In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze

Over PHP. PHP en MySQL. 1.1 Inleiding. In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze Over PHP 1.1 Inleiding In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze programmeertaal? En hoe is het ontstaan? Ook leer je welke editors je kunt gebruiken om PHP-scripts te maken en hoe je eenvoudig

Nadere informatie

Voor vragen: http://www.richard3332.nl/ of mail naar Richard3332@gmail.com

Voor vragen: http://www.richard3332.nl/ of mail naar Richard3332@gmail.com Welkom bij mijn PHP tutorial (Deel 1) Ik ga in deze delen PHP uitleggen, dit doe ik in het programma notepad++ (gratis) deze kunt u downloaden van www.richard3332.nl/downloads.php Als u beschikt over dreamweaver

Nadere informatie

Test Joomla op je PC 1

Test Joomla op je PC 1 1 Disclaimer Bij de samenstelling van dit ebook is de grootst mogelijke zorg besteed aan de juistheid en correctheid van de informatie die in dit ebook wordt verstrekt. De auteur van dit ebook kan op geen

Nadere informatie

Dynamische websites met PHP (basis) Karel Nijs 2010/09

Dynamische websites met PHP (basis) Karel Nijs 2010/09 Dynamische websites met PHP (basis) Karel Nijs 2010/09 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen Editor = UltraEdit Geen DreamWeaver Browser = Internet Explorer Vereiste voorkennis: (X)HTML

Nadere informatie

van PSD naar JavaScript

van PSD naar JavaScript 2015 van PSD naar JavaScript F. Vonk versie 2 19-9-2015 inhoudsopgave 1. inleiding... - 2-2. ontwikkelomgeving... - 3-3. programmeerconcepten... - 4 - statement... - 4 - sequentie... - 4 - variabele en

Nadere informatie

Les 2 Eenvoudige queries

Les 2 Eenvoudige queries Les 2 Eenvoudige queries XAMP Apache server ( http ) mysql server PHP myadmin IAM SQL oefeningen Database phpmyadmin Import : sql_producten.sql, sql_winkel.sql, sql_festival.sql SAMS SQL in 10 minuten

Nadere informatie

XAMPP Web Development omgeving opzetten onder Windows.

XAMPP Web Development omgeving opzetten onder Windows. XAMPP Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 1 Xampp downloaden... 2 2 Installatie Xampp 1.7.4 op externe harddisk... 3 3 XAMPP herconfiguren...

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Software 1. php mysql. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar 2010-2011 semester 1

Software 1. php mysql. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar 2010-2011 semester 1 Software 1 php mysql bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar 2010-2011 semester 1 Alain Simons alain.simons@artesis.be Basis php 1. Introductie 2.

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

Lab Webdesign: Javascript 11 februari 2008

Lab Webdesign: Javascript 11 februari 2008 H2: BASISBEGRIPPEN In dit hoofdstuk zullen er enkele basisbegrippen worden behandelt PLAATSING VAN JAVASCRIPT-CODE DE SCRIPT-TAG De script-tag geeft aan dat er gebruik zal worden gemaakt van een scripttaal.

Nadere informatie

De voordelen van Drupal

De voordelen van Drupal Drupal is een open source Content Management System (CMS). Daarnaast kun je Drupal zien als een framework, dit betekent dat je modules (oftewel mini-applicaties) kunt implementeren in je installatie van

Nadere informatie

LES 3: XAMPP OF MAMP. Lesoverzicht:

LES 3: XAMPP OF MAMP. Lesoverzicht: LES 3: XAMPP OF MAMP Lesoverzicht: Aan de slag Wat is XAMPP (Windows & Linux) Installatie XAMPP Gebruik van XAMPP Wat is MAMP (Mac) Installatie MAMP Gebruik van MAMP Samenvatting Tijd: 15 minuten Doel:

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

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

HTML in Outlook 2007. Hoe zorgt u ervoor dat uw email goed in beeld komt? HTML in Outlook 2007 Hoe zorgt u ervoor dat uw email goed in beeld komt? HTML in Outlook 2007 Inleiding Emark Mail biedt u de mogelijkheid om kant en klare HTML nieuwsbrieven in te laden en te versturen.

Nadere informatie

Xampp Web Development omgeving opzetten onder Windows.

Xampp Web Development omgeving opzetten onder Windows. Xampp Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 3. Installatie Xampp... 3 1.1 Installatie Xampp Launcher... 7 1.2 Controle geïnstalleerde bestanden...

Nadere informatie

HANDLEIDING DMS Plugin Installatie, configuratie & werking

HANDLEIDING DMS Plugin Installatie, configuratie & werking HANDLEIDING DMS Plugin Installatie, configuratie & werking Dit document is de handleiding voor de installatie, configuratie en werking van de DMS Plugin. Versie 1-12/09/2005 Inhoudstafel 1 Installatie...

Nadere informatie

Webs.hogent.be Persoonlijke home/webdirectory voor personeel en studenten

Webs.hogent.be Persoonlijke home/webdirectory voor personeel en studenten Webs.hogent.be Persoonlijke home/webdirectory voor personeel en studenten Inleiding Als personeelslid of student aan de beschikt u over de mogelijkheid om 100 MB aan data centraal op onze servers te plaatsen.

Nadere informatie

A.C. Gijssen. 0.3 PHP en MySQL

A.C. Gijssen. 0.3 PHP en MySQL PHP en MySQL A.C. Gijssen 0.3 PHP en MySQL PHP en MySQL 0.4 Inhoudsopgave Voorwoord Deel 1 Over PHP 1.1 Inleiding...13 1.2 Wat is PHP?...14 1.3 De geschiedenis van PHP...15 1.4 Editor...16 1.5 PHP en websites...17

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Programmeren met Arduino-software

Programmeren met Arduino-software Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Zicht - Content Management Systeem een algemene beschrijving

Zicht - Content Management Systeem een algemene beschrijving Zicht - Content Management Systeem een algemene beschrijving Versie april/2008 Zicht nieuwe media ontwerpers 2008 1 Inleiding Een Content Management Systeem (CMS) is een webapplicatie waarmee je zonder

Nadere informatie

LES 1: AAN DE SLAG MET WORDPRESS. Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting. Tijd: 5 minuten

LES 1: AAN DE SLAG MET WORDPRESS. Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting. Tijd: 5 minuten LES 1: AAN DE SLAG MET WORDPRESS Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting Tijd: 5 minuten Doel: Aan het einde van deze les weet je wat WordPress is en kun je benoemen

Nadere informatie

Netwerken deel 2: Home- en mediaserver

Netwerken deel 2: Home- en mediaserver Netwerken deel 2: Home- en mediaserver Prakticum Microsoft Homeserver door Auteur: Theo De Paepe zondag 17 februari 2013 Versie: 2 U gaat akkoord met... Deze cursus wordt u aangeboden door de Vrienden

Nadere informatie

De installatie en configuratie van een webserver

De installatie en configuratie van een webserver pagina 1 van 60 De installatie en configuratie van een webserver In dit digitale practicum wordt de complete installatie en configuratie van een webserver behandeld. De installatie is uitgebreid getest

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Analyse Programmeertalen

Analyse Programmeertalen Analyse Programmeertalen De keuze van een programmeertaal mag niet onderschat worden. Het is dankzij deze taal dat de gebruiker interactie heeft met het complete systeem. Het is dus vanzelfsprekend dat

Nadere informatie

DrICTVoip.dll v 2.1 Informatie en handleiding

DrICTVoip.dll v 2.1 Informatie en handleiding DrICTVoip.dll v 2.1 Informatie en handleiding Nieuw in deze versie : Koppeling voor web gebaseerde toepassingen (DrICTVoIPwebClient.exe) (zie hoofdstuk 8) 1. Inleiding Met de DrICTVoIP.DLL maakt u uw software

Nadere informatie

JavaLogo-programma s op het web plaatsen

JavaLogo-programma s op het web plaatsen Bijlage JavaLogo-programma s op het web plaatsen In deze bijlage laten we u zien hoe u JavaLogo-programma s op het web kunt plaatsen, met als voorbeeld het programma Cirkels uit opgave 2.16. We gaan er

Nadere informatie

Installatie en configuratie documentatie

Installatie en configuratie documentatie Installatie en configuratie documentatie Assistance Web Portal v. 2.58, 2.60 Voor Windows 2003 / 2008 / XP / Vista / Windows 7 Assistance PSO handleiding, uitgegeven door Assistance Software. Alle rechten

Nadere informatie

Inleiding tot programmeren: Javascript

Inleiding tot programmeren: Javascript Inleiding tot programmeren: Javascript Een definitie JavaScript is een scripttaal met objectgeoriënteerde mogelijkheden. Deze geïnterpreteerde programmeertaal is vooral gericht op het gebruik in webpagina

Nadere informatie

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous 2006-2007 Voorwoord 1 Inhoudsopgave 2 Hoofdstuk 1 Inleiding 3 Hoofdstuk 2 icafe 2.1 Het idee 2.2 Mogelijkheden

Nadere informatie

Web building basis: HTML. Karel Nijs 2008/09

Web building basis: HTML. Karel Nijs 2008/09 Web building basis: HTML Karel Nijs 2008/09 Web building basis eerste les HTML intro Browsers HTML elementen HTML basis tags HTML attributen HTML kleuren HTML formattering Extra: HTML entities Web building

Nadere informatie

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407 Project plan Erwin Hannaart Sander Tegelaar 61849 62407 I4C2 I4C1 1 Inhoudsopgave Doel en doelgroep van het project... 3 Beschrijving van het project... 4 Benodigde materialen... 5 Te verwachten resultaten,

Nadere informatie

Lab Webdesign: Javascript 11 februari 2008

Lab Webdesign: Javascript 11 februari 2008 H3: HERHALINGSLUSSEN EN LOGICA Om de voorbeelden niet nodeloos lang te maken, zullen we in het vervolg niet altijd de SCRIPT-tags en de HTML-commentaarregels herhalen. Om de JavaScript-opdrachten --de

Nadere informatie

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

Les 15 : updaten van gegevens in de database (deel2). Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken

Nadere informatie

Handleiding gebruik webmail Roundcube maart 2010

Handleiding gebruik webmail Roundcube maart 2010 Handleiding gebruik webmail Roundcube maart 2010 U opent de webmail door te klikken op het pictogram webmail in de webstek www.edugo.be: 1. Inleiding 1.1 Wat is er nieuw? De webmail van edugo draait vanaf

Nadere informatie

Online c++ leren programmeren:

Online c++ leren programmeren: Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma

Nadere informatie

Netwerken deel 3: Home- en mediaserver : Theorie. door Auteur: zondag 11 september 2011. Versie:

Netwerken deel 3: Home- en mediaserver : Theorie. door Auteur: zondag 11 september 2011. Versie: Netwerken deel 3: Home- en mediaserver : Theorie door Auteur: zondag 11 september 2011 Versie: U gaat akkoord met... Deze cursus wordt u aangeboden door de Vrienden van de SNT, vzw, in samenwerking met

Nadere informatie

Syllabus Zelf een website bouwen. Artheos

Syllabus Zelf een website bouwen. Artheos Syllabus Zelf een website bouwen Artheos Helma de Boer Artheos Webdiensten & Office Support www.artheos.nl 2012 Inhoud Syllabus Zelf een website bouwen H1 De techniek van een website... 3 1.1 Browser en

Nadere informatie

Cursus Onderwijs en ICT. Programmeren met Visual Basic

Cursus Onderwijs en ICT. Programmeren met Visual Basic Cursus Onderwijs en ICT Jaargang 2, deel 23 (versie 1.0 NL 2-7-2011) Programmeren met Visual Basic door Serge de Beer Inleiding In sommige gevallen biedt het aanbod op de softwaremarkt niet wat je zoekt.

Nadere informatie

Gegevens. Cliënt met browser Server met Apache/IIS Databaseserver En PHP

Gegevens. Cliënt met browser Server met Apache/IIS Databaseserver En PHP Webservers inrichten Inleiding De webapplicatie die je hebt geschreven, is volgens het three-tier systeem ontwikkeld: 1. Gegevensopslag in een database 2. PHP voor de logica 3. XHTML (en CSS) voor de presentatie

Nadere informatie

Zonnepanelen Hoe krijg je de data op je website?

Zonnepanelen Hoe krijg je de data op je website? Zonnepanelen Hoe krijg je de data op je website? Beste website-bezoeker, Omdat ik al heel wat vragen kreeg over het gedeelte zonne-energie op mijn website, heb ik besloten om de werkwijze die ik gevolgd

Nadere informatie

11. Website controleren

11. Website controleren 11. Website controleren 11.1 Website controleren op verschillende browsers Het blijkt nog altijd nodig te zijn een website te controleren. De website zoals deze er in Kompozer uit ziet, ziet er op internet

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

Gebruikershandleiding voor: Beperkte Password protectie met JavaScript

Gebruikershandleiding voor: Beperkte Password protectie met JavaScript Gebruikershandleiding voor: Beperkte Password protectie met JavaScript URL: http://home.hccnet.nl/s.f.boukes/html-2/html-202.htm INHOUD : 1. Structuur van een beveiligde site 2. Login-formulier 3. Login

Nadere informatie

HTML Editor: de eerste stappen

HTML Editor: de eerste stappen LES 18 HTML Editor: de eerste stappen In deze les leert u werken met HTML Editor. Daarbij geven we tevens een inleiding tot HTML. Hoewel op dit moment HTML versie 4.01 in gebruik is, maakt de HTML Editor

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

6. De sitemap of stamboom van uw website

6. De sitemap of stamboom van uw website 6. De sitemap of stamboom van uw website Dynamisch of statisch? CMS of Dreamweaver? Een databankgestuurde website en CMS Grotere websites hebben nood aan een eenvoudiger manier om informatie toe te voegen,

Nadere informatie

Werken met afbeeldingen in webpagina's

Werken met afbeeldingen in webpagina's Werken met afbeeldingen in webpagina's In webpagina's komen heel vaak afbeeldingen voor. Toch gaan webpagina's helemaal anders om met afbeeldingen dan bijvoorbeeld een PowerPoint-presentatie of een Word-document.

Nadere informatie

2.4.4 LibreOffice Werkblad Mac

2.4.4 LibreOffice Werkblad Mac 2.4.4 LibreOffice Werkblad Mac Deze cursus bestaat uit 4 delen. 1. Werkblad gebruiken voor berekeningen 2. Werkblad gebruiken voor het maken van lijsten 3. Werkblad gebruiken voor een (eenvoudige) boekhouding

Nadere informatie

Inleiding Visual Basic en VBA. Karel Nijs 2009/01

Inleiding Visual Basic en VBA. Karel Nijs 2009/01 Inleiding Visual Basic en VBA Karel Nijs 2009/01 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen Ms Excel 2003 Online hulp: http://www.ozgrid.com/vba/ http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx

Nadere informatie

9. MYSQL. Daarin zien we het administratie paneel van mysql.

9. MYSQL. Daarin zien we het administratie paneel van mysql. 9. MYSQL We kunnen ook in dit systeem gebruik maken van de gekende ACCESS databanken. Zolang het maar relationale databanjken zijn kunnen we er gebruik van maken. In PHP echter maakt men meestal gebruik

Nadere informatie

JavaScript. Leerkracht: Dany Pinoy door woensdag 28 november 2012. Versie: September 2012. Website: http://webdesign.pindanet.be

JavaScript. Leerkracht: Dany Pinoy door woensdag 28 november 2012. Versie: September 2012. Website: http://webdesign.pindanet.be JavaScript Leerkracht: Dany Pinoy door woensdag 28 november 2012 Versie: September 2012 Website: http://webdesign.pindanet.be U gaat akkoord met... Deze cursus wordt u aangeboden door de Vrienden van

Nadere informatie

Cursus Onderwijs en ICT. bloggen met Wordpress

Cursus Onderwijs en ICT. bloggen met Wordpress Cursus Onderwijs en ICT Deel 21 (versie 1.0 NL 27-04-2011) bloggen met Wordpress door Serge de Beer Inleiding Zelf ben ik niet zo n blogger. Niet dat ik het niet heb geprobeerd trouwens. Al regelmatig

Nadere informatie

Handleiding Webhosting Online Linux

Handleiding Webhosting Online Linux Handleiding Webhosting Online Linux April 2015 2015 Copyright KPN Zakelijke Markt Alle rechten voorbehouden. Zonder voorafgaande schriftelijke toestemming van KPN Zakelijke Markt mag niets uit dit document

Nadere informatie

Mijn HVW-dossier. Veel voorkomende vragen en problemen

Mijn HVW-dossier. Veel voorkomende vragen en problemen Mijn HVW-dossier Veel voorkomende vragen en problemen Inhoud 1. INSTALLATIE... 3 Welke software heeft u nodig?... 4 Uw installatie testen... 4 2. VRAGEN EN PROBLEMEN... 5 Federaal burgertoken... 6 Nieuwe

Nadere informatie

In de meeste netwerkomgevingen staan de firewalls het browsen of surfen op internet toe.

In de meeste netwerkomgevingen staan de firewalls het browsen of surfen op internet toe. m:\helpdesk\vgmbox\documenten\handleiding - inzet binnen beveiligd netwerk (dmv proxyserver) - 20110112 - tbv pdf.doc Inzet van De VGM Box binnen een beveiligd netwerk Dit document beschrijft het functioneren

Nadere informatie

VERENIGINGSWIJZER.NL FINAL DOCUMENT

VERENIGINGSWIJZER.NL FINAL DOCUMENT Vrije Universiteit Amsterdam Faculteit der Exacte Wetenschappen Project Multimedia Peter van Ulden Studentnr. 1494759 VERENIGINGSWIJZER.NL FINAL DOCUMENT INHOUDSOPGAVE 1 Inleiding...3 2 Aanpak & Techniek...4

Nadere informatie

1.Noem de vijf categorieën waarin programmeertalen kunnen worden ingedeeld en geef van elke categorie één voorbeeld.

1.Noem de vijf categorieën waarin programmeertalen kunnen worden ingedeeld en geef van elke categorie één voorbeeld. Module 4 programmeren 1.Noem de vijf categorieën waarin programmeertalen kunnen worden ingedeeld en geef van elke categorie één voorbeeld. Machinecode Assembleertalen: assembly Hogere programmeertalen:

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Handleiding: Whitelabel Customersite

Handleiding: Whitelabel Customersite ARGEWEB B.V. Handleiding: Whitelabel Customersite Controlportal.nl Argeweb Support 8-1-2009 Handleiding voor het gebruik maken van de Whitelabel Customersite op controlportal.nl, door Resellers van Argeweb.

Nadere informatie

Organisatie. Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht

Organisatie. Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht Even voorstellen Organisatie Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht Ons team Philip Vergunst Oprichter en webdeveloper Nathan Vergunst Back-end developer Cor van

Nadere informatie

ALL-CRM Installatie handleiding

ALL-CRM Installatie handleiding ALL-CRM Installatie handleiding Auteur: Shams Hadi Datum: 05-06-2014 Version: v1.2 2014, All-CRM 1 Inhoudsopgave 1 Inhoudsopgave 2 2 Systeem vereisten 3 2.1 Cliënt (Desktop applicaties) 3 2.2 Cliënt (Internet

Nadere informatie

Excel reader. Beginner Gemiddeld. bas@excel-programmeur.nl

Excel reader. Beginner Gemiddeld. bas@excel-programmeur.nl Excel reader Beginner Gemiddeld Auteur Bas Meijerink E-mail bas@excel-programmeur.nl Versie 01D00 Datum 01-03-2014 Inhoudsopgave Introductie... - 3 - Hoofdstuk 1 - Databewerking - 4-1. Inleiding... - 5-2.

Nadere informatie

Handleiding NZa-portaal. voor zorgaanbieders

Handleiding NZa-portaal. voor zorgaanbieders Handleiding NZa-portaal voor zorgaanbieders Versie 1, 30 maart 2011 Inhoud 1. Starten 3 2. Algemene zorgaanbiederspagina 5 3. Download NZa-bestanden 6 4. Individuele zorgaanbiederspagina 7 5. Downloaden

Nadere informatie

Web building gevorderden: CSS & JavaScript. Karel Nijs 2008/11

Web building gevorderden: CSS & JavaScript. Karel Nijs 2008/11 Web building gevorderden: CSS & JavaScript Karel Nijs 2008/11 Webbuilding gevorderden les 3 JavaScript intro JavaScript invoegen JavaScript statements JavaScript popup berichten JavaScript functies JavaScript

Nadere informatie

Globale kennismaking

Globale kennismaking Globale kennismaking Kennismaking Tesla CMS 1. Dashboard 2. pagina beheer - pagina aanmaken - pagina aanpassen - pagina verwijderen - pagina seo opties - zichtbaarheid pagina 3. subpagina beheer - subpagina

Nadere informatie

Dropbox. Handleiding. Dropbox handleiding Dieter David david.dieter@telenet.be. Dieter David david.dieter@telenet.be

Dropbox. Handleiding. Dropbox handleiding Dieter David david.dieter@telenet.be. Dieter David david.dieter@telenet.be 0 Dropbox Handleiding Dieter David david.dieter@telenet.be 1 1. Wat is dropbox? 2 Dropbox is 2ledig : schijfruimte online (= back-up) synchroniseren en delen van bestanden op je online schrijfruimte Je

Nadere informatie

Instellingen voor het publiceren opgeven

Instellingen voor het publiceren opgeven 289 Aanvulling hoofdstuk 9 i.p.v. blz. 289 tot en met 308 Instellingen voor het publiceren opgeven Voordat u webpagina s kunt publiceren, moet u eerst de instellingen voor het publiceren opgeven. Anders

Nadere informatie

Een ASP.NET applicatie opzetten. Beginsituatie:

Een ASP.NET applicatie opzetten. Beginsituatie: Hoofdstuk 1 Een ASP.NET applicatie opzetten Beginsituatie: Windows XP Pro, Windows Vista Pro of Windows 7 Pro Visual Studio.NET moet zijn geïnstalleerd. Let hierbij op dat de Express versie niet voldoet.

Nadere informatie

Les C-04 Programmeren

Les C-04 Programmeren Les C-04 Programmeren 4.1 Programmeertalen In les B-03 is uitgelegd hoe de processor van een moderne computer geprogrammeerd dient te worden: programmacode wordt omgezet in assemblercode, die vervolgens

Nadere informatie

Handleiding Sportlink Club

Handleiding Sportlink Club Handleiding Sportlink Club Dit document is automatisch gegenereerd. We raden u aan de handleiding online te raadplegen via www.sportlinkclub.nl/support. 1. Installatiehandleiding.........................................................................................

Nadere informatie

De Kleine WordPress Handleiding

De Kleine WordPress Handleiding Introductie Dit is geen uitgebreide handleiding om een WordPress website of blog mee te bouwen. Het is ook geen overzicht van alle aspecten die een WordPress website zo bijzonder maken en geen verhandeling

Nadere informatie

PHP-OPDRACHT SITE BOUWEN

PHP-OPDRACHT SITE BOUWEN PHP-OPDRACHT SITE BOUWEN PERIODE 4 LEERJAAR 1 Opleiding: Duur: Applicatieontwikkelaar 1 onderwijsperiode (4-8 weken) Voorkennis: Basiscursus PHP 5.4 Victor Peters (978 90 125 8499 9) Basiscursus XHTML,

Nadere informatie

Zelftest Informatica-terminologie

Zelftest Informatica-terminologie Zelftest Informatica-terminologie Document: n0947test.fm 01/07/2015 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTIE Deze test is een zelf-test, waarmee u

Nadere informatie

Prijslijst 2015. Algemeen. Reparaties. Installaties. Voorrijkosten binnen gemeente Bedum: 5,- Voorrijkosten buiten gemeente Bedum: 20,-

Prijslijst 2015. Algemeen. Reparaties. Installaties. Voorrijkosten binnen gemeente Bedum: 5,- Voorrijkosten buiten gemeente Bedum: 20,- Prijslijst 2015 Algemeen Voorrijkosten binnen gemeente Bedum: 5,- Voorrijkosten buiten gemeente Bedum: 20,- Advisering: 10,- per uur. Reparaties Onderzoekskosten: 10,- Reparatiekosten: 10,- Installaties

Nadere informatie

R5.0. Bijlage IV. Video converter. Handleiding. Clixmaster Studio. Gebruikershandleidingen

R5.0. Bijlage IV. Video converter. Handleiding. Clixmaster Studio. Gebruikershandleidingen Bijlage IV R5.0 Video converter Gebruikershandleidingen Clixmaster Studio Handleiding 1/7 Bijlage IV - Video Converter 2010 Clixmaster BV Alle rechten voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd,

Nadere informatie

- Plan Zo kun je een. website bouwen!

- Plan Zo kun je een. website bouwen! - Plan Zo kun je een website bouwen! BoekjeHoeKanJeEenWebsiteBouwen.i1 1 8-7-2008 17:23:14 BoekjeHoeKanJeEenWebsiteBouwen.i2 2 8-7-2008 17:23:15 In dit boekje staat de uitgebreide versie van hoe je een

Nadere informatie

Vraag en Antwoord https://aanvragen.nza.nl

Vraag en Antwoord https://aanvragen.nza.nl https://aanvragen.nza.nl Versie 1 d.d. 24 augustus 2015 (Na versie 1: De met * gemarkeerde vragen zijn nieuw of gewijzigd t.o.v. de vorige versie.) Dit document is onderverdeeld in 3 thema s: 1. Inloggen

Nadere informatie

Een website omzetten naar WordPress

Een website omzetten naar WordPress 1 Een website omzetten naar WordPress Er zijn talloze programma s beschikbaar om websites te maken. In de titels Basisgids Websites maken met WordPress en Websites maken met WordPress voor senioren wordt

Nadere informatie

ideal Betaal Formulier (Ondersteund o.a. ideal, MisterCash, Direct E-Banking en Credit Card)

ideal Betaal Formulier (Ondersteund o.a. ideal, MisterCash, Direct E-Banking en Credit Card) Script: Versie: 0.5 Licentie: ideal Betaal Formulier (Ondersteund o.a. ideal, MisterCash, Direct E-Banking en Credit Card) Gratis te gebruiken door (erkende) goede doelen. 200,00 excl. BTW voor aanschaf

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

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

Versie 0.4. Documentatie Onsweb Club plugin voor KNKV verenigingen. Laatste wijziging: 19 juli 2012 Auteurs: Marien Dongstra, Sebastian Huisman Documentatie Onsweb Club plugin voor KNKV verenigingen Versie 0.4 Laatste wijziging: 19 juli 2012 Auteurs: Marien Dongstra, Sebastian Huisman Alle rechten in dit document zijn voorbehouden. www.onsweb.nl,

Nadere informatie

Inhoudsopgave. versie 0.8

Inhoudsopgave. versie 0.8 JOOMLA! INSTALLATIE HANDLEIDING versie 0.8 Inhoudsopgave Stappenplan...3 Inrichten database...4 Configuratiecentrum cpanel...4 Aanmaken van een database gebruiker...5 Aanmaken van een database...6 Gebruiker

Nadere informatie

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

Een webpagina maken. Een website bouwen met HTML en CSS practicum 1 Een webpagina maken De komende periode wordt in 8 practica een aantal technieken behandeld, die je nodig hebt om een (eenvoudige) website te kunnen bouwen. Nadat je deze 8 practica hebt doorgewerkt, moet

Nadere informatie

Cursus Gmail. Lieve D Helft. ICT in het basisonderwijs

Cursus Gmail. Lieve D Helft. ICT in het basisonderwijs Cursus Gmail Lieve D Helft ICT in het basisonderwijs Auteur: Lieve D Helft Titel: Cursus Gmail April 2013 2013, Lieve D Helft Lieve.dhelft@telenet.be Alle rechten voorbehouden. Niets van deze uitgave mag

Nadere informatie

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen Installeer Apache2: Deze howto gaat over name based virtual hosting onder Apache 2.x., en is getest onder OpenSUSE 11 maar is in feite ook van toepassing op de andere distributies. Alleen Debian en afgeleide

Nadere informatie

VBA voor doe het Zelvers - deel 10

VBA voor doe het Zelvers - deel 10 VBA voor doe het Zelvers - deel 10 Handleiding van Auteur: leofact Oktober 2014 handleiding: VBA voor doe het Zelvers - deel 10 VBA voor Doe het Zelvers is een reeks artikelen, bedoelt voor mensen die

Nadere informatie