Voorwoord 1. Voorwoord

Maat: px
Weergave met pagina beginnen:

Download "Voorwoord 1. Voorwoord"

Transcriptie

1 Voorwoord 1 Voorwoord Naar aanleiding van vele PHP gerelateerde vragen en het ontbreken van een duidelijke on line Nederlandse beginnershandleiding, heb ik in december 2007 besloten om zo n handleiding zelf te schrijven. Deze handleiding is sinds januari 2008 op mijn website te vinden. In eerste instantie was het de bedoeling om deze handleiding enkel online te publiceren. Vele positieve reacties en de vraag of er ook nog een printbare versie van deze handleiding zou komen, hebben mij doen besluiten om hem ook in boekvorm uit te geven. Inspiraties voor de inhoud en opbouw van deze handleiding heb ik voornamelijk opgedaan aan de hand van bestaande handleidingen van onder ander Arjen Kapteijn en Robert Deiman. Met deze informatie ben ik verder aan de slag gegaan en heb deze verder uitgebreid en dit is het uiteindelijke resultaat. Ik wens je veel succes met het lezen van deze handleiding en waarschijnlijk je eerste stappen als PHP programmeur. Joren de Wit.

2 2 PHP Beginnershandleiding

3 Inhoudsopgave 3 Inhoudsopgave VOORWOORD INLEIDING... 5 Wat is PHP?... 5 Voorkennis... 5 Wat heb ik nodig? MIJN EERSTE PHP SCRIPT... 6 Ons eerste PHP bestand... 6 Alternatieve open en sluittags... 7 Echo VARIABELEN... 8 Aanmaken van variabelen... 8 Verschillende typen variabelen... 8 Commentaar... 8 Naamgeving... 9 Variabelen buiten quotes... 9 Rekenen met variabelen STATEMENTS...11 If/else statements...11 Switch statement LOOPS...15 While...15 For ARRAYS...17 Het aanmaken van een array...17 ENKELVOUDIGE ARRAYS...17 Uitlezen van waarden uit een array...18 Foreach loop...18 Het toevoegen van waarden aan een array...20 Associatieve arrays...20 MULTIDIMENSIONALE ARRAYS...21 Aanmaken...21 Uitlezen...22 Toevoegen FUNCTIES...25 Zelf functies schrijven...25 Functies zonder parameters...25 Functies met parameters...26 Meer functies Een controle functie...27 Optionele parameters: BTW? FORMULIEREN...30 DE HTML CODE...30 VERWERKING VAN HET FORMULIER: DE CODE...30 VERWERKING VAN HET FORMULIER: DE UITLEG Controleren of een formulier gepost is Controleren of de vereiste velden ingevuld zijn Eventuele andere controles op de velden uitvoeren Geen errors? Gegevens verwerken Wel errors? Fouten weergeven en terug naar formulier...33 UITBREIDEN VAN HET FORMULIER...34

4 4 PHP Beginnershandleiding VERWERKING VAN HET UITGEBREIDE FORMULIER SUPERGLOBALS...38 $_GET $_POST $_FILES $_SERVER $_SESSION $_COOKIE Cookies aanmaken Uitlezen van de cookie...42 $_REQUEST SESSIES NADER BEKEKEN: EEN EERSTE LOGINSCRIPT...43 DE HTML CODE HET PHP SCRIPT DE BEVEILIGDE PAGINA NETJES SCRIPTEN...47 INSPRINGEN COMMENTAAR DEBUGGEN: HET OPLOSSEN VAN PHP FOUTEN...50 Regels toegevoegd maar geen fouten te zien?...50 DEBUGGEN Parse error...51 Undefined variable...51 Undefined index...52 Parse errors: unexpected $end...53 Header already sent...53 Ik krijg niets te zien?...54

5 1. Inleiding 5 1. Inleiding Welkom bij deze PHP beginners handleiding waarin ik de basis van het programmeren in PHP zal uitleggen. Met deze handleiding zal ik proberen om je, aan de hand van vele voorbeelden, een degelijke basiskennis van het gebruik van PHP te geven. Met deze basiskennis kun je daarna zelf aan de slag en je storten op het programmeren van mooie applicaties en websites. Wat is PHP? PHP is een programmeertaal die voornamelijk gebruikt wordt voor het bouwen van dynamische websites. De eerste versie van deze scripttaal verscheen in 1995 en de afkorting stond toen voor 'Personal Home Page tool'. Tegenwoordig wordt deze afkorting eigenlijk niet meer gebruikt en zien we enkel nog de omschrijving 'PHP: Hypertext Preprocessor' als we zouden zoeken naar de betekenis van PHP. Deze omschrijving is dan ook een stuk toepasselijker aangezien PHP in veel meer toepassingen gebruikt wordt dan enkel persoonlijke webpagina s. De term 'hypertext preprocessor' geeft aan waar PHP in de meeste gevallen voor gebruikt wordt: het verwerken van gegevens tot hypertext (HTML). PHP is een server side scripttaal en wordt door de webserver uitgevoerd, in tegenstelling tot bijvoorbeeld HTML, CSS en Javascript, talen die door de browser geïnterpreteerd of uitgevoerd worden. Dit betekent dus ook dat PHP uitgevoerd wordt voordat er iets door de browser gedaan wordt, hetgeen ons in staat stelt om dynamisch HTML te genereren en naar de browser te sturen. Voorkennis Bij het lezen van deze handleiding is het makkelijke als je enige kennis van het bouwen van websites en het gebruik van HTML hebt. Zoals je merkt zijn er nu al wat termen gevallen, die je wellicht bekend voorkomen. Om deze handleiding te kunnen volgen is het bezit van deze kennis echter niet noodzakelijk. Wat heb ik nodig? Zoals gezegd is PHP een server side scripttaal. Je moet dus beschikking hebben over een webserver met PHP ondersteuning. Veel gratis webhosts ondersteunen geen PHP en ook op de webruimte die je van je provider krijgt, is PHP vaak niet beschikbaar. Ikzelf raad aan om een webserver op je eigen PC te installeren en deze server te gebruiken om je PHP scripts te testen. Een compleet pakket voor Windows met daarin een webserver, PHP en een database server is WAMP 1. Dit pakket is zeer eenvoudig te installeren en bevat alles wat je in deze handleiding nodig zult hebben. Alternatieven voor Mac OS X en Linux zijn respectievelijk MAMP en XAMPP. Tenslotte heb je een goede editor nodig. Omdat het schrijven van PHP nogal nauw luistert en er dus eenvoudig foutjes in je scripts kunnen sluipen, is het gebruik van een goede editor noodzakelijk om deze foutjes snel op te kunnen sporen. Een voorbeeld van een goede gratis editor is Eclipse PDT 2. Zo, nu weten we een klein beetje wat PHP is en doet. Laten we snel beginnen met het eigenlijke werk... 1 Windows Apache MySQL PHP, download: 2 Download:

6 6 PHP Beginnershandleiding 2. Mijn eerste PHP script Zoals we in de inleiding hebben kunnen lezen, is PHP een server side scripttaal. Dit houdt in dat de PHP code door de server verwerkt (geparsed) moet worden waarna een eventuele uitkomst naar de browser gestuurd wordt. Standaard is de webserver zo ingesteld dat bestanden, die eindigen op de extensie.php, door de server als PHP script geparsed worden. Zo'n.php bestand hoeft niet alleen PHP code te bevatten, er kan net zo goed HTML, CSS en Javascript in voorkomen. We zullen de server dus duidelijk moeten maken welke delen PHP code bevatten en welke delen dus door de server verwerkt moeten worden. Dit kunnen we aangeven met behulp van de php tags: 2. 3.?> Alle code die we tussen deze twee tags plaatsen, wordt door de server geparsed en tussen deze twee tags is het dus mogelijk om op een of andere manier HTML te genereren. Het grote voordeel hiervan is dat we een mogelijkheid krijgen om op een dynamische manier HTML code uit te spugen. Dat de code geparsed wordt door de server en deze alleen HTML uitspuugt, is tevens de reden dat je nooit PHP code in de bron van een pagina tegen zult komen. Deze is immers allemaal door de server omgezet. Ons eerste PHP bestand Laten we eens kijken naar een voorbeeld van een PHP bestand: 1. <html> 2. <head> 3. <title>mijn eerste php script!</title> 4. </head> <body> 7. <?php 8. echo 'Hello World!'; 9.?> 10. </body> </html> Bovenstaande code is een voorbeeld van hoe een webpagina opgebouwd wordt. Zoals je wellicht al wist bestaat een HTML pagina altijd uit <html>, <head> en <body> tags. In de <body> tag hebben we nu een stukje PHP, dat de tekst 'Hello World!' op het scherm zet, staan. Kopieer de code naar een leeg document in je editor en sla het op als bijvoorbeeld index.php. Open de pagina vervolgens in je webbrowser en je zult het volgende resultaat zien: Hello World! In het voorbeeld zien we dat we 'echo' in PHP kunnen gebruiken om HTML naar de browser te sturen. Alles wat we tussen de <body> tags in de HTML code echoën, zal dan ook op het scherm weergegeven worden. De gebruikte HTML code in de pagina zorgt ervoor dat de browser begrijpt wat hij weer moet geven. Het volgende voorbeeld waarin enkel HTML gebruikt wordt, zal precies dezelfde output geven:

7 2. Mijn eerste PHP script 7 1. <html> 2. <head> 3. <title>mijn eerste php script!</title> 4. </head> <body> 7. Hello World! 8. </body> 9. </html> Misschien zul je je nu afvragen wat nou het nut van PHP is, maar dat zal later in deze handleiding blijken. Even geduld nog. Dit waren de eerste maar tevens ook de laatste voorbeelden waarin ik zoveel HTML code zal gebruiken. Om de voorbeelden duidelijk en overzichtelijk te houden, zal ik vanaf nu enkel de PHP code gebruiken. Vergeet echter niet dat in de uiteindelijke webpagina de HTML wel aanwezig moet zijn! Alternatieve open en sluittags In plaats van de uitgebreide <?php en?> tags, zouden we ook <? en?> kunnen gebruiken. Het gebruik van deze zogenaamde 'shorttags' is echter niet aan te raden omdat deze instelling lang niet op alle servers aan staat en deze servers PHP code tussen shorttags niet als dusdanig herkennen. Wij gebruiken daarom netjes de volledige open en sluittags. Echo In het eerste voorbeeld hebben we gebruik gemaakt van een echo om tekst op het scherm te zetten. We zien dat de echo gevolgd wordt door een stukje tekst tussen twee enkele quotes (') en dat de regel afgesloten wordt met een punt komma (;). Dit is de standaard manier waarop een regel in PHP afgesloten wordt.

8 8 PHP Beginnershandleiding 3. Variabelen Variabelen kunnen we gebruiken om tijdelijk gegevens in op te slaan. Deze gegevens kunnen bijvoorbeeld bestaan uit getallen (integers) of stukken tekst (strings), maar kunnen bijvoorbeeld ook waar/niet waar gegevens (booleans) of een reeks gegevens (array) bevatten. Eigenlijk alles wat we in PHP kunnen aanmaken, kunnen we in een variabele zetten. Aanmaken van variabelen Het aanmaken van een variabele, ook wel declareren genaamd, doe je door een dollarteken ($) gevolgd door een zelf gekozen naam te tikken. Met het is gelijk aan (=) teken kunnen we vervolgens een waarde aan de variabele toekennen. Tenslotte sluiten we de regel weer af met een punt komma zoals dat bij elke PHP regel hoort. 2. $tekst = 'Hello World!'; 3. echo $tekst; 4.?> In dit stukje code declareren we de variabele $tekst en kennen er de waarde 'Hello World!' aan toe. Vervolgens gebruiken we een echo om de inhoud van $tekst op het scherm te zetten. De output is als volgt: Hello World! Verschillende typen variabelen Zoals ik al eerder vermelde, kunnen we werkelijk alles binnen PHP opslaan in een variabele. Afhankelijk van de inhoud hoort een variabele tot een bepaald type. Enkele voorbeelden: 2. $tekst = 'Hello World!'; // String 3. $leeftijd = 20; // Integer 4. $prijs = ; // Float 5. $check = true; // Boolean 6.?> Dit zijn enkele voorbeelden van verschillende typen variabelen. De eerste variabele $tekst hebben we al eerder gezien en bevat een string. Als je getallen in een variabele opslaat, zijn het integers als het gehele getallen betreft en floats als je het over decimale getallen hebt. Een variabele die aangeeft of iets waar of niet waar is, noem je een boolean. Een type variabele die nog niet in dit voorbeeld staat, is de array. Over deze variabele komen we later in deze handleiding nog te spreken. Zoals we zien wordt een string in PHP altijd tussen enkele quotes geplaatst. Bij een integer, float of boolean gebruiken we geen quotes. Commentaar Iets anders dat we in bovenstaand voorbeeld zien zijn de stukjes die vooraf gegaan worden door een dubbele slash (//). Dit is de manier waarop we commentaar bij de code kunnen zetten. Er zijn drie mogelijke manieren:

9 3. Variabelen 9 2. // Dit is een enkele regel commentaar # Ook dit is een enkele regel commentaar /* Dit is een commentaar blok 7. dat over meerdere regels verdeeld 8. kan zijn. */ 9.?> Het aanbrengen van commentaar in je code heeft een aantal doelen. Allereerst gebruik je het zodat anderen, die je code lezen, begrijpen wat bepaalde delen uit je code doen. Daarnaast is het ook voor jezelf handig als je na een paar maanden je code weer wilt aanpassen en je niet precies meer weet wat je nu gedaan had. Het commentaar kan dan een hoop verduidelijken. Tenslotte kun je commentaar gebruiken om tijdens het debuggen van je script een bepaald deel van de code niet uit te voeren. Commentaar wordt namelijk niet geparsed door de webserver. Naamgeving Naamgeving van variabelen is belangrijk. Probeer altijd een naam te kiezen die iets over de inhoud van een variabele zegt. Een variabele als $tekst zegt natuurlijk weinig over de inhoud, dus je hebt geen idee wat erin staat. Geldige variabele namen beginnen met een letter (a z) of underscore (_) en bevatten verder enkel letters, cijfers of underscores. Een goede manier van naamgeven is bijvoorbeeld $swelkomsttekst. Hierin geeft de eerste 's' aan dat het een string betreft en de rest van de naam geeft informatie over de inhoud. 2. $swelkomsttekst = 'Hello World!'; // String 3. $ileeftijd = 20; // Integer 4. $fprijs = ; // Float 5. $bcheck = true; // Boolean 6.?> Dit is de manier die ik in de rest van de handleiding zal hanteren. Variabelen buiten quotes Bovenstaand voorbeeld laat zien hoe we een enkele variabele kunnen echoën. Maar het zal vaak genoeg voorkomen dat je een variabele in een deel van een string wilt echoën of dat je meerdere variabelen achter elkaar wilt echoën. Nu weten we dat strings altijd tussen enkele quotes moeten staan, maar als we de variabele ook tussen de quotes zetten, gaat het niet helemaal goed. Een variabele tussen enkele quotes wordt namelijk niet geparsed, de naam van de variabele wordt in dat geval weergegeven. Dat is de reden dat we variabelen altijd 'buiten quotes halen'. 2. $swelkomsttekst = 'Hello World!'; echo 'Dit is de welkomsttekst: $swelkomsttekst <br />'; // FOUT 5. echo 'Dit is de welkomsttekst: '.$swelkomsttekst.' <br />'; // GOED 6.?> Dit is de welkomsttekst: $swelkomsttekst Dit is de welkomsttekst: Hello World! Het blijkt dat de eerste echo niet helemaal goed gegaan is. In plaats van de inhoud van de variabele wordt nu de naam weergegeven. De oplossing wordt zoals gezegd ook wel het 'variabele buiten

10 10 PHP Beginnershandleiding quotes halen' genoemd. Dit doen we door de string tijdelijk af te sluiten met een enkele quote. Vervolgens kunnen we de variabele er aan vast plakken met het concatenatieteken (.) om daarna wederom een concatenatieteken te gebruiken en verder te gaan met de string die we echoën. Ditzelfde principe kun je gebruiken om meerdere variabelen achter elkaar weer te geven: 2. $svoornaam = 'Joren'; 3. $sachternaam = 'de Wit'; 4. $x = 1; 5. $y = 2; 6. $z = 3; $snaam = $svoornaam.' '.$sachternaam; 9. echo $snaam.'<br />'; 10. echo $x.$y.$z; 11.?> Joren de Wit 123 Eerst hebben we $svoornaam en $sachternaam met een spatie ertussen samengevoegd tot $snaam. Daarna hebben we de verschillende variabelen $x, $y en $z geëchoed. Rekenen met variabelen We hebben al gezien dat we variabelen kunnen echoën, maar dat is niet het enige. Het rekenen met variabelen in PHP is iets dat we veelvuldig zullen gebruiken. Enkele voorbeelden: 2. $iaantal = 10; 3. $fprijs = 9.95; $fsubtotaal = $iaantal * $fprijs; 6. echo 'Subtotaal: '.$fsubtotaal.'<br />'; $fbtw = $fsubtotaal * 0.19; 9. $ftotaal = $fsubtotaal + $fbtw; 10. echo 'Totaal: '.$ftotaal; 11.?> Subtotaal: 99.5 Totaal: Andere operators die je kunt gebruiken om berekeningen uit te voeren zijn de voor het aftrekken van twee waarden en de / om twee waarden op elkaar te delen. Een volledig overzicht met alle rekenkundige operators vind je op php.net 1. 1 Zie onder arithmic operators

11 4. Statements Statements Nu we een beetje weten hoe we met variabelen in PHP kunnen werken, is het tijd om iets verder te kijken. Alles dat we tot nu toe gezien hebben, zouden we in principe ook nog met simpele HTML code kunnen bereiken. Laten we nu eens wat dieper ingaan op een van de dynamische aspecten van PHP. If/else statements Statement is het Engels voor 'voorwaarde' en wordt zeer veel in PHP scripts gebruikt. Met PHP is het mogelijk om verschillende acties uit te voeren afhankelijk van de uitkomst van een bepaalde voorwaarde. De meest simpele voorwaarde die we kunnen stellen is de vergelijking van twee waarden. Zo zou je PHP bijvoorbeeld kunnen laten bepalen of een variabele groter of kleiner is dan 5 en afhankelijk daarvan een reactie geven. De makkelijkste constructie waarin we zo'n statement op kunnen nemen is een if/else constructie. De syntax ziet er als volgt uit: 2. if( statement ) 3. { 4. // Doe iets 5. } 6. else 7. { 8. // Doe iets anders 9. } 10.?> De constructie begint met een if en vervolgens de voorwaarde tussen haakjes erachter. Tussen accolades {} volgt vervolgens het gedeelte dat uitgevoerd wordt als aan de vooraarde voldaan wordt. De else, die overigens niet verplicht is, bevat een alternatieve actie die uitgevoerd wordt als niet aan de voorwaarde voldaan wordt. 2. $x = 4; 3. if($x > 5) 4. { 5. echo $x.' is groter dan 5'; 6. } 7. else 8. { 9. echo $x.' is niet groter dan 5'; 10. } 11.?> 4 is niet groter dan 5 Allereerst kennen we de waarde 4 aan de variabele $x toe. Vervolgens controleren we in het ifstatement of de variabele $x groter is dan 5 en voeren afhankelijk van die uitkomst een actie uit. In dit geval is dat een echo die de betreffende situatie omschrijft. De if/else constructie uit het vorige voorbeeld kunnen we nog iets verder uitbreiden:

12 12 PHP Beginnershandleiding 2. $x = 5; if($x > 5) 5. { 6. echo $x.' is groter dan 5'; 7. } 8. elseif($x == 5) 9. { 10. echo $x.' is precies 5'; 11. } 12. else 13. { 14. echo $x.' is niet groter dan 5'; 15. } 16.?> 5 is precies 5 Op deze manier kunnen we een if/elseif/else constructie in theorie oneindig ver uitbreiden. Er zit namelijk geen beperking op het aantal elseif statements. Ook is het mogelijk om meerdere vergelijkingen in 1 statement op te nemen. Zo zouden we bijvoorbeeld kunnen controleren of $x groter is dan 5 en $y kleiner is dan 10: 2. $x = 6; 3. $y = 8; if($x > 5 && $y < 10) 6. { 7. echo '$x is groter dan 5 en $y is kleiner dan 10'; 8. } 9.?> $x is groter dan 5 en $y is kleiner dan 10 Met behulp van de && (AND) operator kunnen we dus controleren of aan beide vergelijkingen voldaan wordt. De tegenhanger hiervan is de (OR) operator waarmee je controleert of aan minimaal 1 van de vergelijkingen voldaan wordt. In voorgaande voorbeelden hebben we enkel gekeken of een bepaalde vergelijking waar is. We kunnen ook het omgekeerde doen en kijken of een bepaalde vergelijking niet waar is:

13 4. Statements $x = 4; 3. if(!($x > 5)) 4. { 5. echo $x.' is niet groter dan 5'; 6. } 7. else 8. { 9. echo $x.' is groter dan 5'; 10. } 11.?> 4 is niet groter dan 5 Nu zien we dat het if statement een waarheid oplevert en dus uitgevoerd wordt. Het! in het ifstatement betekent dus eigenlijk: 'Als de volgende vergelijking niet waar is...'. Overigens zul je dit voorbeeldje niet vaak gebruiken om te controleren of iets niet groter is dan 5. Je zult dan meestal namelijk controleren of iets kleiner dan of gelijk aan 5 is: 2. if($x <= 5) 3. { 4. echo $x.' is niet groter dan 5'; 5. } 6.?> Een overzicht met alle soorten operators is te vinden op php.net 1. Switch statement Als je een hele lange lijst met elseif statements krijgt, zou je die kunnen vervangen door een alternatieve constructie. Met een zogenaamd switch statement kun je een hele reeks voorwaarden loslaten op een bepaalde variabele. Dat ziet er bijvoorbeeld zo uit: 2. $x = 1; switch($x) 5. { 6. case 0 : 7. echo '$x is gelijk aan 0'; 8. break; 9. case 1 : 10. echo '$x is gelijk aan 1'; 11. break; 12. case 2 : 13. echo '$x is gelijk aan 2'; 14. break; 15. default : 16. echo '$x voldoet niet aan een van de genoemde voorwaarden'; 17. } 18.?> $x is gelijk aan 1 Met een switch statement kun je dus controleren welke waarde een variabele heeft. Je kunt net zoveel cases aanmaken als je wilt. Hierin controleer je of de variabele aan een bepaalde waarde voldoet. Achter de dubbele punt zet je vervolgens de code die je uit wilt voeren als de variabele aan 1 Zie onder comparison operators

14 14 PHP Beginnershandleiding de waarde in de case voldoet. Tenslotte sluit je de case af met een break. Gebruikelijk is het om ook een default actie mee te geven aan het switch statement, welke uitgevoerd wordt als de variabele aan geen van de cases voldoet. Ingewikkeldere statements zijn echter ook mogelijk in een switch: 2. $x = 10; switch($x) 5. { 6. case $x > 10 : 7. echo '$x is groter dan 10'; 8. break; 9. case $x == 10 : 10. echo '$x is gelijk aan 10'; 11. break; 12. case $x < 10 : 13. echo '$x is kleiner dan 10'; 14. break; 15. default : 16. echo '$x voldoet niet aan een van de genoemde voorwaarden'; 17. } 18.?> $x is gelijk aan 10 Op deze manier kunnen we een switch statement zo ingewikkeld maken als we maar willen. De keuze voor het gebruik van een switch statement hangt in de meeste gevallen af van de lengte van de if/else constructie en de hoeveelheid code die per statement uitgevoerd wordt. Bij veel statements en weinig code per statement, is een switch makkelijk. Maar naarmate de hoeveelheid code toeneemt, is het waarschijnlijk weer overzichtelijker om toch met een if/else constructie te werken. Tenslotte ben je met een if/else constructie een stuk flexibeler.

15 5. Loops Loops Een andere constructie waarbij het dynamische aspect van PHP naar voren komt, is de loop. Dit is een constructie waarbij een bepaald stuk code herhaaldelijk uitgevoerd wordt tot aan een bepaald statement wordt voldaan. Er zijn verschillende soorten loops die we kunnen gebruiken. Ik zal de twee die het meest gebruikt worden, de while loop en de for loop, hier bespreken. While De syntax van de while loop ziet er als volgt uit: 2. while( statement ) 3. { 4. // Doe iets 5. } 6.?> Zolang aan statement voldaan wordt, zal de code in de loop, die wederom tussen accolades {} staat, telkens opnieuw uitgevoerd worden. Vaak wordt een while loop in combinatie met een tellertje gebruikt, bijvoorbeeld om de getallen 1 10 weer te geven: 2. $i = 1; 3. while($i <= 10) 4. { 5. echo $i.' '; 6. $i++; 7. } 8.?> De vertaling van dit stukje code is als volgt: 'Zolang $i kleiner dan of gelijk aan 10 is, echo $i en verhoog de waarde van $i met 1'. De uitdrukking $i++ zorgt er dus voor dat de waarde van $i met 1 opgehoogd wordt. Merk op de variabele $i al aangemaakt moet zijn voordat de while loop begint, anders zal PHP het niet slikken. Later in deze handleiding zullen we uitgebreidere constructies met while loops zien. For Een tweede soort loop is de for loop. Hoewel deze eigenlijk precies hetzelfde doet, is de syntax iets anders: 2. for( beginconditie ; statement ; increment ) 3. { 4. // Doe iets 5. } 6.?> In de beginconditie stel je de beginwaarden voor de loop in. Dit zou bijvoorbeeld het declareren van de variabele $i kunnen zijn, zoals we dat ook voor de while loop deden. Het statement is hetzelfde als bij de while loop en het increment gedeelte bepaalt wat er na elke loop met de variabelen uit de beginconditie gebeurt. Ook nu is het weer mogelijk om de getallen 1 10 te genereren:

16 16 PHP Beginnershandleiding 2. for($i = 1; $i <= 10; $i++) 3. { 4. echo $i.' '; 5. } 6.?> Deze constructie zou dezelfde vertaling hebben als het voorbeeld hiervoor, alleen zitten de verschillende onderdelen op een andere plaats. Zo vormt $i = 1 de beginconditie, is het statement hetzelfde als in de while loop en vormt $i++ het increment gedeelte.

17 6. Arrays Arrays Een type variabele dat we nog niet behandeld hebben zijn de arrays. Een array is een datastructuur waarin een reeks gegevens opgeslagen is. Je kunt het zien als een variabele die meerdere waarden bevat. Een array bestaat uit één of meerdere rijen (entries) die allemaal een eigen sleutel, een indentificatie middel, en een waarde hebben. Als je bij het declareren van een array geen sleutel meegeeft aan de waarden, genereert PHP er zelf een. De eerste sleutel is dan 0, de tweede 1, enzovoort. Het aanmaken van een array Het declareren van een array gaat bijna hetzelfde als het declareren van een variabele. Alleen geven we nu de variabele niet een normale waarde zoals een string of integer, maar kennen we een array als waarde toe. 2. $afruit = array('appel', 'peer', 'banaan', 'kiwi'); 3.?> De array $afruit (denk weer even aan de naamgeving van variabelen) bevat nu verschillende items. Om te zien hoe deze array eruit ziet, kunnen we de volgende code gebruiken: 2. $afruit = array('appel', 'peer', 'banaan', 'kiwi'); 3. echo '<pre>'.print_r($afruit, true).'</pre>'; 4.?> Array ( [0] => appel [1] => peer [2] => banaan [3] => kiwi ) Die print_r() is een functie om de inhoud van een array weer te geven. Later in deze handleiding zullen we dat nog terugzien, voor nu gebruiken we het gewoon. We zien nu hoe de array $afruit opgebouwd is. Tussen de blokhaken [] staat de sleutel en achter de => de waarde. Omdat wij bij het declareren geen sleutels opgegeven hebben, heeft PHP die zelf aangemaakt. Merk op dat de eerste sleutel van de array 0 is en niet 1 zoals je misschien zou verwachten. Associatieve arrays Een associatieve array is een array waarbij de sleutels strings zijn. Dit in tegenstelling tot de numerieke array waarbij de sleutels integers zijn. Als we een associatieve array aan willen maken, kunnen we dat op de volgende manier doen:

18 18 PHP Beginnershandleiding 2. $afruitaantallen = array ( 3. 'appel' => 10, 4. 'peer' => 0, 5. 'banaan' => 4, 6. 'kiwi' => 12 ); echo '<pre>'.print_r($afruitaantallen, true).'</pre>'; 9.?> Array ( [appel] => 10 [peer] => 0 [banaan] => 4 [kiwi] => 12 ) De array $afruitaantallen heeft een iets andere indeling. De sleutels zijn nu de fruitsoorten en de bijbehorende waarden geven de aantal van iedere soort. Hoe we deze array op een nette manier kunnen uitlezen, zal ik zodadelijk laten zien. Uitlezen van waarden uit een array Om een enkele waarde uit een array uit te lezen, nemen we de variabelenaam van de array en plaatsen we de gewenste sleutel in blokhaken erachter: 2. $afruit = array('appel', 'peer', 'banaan', 'kiwi'); 3. echo 'Een '.$afruit[0].' is lekker, een '.$afruit[3].' wat minder.'; 4.?> Een appel is lekker, een kiwi wat minder. De associatieve array kunnen we op precies dezelfde manier uitlezen: 2. $afruitaantallen = array ( 3. 'appel' => 10, 4. 'peer' => 0, 5. 'banaan' => 4, 6. 'kiwi' => 12 ); echo 'Ik heb '.$afruitaantallen['appel'].' appels en '.$afruitaantallen['banaan'].' bananen.'; 9.?> Ik heb 10 appels en 4 bananen. In dit geval moeten we de sleutel wel tussen enkele quotes plaatsen aangezien we met een string te maken hebben. En zoals we weten moeten we strings altijd tussen enkele quotes plaatsen. Foreach loop Een andere manier van het uitlezen van een complete array, is het gebruik van een foreach loop. Met deze loop lopen we door alle entries in een array en kunnen we ze weergeven. De syntax van een foreach loop is als volgt:

19 6. Arrays foreach($aarray as $skey => $svalue) 3. { 4. // Doe iets met $skey en/of $svalue 5. } 6.?> In deze syntax is $aarray vanzelfsprekend de uit te lezen array. De variabele $skey is de sleutel van de huidige entry en $svalue de bijbehorende waarde. Het opvragen van $skey is overigens optioneel, als je dit gedeelte weglaat wordt alleen de waarde in $svalue geladen. Laten we de inhoud van de array $afruit eens op het scherm zetten: 2. $afruit = array('appel', 'peer', 'banaan', 'kiwi'); echo '<b>fruitsoorten:</b><br />'; 5. foreach($afruit as $sfruit) 6. { 7. echo $sfruit.'<br />'; 8. } 9.?> Fruitsoorten: appel peer banaan kiwi Je ziet dat ik hier de variabele $skey in de foreach loop niet gebruikt hebben. De sleutels van deze array zijn niet interessant, dus hoef ik ze ook niet weer te geven. Dat is echter anders bij onze associatieve array: 2. $afruitaantallen = array ( 3. 'appel' => 10, 4. 'peer' => 0, 5. 'banaan' => 4, 6. 'kiwi' => 12 ); echo '<b>fruit en aantallen:</b><br />'; 9. foreach($afruitaantallen as $sfruit => $iaantal) 10. { 11. echo $sfruit.': '.$iaantal.'<br />'; 12. } 13.?> Fruit en aantallen: appel: 10 peer: 0 banaan: 4 kiwi: 12 Met deze foreach loop hebben we de sleutel van elke entry geladen in de variabele $sfruit en het aantal in $iaantal (what's in the name). Vervolgens kunnen we deze gegevens met een eenvoudige echo op het scherm zetten.

20 20 PHP Beginnershandleiding Het toevoegen van waarden aan een array Nu we gezien hebben hoe we een array aan kunnen maken en de waarden kunnen uitlezen, kunnen we kijken naar het toevoegen van waarden aan een array. Hiervoor zijn een aantal verschillende manieren. De eerste manier is door het gebruik van blokhaken zonder inhoud achter de variabelenaam: 2. $afruit = array(); 3. $afruit[] = 'appel'; 4. $afruit[] = 'peer'; echo '<pre>'.print_r($afruit, true).'</pre>'; 7.?> Array ( [0] => appel [1] => peer ) We beginnen met het aanmaken van een lege array $afruit. Vervolgens voegen we daar op bovenstaande manier twee nieuwe waarden aan toe. Omdat we geen sleutel meegeven zal PHP zelf sleutels toekennen. Een andere manier is door het gebruik van de functie array_push(). Over functies komen we later nog te spreken, dus neem dit voorbeeld gewoon voor lief: 2. $afruit = array(); 3. $afruit[] = 'appel'; 4. $afruit[] = 'peer'; 5. array_push($afruit, 'banaan', 'kiwi'); echo '<pre>'.print_r($afruit, true).'</pre>'; 8.?> Array ( [0] => appel [1] => peer [2] => banaan [3] => kiwi ) Met deze functie is het dus mogelijk om meerdere variabelen in een keer aan de array toe te voegen. De keuze tussen deze twee methoden is dan ook puur afhankelijk van de situatie. De eerste methode krijgt echter de voorkeur bij associatieve arrays zoals we nu zullen zien. Associatieve arrays In het geval van een associatieve array, zullen wederom zelf onze sleutels moeten definiëren. Waarden toevoegen aan een associatieve array lukt dan ook alleen op de manier met blokhaken:

21 6. Arrays $afruitaantallen = array(); 3. $afruitaantallen['appel'] = 10; 4. $afruitaantallen['peer'] = 0; 5. $afruitaantallen['banaan'] = 4; 6. $afruitaantallen['kiwi'] = 12; echo '<pre>'.print_r($afruitaantallen, true).'</pre>'; 9.?> Array ( [appel] => 10 [peer] => 0 [banaan] => 4 [kiwi] => 12 ) Let ook hier wederom op de quotes die we rond de strings moeten plaatsen. Multidimensionale arrays Multidemensionale arrays zijn, zoals het woord al doet vermoeden, arrays met meerdere dimensies. Dat wil zeggen, het zijn arrays in arrays. Dit soort toepassingen van arrays kom je in vrij veel scripts tegen en is bovendien heel handig in het gebruik. Aanmaken Het declareren van een multidimensionale array gaat als volgt: 2. $avakantiebestemmingen = array ( 3. 'Wintersport' => array ( 4. 'Westendorf', 5. 'Gerlos', 6. 'Kitzbühl', 7. 'Mayerhofen' 8. ), 9. 'Zonvakantie' => array ( 10. 'Curacao', 11. 'Spanje', 12. 'Italië', 13. 'Brazilië' 14. ) 15. ); echo '<pre>'.print_r($avakantiebestemmingen, true).'</pre>'; 18.?>

22 22 PHP Beginnershandleiding Array ( [Wintersport] => Array ( [0] => Westendorf [1] => Gerlos [2] => Kitzbühl [3] => Mayerhofen ) [Zonvakantie] => Array ( [0] => Curacao [1] => Spanje [2] => Italië [3] => Brazilië ) ) Zoals je ziet gebruiken we hier een multidimensionale array om een onderscheid te maken tussen het soort vakanties. Natuurlijk hadden we ook twee aparte arrays voor de wintersport en zonvakanties kunnen gebruiken, maar het is niet nodig. Uitlezen Het uitlezen van de multidmensionale array gaat op precies dezelfde manier als elke andere array. Alleen zullen we nu twee sets blokhaken moeten gebruiken om de juiste entry te selecteren: 2. $avakantiebestemmingen = array ( 3. 'Wintersport' => array ( 4. 'Westendorf', 5. 'Gerlos', 6. 'Kitzbühl', 7. 'Mayerhofen' 8. ), 9. 'Zonvakantie' => array ( 10. 'Curacao', 11. 'Spanje', 12. 'Italië', 13. 'Brazilië' 14. ) 15. ); echo 'De wintersport in '.$avakantiebestemmingen['wintersport'][3].' was geweldig, maar ik ga volgend jaar toch liever naar '.$avakantiebestemmingen['zonvakantie'][1].'.'; 18.?> De wintersport in Mayerhofen was geweldig, maar ik ga volgend jaar toch liever naar Spanje. Mochten we de array met een foreach loop uit willen lezen, dan zullen we er ook daar twee van moeten gebruiken:

23 6. Arrays $avakantiebestemmingen = array ( 3. 'Wintersport' => array ( 4. 'Westendorf', 5. 'Gerlos', 6. 'Kitzbühl', 7. 'Mayerhofen' 8. ), 9. 'Zonvakantie' => array ( 10. 'Curacao', 11. 'Spanje', 12. 'Italië', 13. 'Brazilië' 14. ) 15. ); foreach($avakantiebestemmingen as $ssoort => $alocaties) 18. { 19. echo '<b>'.$ssoort.'</b><br />'; 20. foreach($alocaties as $slocatie) 21. { 22. echo $slocatie.'<br />'; 23. } 24. } 25.?> Wintersport Westendorf Gerlos Kitzbühl Mayerhofen Zonvakantie Curacao Spanje Italië Brazilië Het zal in het begin misschien even wennen zijn hoe je deze foreach loops toe moet passen maar als je er eenmaal achter bent, zul je de vele mogelijkheden ervan ontdekken. Toevoegen Tenslotte is er nog het toevoegen van nieuwe waarden aan een multidimensionale array. Ook dat kan op verschillende manieren:

24 24 PHP Beginnershandleiding 2. // Lege array aanmaken 3. $avakantiebestemmingen = array (); // Array toevoegen 6. $avakantiebestemmingen['wintersport'] = array ( 7. 'Westendorf', 8. 'Gerlos', 9. 'Kitzbühl', 10. 'Mayerhofen' 11. ); // Losse entries invoegen 14. $avakantiebestemmingen['zonvakantie'][] = 'Curacao'; 15. $avakantiebestemmingen['zonvakantie'][] = 'Spanje'; // Losse entries invoegen met array_push 18. array_push($avakantiebestemmingen['zonvakantie'], 'Italië', 'Brazilië'); echo '<pre>'.print_r($avakantiebestemmingen, true).'</pre>'; 21.?> 22. Array ( [Wintersport] => Array ( [0] => Westendorf [1] => Gerlos [2] => Kitzbühl [3] => Mayerhofen ) [Zonvakantie] => Array ( [0] => Curacao [1] => Spanje [2] => Italië [3] => Brazilië ) )

25 7. Functies Functies In het vorige hoofdstuk hebben we al gewerkt met een van de vele php functies, array_push(). Deze functies kunnen we gebruiken om variabelen te manipuleren, gegevens te controleren, arrays te bewerken en nog veel meer. Het doel van een functie is een bepaalde bewerking die je vaker in een PHP script gebruikt te vereenvoudigen. Naarmate we verder komen in deze handleiding, zullen we steeds meer php functies gaan gebruiken. In dit hoofdstuk gaan we het echter hebben over het zelf schrijven van functies. Zelf functies schrijven Naast de vele functies die PHP rijk is, is het ook mogelijk om zelf functies te schrijven en te gebruiken. Een functie is dus een stukje script dat we aan kunnen roepen, eventueel parameters aan mee kunnen geven en dat vervolgens een bewerking uitvoert. Uiteindelijk zou het kunnen zijn dat een functie nog een waarde teruggeeft, maar dat hoeft niet. De syntax van elke functie ziet er als volgt uit: 2. function functienaam ( parameters ) 3. { 4. // Body 5. } 6.?> Met function geven we aan dat we een eigen functie definiëren. Dan volgt de naam van de functie en tussen haakjes de eventuele parameters die we aan deze functie mee kunnen geven. Tussen de accolades volgen dan de bewerkingen die deze functie aan de hand van de eventuele parameters uit gaat voeren. Functies zonder parameters Zoals gezegd kan een functie waarden teruggeven. Allereerst kan dat door simpel gegevens binnen de functie te echoën, maar een functie kan ook waarden returnen. Hoe dat in zijn werk gaat zullen we zo zien. We kijken eerst naar een functie die wat tekst op het scherm zet: 2. // Functie definiëren 3. function geefweer() 4. { 5. echo 'Hello World!'; 6. } // Functie aanroepen 9. geefweer(); 10.?> Hello World! We hebben nu de functie geefweer() gedefinieerd. Door de functie nu aan te roepen op de manier in bovenstaand voorbeeld, wordt de functie uitgevoerd. Dat resulteert in een echo van 'Hello World!'. Zoals gezegd kan een functie ook waarden teruggeven:

26 26 PHP Beginnershandleiding 2. // Functie definiëren 3. function geefterug() 4. { 5. return 'Hello World!'; 6. } // Functie aanroepen 9. echo geefterug(); 10.?> Hello World! In de functie geefterug() zien we dat de echo vervangen is door een return. Dit zorgt ervoor dat de string 'Hello World!' terug gegeven wordt door de functie. Het lijkt nu net alsof we de functie zelf echoën, maar in werkelijkheid echoën we het resultaat van de functie. Uiteraard zou je de terug gegeven waarde ook in een variabele kunnen opslaan: 2. $stekst = geefterug(); 3.?> Als je nu vervolgens $stekst zou echoën, zou je hetzelfde resultaat krijgen. Functies met parameters PHP functies kunnen ook parameters accepteren. Deze zijn dan beschikbaar voor gebruik in de functie zelf: 2. // Functie definiëren 3. function geefweer($sstring) 4. { 5. echo $sstring.'<br />'; 6. } // Functie aanroepen 9. $stekst = 'Hello World!'; 10. geefweer($stekst); 11. geefweer('een tweede tekst'); 12.?> Hello World! Een tweede tekst Onze geefweer() functie accepteert nu een parameter $sstring. Als we bij het aanroepen van een functie nu ook een parameter opgeven, zal die parameter gebruikt worden in de bewerking. In het geval van bovenstaande functie zal de opgegeven tekst op het scherm weergegeven worden. Meer functies... Stel dat we bijvoorbeeld regelmatig willen weten hoeveel items een array bevat. Dan zouden we daar zelf een functie voor kunnen schrijven.

27 7. Functies // Functie definiëren 3. function tel($aarray) 4. { 5. // Aantal start op 0 6. $iaantal = 0; // Array doorlopen en telkens 1 bij $iaantal optellen 9. foreach($aarray as $svalue) 10. { 11. // Tel 1 bij $iaantal op 12. $iaantal++; 13. } // Gevonden aantal teruggeven 16. return $iaantal; 17. } // Functie aanroepen 20. $atestarray = array(1, 2, 3, 4); 21. echo '$atestarray bevat '.tel($atestarray).' items.'; 22.?> $atestarray bevat 4 items. Aan onze tel() functie geven we een array als parameter mee. Vervolgens doorlopen we alle items van de array waarbij we een teller $iaantal bijhouden. Tenslotte retourneren we $iaantal en echoën we het gevonden aantal. De oplettende lezer, die al wat meer PHP kennis heeft, zal direct zeggen: 'He, maar daar is toch al een PHP functie voor?'. Dat klopt! De functie count() 1 doet precies hetzelfde, maar het gaat hier om het voorbeeld. Een controle functie... Functies zijn bij uitstek geschikt om te gebruiken voor de controle van variabelen. Stel dat we van een gebruikersnaam willen weten of deze wel langer dan 3 tekens is en niet begint met een A dan zouden we het volgende kunnen doen: 2. if(strlen($sgebruikersnaam) > 3 && substr($sgebruikersnaam, 0, 1)!= 'A') 3. { 4. echo 'Gebruikersnaam is goed'; 5. } 6. else 7. { 8. echo 'Gebruikersnaam ongeldig!'; 9. } 10.?> De functie strlen() gebruiken we om de lengte van een string te bepalen en met substr() kunnen we een bepaald gedeelte van een string selecteren. Maar als we deze controle vaker in ons script willen uitvoeren, is het wellicht makkelijker om daar een functie voor te schrijven: 1 Zie

28 28 PHP Beginnershandleiding 2. // Functie definiëren 3. function checkgebruikersnaam($sgebruikersnaam) 4. { 5. if(strlen($sgebruikersnaam) > 3 && substr($sgebruikersnaam, 0, 1)!= 'A') 6. { 7. return true; 8. } 9. else 10. { 11. return false; 12. } 13. } // Functie aanroepen 16. $sgebruiker = 'Joren'; 17. if(checkgebruikersnaam($sgebruiker)) 18. { 19. echo 'Deze gebruikersnaam is geldig!'; 20. } 21. else 22. { 23. echo 'Ongeldige gebruikersnaam'; 24. } 25.?> Deze gebruikersnaam is geldig! Nu hebben we de controle overgebracht naar onze functie checkgebruikersnaam(). Deze functie geeft een boolean terug afhankelijk van het slagen van de controle. Als de controle slaagt zal TRUE geretourneerd worden, anders FALSE. Dat de functie een boolean teruggeeft is mooi. We kunnen hem dan namelijk in een if statement opnemen zoals in bovenstaand voorbeeld. Als de controle slaagt, wordt ook aan de voorwaarde in het if statement voldaan en wordt de betreffende echo uitgevoerd. Optionele parameters We kunnen ook functies definiëren met optionele parameters. Dus parameters die niet per se ingevuld hoeven te worden. Stel dat we een functie willen schrijven die het totaalbedrag berekent aan de hand van een array met prijzen en die optie heeft om daar BTW bij op te tellen.

29 7. Functies // Functie definiëren 3. function calctotaal($abedragen, $bbtw = false) 4. { 5. // Totaal van prijzen berekenen 6. $ftotaal = array_sum($abedragen); // Controleren of BTW berekend moet worden 9. if($bbtw) 10. { 11. // Het totaal * 1.19 (19% BTW) 12. $ftotaal *= 1.19; 13. } // Geef het berekende totaal terug 16. return number_format($ftotaal, 2); 17. } // Functie aanroepen 20. $abedragen = array(5.45, 9.95, 34.95); 21. echo 'Totaal excl. BTW: '.calctotaal($abedragen).'<br />'; 22. echo 'Totaal incl. BTW: '.calctotaal($abedragen, true).'<br />'; 23.?> Totaal excl. BTW: Totaal incl. BTW: Zoals we in bovenstaande functie kunnen zien, definiëren we een optionele parameter door de parameter een standaardwaarde toe te kennen. Als deze parameter niet opgegeven is, krijgt hij de standaardwaarde toegewezen. Is hij wel opgegeven, dan behoudt hij zijn opgegeven waarde. Verder zien we in de calctotaal() functie het gebruik van de PHP functie array_sum(). Deze functie telt alle waarden in de array bij elkaar op en geeft het totaal terug. Daarnaast zien we nog het gebruik van de operator *=. Deze operator doet precies hetzelfde als: 2. $ftotaal = $ftotaal * 1.19; 3.?> Het is alleen een stuk korter. Want ja, programmeurs zijn lui dus waarom zouden we meer schrijven dan nodig is. Tenslotte gebruiken we nog de functie number_format() om de weergave van de bedragen een beetje op te maken. Aan een bedrag met 4 cijfers achter de komma hebben we natuurlijk niet zo veel.

30 30 PHP Beginnershandleiding 8. Formulieren Een van de eerste toepassingen van PHP die een beginnende programmeur gebruikt, is vaak de afhandeling van een formulier. Het is dan ook een toepassing waar PHP uitermate geschikt voor is! Ik zal beginnen met eerst een korte uitleg van de HTML code van een simpel formulier, om daarna snel verder te gaan met het PHP script dat de verwerking verzorgt. De HTML code Laten we eens kijken naar een simpel formulier waar een gebruiker om te beginnen zijn voor en achternaam kan invullen. Zonder opmaak (dat is nu niet belangrijk) ziet de HTML code van de pagina formulier.php er als volgt uit: Code: formulier.php 1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " 2. <html xmlns=" 3. <head> 4. <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 5. <title>mijn eerste formulier!</title> 6. </head> <body> 9. <form action="verwerk.php" method="post"> 10. <p> 11. <label for="voornaam">voornaam:</label> 12. <input type="text" name="voornaam" id="voornaam" /> 13. </p> 14. <p> 15. <label for="achternaam">achternaam:</label> 16. <input type="text" name="achternaam" id="achternaam" /> 17. </p> 18. <p> 19. <input type="submit" value="verzenden" /> 20. </p> 21. </form> 22. </body> 23. </html> Als je nog nooit een regel HTML gezien hebt, is een klein beetje uitleg waarschijnlijk wel gewenst. Ik zal me beperken tot het gedeelte tussen de <body> tags, aangezien dat het gedeelte is dat op het scherm weergegeven wordt. De <form> tag geeft zoals verwacht aan dat we een formulier tonen. Het action attribuut bevat de naam van de pagina waar het formulier zijn gegevens heen stuurt. Dit is dus de naam van de pagina die wij straks gaan maken. Het method attribuut heeft twee mogelijke waarden: get en post. In het geval van GET worden de ingevulde waarden meegezonden in de URL. Bij de POST methode worden de variabelen onzichtbaar naar de andere pagina verzonden. Vervolgens zien we twee <input> velden. Het type attribuut geeft het soort inputveld aan. We gebruiken nu twee text velden, maar later zullen we ook andere varianten zien. De name is de naam van het input veld en gebruiken we tijdens de verwerking om de inhoud van dat veld op te halen. Het id gebruik je voornamelijk met Javascript, maar het is een goede gewoonte om deze dezelfde waarde als de name te geven. Via de on line handleiding op phphulp.jorendewit.nl 1 is een werkend voorbeeld te vinden. Verwerking van het formulier: de code Genoeg over de HTML, laten we eens kijken hoe we het formulier controlen met PHP. Er zijn een aantal onderdelen die altijd aanwezig moeten zijn in de verwerking van een formulier. Op volgorde van verschijning in het script: 1 Directe url:

31 8. Formulieren Controleren of er een formulier gepost is 2. Controleren of de vereiste velden ingevuld zijn 3. Eventuele andere controles op de velden uitvoeren 4. Geen errors? Gegevens verwerken. 5. Wel errors? Fouten weergeven en terug naar formulier Ik zal beginnen met de complete code van de verwerking en deze vervolgens stap voor stap bespreken. Schrik niet als het er moeilijk uitziet of als je dingen tegenkomt die je niet kent, we gaan er zo uitgebreid naar kijken. Code: verwerk.php 2. include '../../inc/stats.php'; 3. // Controle of een formulier gepost is 4. if($_server['request_method'] == 'POST') 5. { 6. // Arrays declareren voor opslag van fouten en data 7. $aerrors = array(); 8. $adata = array(); // Velden die in het formulier aanwezig moeten zijn 11. $aformuliervelden = array('voornaam', 'achternaam'); // Alle formuliervelden doorlopen 14. foreach($aformuliervelden as $sveld) 15. { 16. // Controleren of er een waarde voor het formulierveld bestaat 17. if(isset($_post[$sveld])) 18. { 19. // Spaties aan begin en eind weghalen 20. $svalue = trim($_post[$sveld]); // Controle of variabele gevuld is 23. if(empty($svalue)) 24. { 25. // Foutmelding toevoegen 26. $aerrors[] = 'Je bent vergeten om '.$sveld.' in te vullen'; 27. } // Ingevulde waarden aan data array toevoegen 30. $adata[$sveld] = $svalue; 31. } 32. else 33. { 34. $aerrors[] = 'Het veld '.$sveld.' is niet gepost!'; 35. } 36. } // Controleren of er geen fouten opgetreden zijn 39. if(empty($aerrors)) 40. { 41. // Formulier succes! 42. echo '<p>je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>'; 43. echo '<p>voornaam: '.$adata['voornaam'].'<br />'; 44. echo 'Achternaam: '.$adata['achternaam'].'</p>'; 45. } 46. else 47. { 48. // Fouten opgetreden: weergeven en terug naar formulier 49. header('refresh: 3; url=formulier.php'); 50. foreach($aerrors as $serror) 51. { 52. echo '<p style="color:red">'.$serror.'</p>'; 53. } 54. } 55. } 56. else 57. { 58. // Verwerk.php mag nog niet bezocht worden, terug naar het formulier 59. header('location: formulier.php'); 60. } 61.?> Wat een lap onbegrijpbare code denk je wellicht, maar daar gaan we nu verandering in brengen!

32 32 PHP Beginnershandleiding Verwerking van het formulier: de uitleg Aan de hand van de verschillende onderdelen die in een verwerkingsscript aanwezig moeten zijn, zal ik dit formulier met je doorlopen. 1. Controleren of een formulier gepost is 2. // Controle of een formulier gepost is 3. if($_server['request_method'] == 'POST') 4.?> Bij het stukje over de HTML code vertelde ik over het method attribuut. Dat zien we hier nu terug. Aangezien in het formulier 'post' gebruikten, kunnen we hier op deze manier controleren of een formulier gepost is. De superglobal $_SERVER['REQUEST_METHOD'] heeft namelijk de waarde 'POST' als dat het geval is. Over superglobals komen we overigens later nog te spreken, voor nu laten we dat nog even voor wat het is. 2. Controleren of de vereiste velden ingevuld zijn In dit geval beschouwen we zowel de voornaam als achternaam als een vereist veld. We willen dus van allebei weten of er een waarde ingevuld is. De ingevulden waarden zijn te vinden in de array $_POST (weer zo'n superglobal). Allereerst zetten we de namen van alle velden die in ons formulier voorkomen in een array. Dit geeft ons de mogelijkheid om daadwerkelijk te controleren of alle velden wel ingevuld zijn: 2. // Velden die in het formulier aanwezig moeten zijn 3. $aformuliervelden = array('voornaam', 'achternaam'); 4.?> Vervolgens kunnen we deze array met een foreach loop doorlopen. Voor elk veld controleren we vervolgens of er een waarde in de $_POST array bestaat, dan weten we zeker dat de eventuele waarde van het veld in ieder geval gepost is. 2. // Alle formuliervelden doorlopen 3. foreach($aformuliervelden as $sveld) 4. { 5. // Controleren of er een waarde voor het formulierveld bestaat 6. if(isset($_post[$sveld])) 7. { 8. // Spaties aan begin en eind weghalen 9. $svalue = trim($_post[$sveld]); // Controle of variabele gevuld is 12. if(empty($svalue)) 13. { 14. // Foutmelding toevoegen 15. $aerrors[] = 'Je bent vergeten om '.$sveld.' in te vullen'; 16. } // Ingevulde waarden aan data array toevoegen 19. $adata[$sveld] = $svalue; 20. } 21. else 22. { 23. $aerrors[] = 'Het veld '.$sveld.' is niet gepost!'; 24. } 25. } 26.?> Als het veld niet bestaat voegen we een foutmelding toe aan de array $aerrors. Bestaat het veld wel, dan gaan we verder met de controle. Met de functie trim() verwijderen we loze spaties aan het begin

33 8. Formulieren 33 en eind van de de input om vervolgens met empty() te controleren of de waarde wel ingevuld is. Zo niet, dan voegen we weer een foutmelding toe aan de array $aerrors. Tenslotte voegen we de ingevulde waarde toe aan de array $adata. 2. // Ingevulde waarden aan data array toevoegen 3. $adata[$sveld] = $svalue; 4.?> Als sleutel geven we de naam van het veld op. Zo weten we tenminste uit welk veld die waarde kwam. Dit stukje code wordt dus toegepast op elk veld dat wij gedefinieerd hebben in de array $aformuliervelden. 3. Eventuele andere controles op de velden uitvoeren Wij hebben op dit moment geen andere controles, dus dit slaan we over. Hadden we wel overige controles, dan hadden we die in de foreach loop toegepast. Wees gerust, dit komt in een later voorbeeld nog wel Geen errors? Gegevens verwerken 2. if(empty($aerrors)) 3. { 4. // Formulier succes! 5. echo '<p>je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>'; 6. echo '<p>voornaam: '.$adata['voornaam'].'<br />'; 7. echo 'Achternaam: '.$adata['achternaam'].'</p>'; 8. } 9.?> Wederom gebruiken we empty(), maar nu om te controleren of de array met foutmeldingen nog steeds leeg is. Als dat namelijk het geval is, is de controle geslaagd. Als die array leeg is kunnen we dus verder met de verwerking van het formulier. Voor nu bestaat dat enkel uit het weergeven van de ingevulde gegevens. Herinner je dat we in stap 2 de gegevens in de array $adata hebben gezet. Daar kunnen we de gegevens nu dus ook vandaan halen. De manier van het echoën van strings en variabelen zal je nu wel bekend zijn. Natuurlijk zijn er veel meer toepassingen voor de verwerking van deze gegevens. Zo zou je ze bijvoorbeeld weg kunnen schrijven naar een database of kunnen versturen per e mail. Dit soort toepassingen liggen echter buiten het onderwerp van deze handleiding, dus die zal ik nu niet bespreken. 5. Wel errors? Fouten weergeven en terug naar formulier 2. // Fouten opgetreden: weergeven en terug naar formulier 3. header('refresh: 3; url=formulier.php'); 4. foreach($aerrors as $serror) 5. { 6. echo '<p style="color:red">'.$serror.'</p>'; 7. } 8.?> De foutmeldingen staan in de array $aerrors. Deze kunnen we dus uitlezen met een foreach loop en de foutmeldingen op het scherm weergeven. Omdat het foutmeldingen zijn, heb ik ze even een rood kleurtje gegeven. Dan zien we hier ook een functie die we nog niet eerder gezien hadden: header(). Deze functie gebruik je om een HTTP header naar de browser te versturen. Nu hoef je niet precies te begrijpen

34 34 PHP Beginnershandleiding wat dat is, als je alleen maar onthoudt dat je er onder andere een gebruiker mee naar een andere pagina kunt sturen. Hier gebruik ik een header('refresh:...'), welke ervoor zorgt dat de pagina na een bepaalde tijd herladen wordt op de gegeven url. Helemaal aan het eind van verwerk.php zien we ook een header('location:...'), deze stuurt de gebruiker direct door naar de opgegeven pagina. Na deze vorm van header() gebruiken we altijd een exit(), zodat de rest van het script niet meer uitgevoerd wordt. De reden dat de header() voor de foreach loop staat, is dat er voordat je deze functie aanroept, geen enkele output naar de browser plaatsgevonden mag hebben. Dus geen HTML, geen echo en zelfs geen loze spatie ergens buiten je PHP tags. De manier waarop we nu een formulier verwerkt hebben, is een goede basis. Er zijn uiteraard andere manieren, maar dit vind ik persoonlijk de meest veilige, flexibele en fijne manier om de verwerking van een formulier af te handelen. Uitbreiden van het formulier Nu we de basis van het verwerken van een forumlier gezien hebben, kunnen we het formulier wat uitbreiden. Laten we een mogelijkheid tot het invullen van een geboorte datum toevoegen. Het formulier komt er dan zo uit te zien:

35 8. Formulieren 35 Code: formulier2.php 1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " 2. <html xmlns=" 3. <head> 4. <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 5. <title>mijn eerste formulier!</title> 6. </head> <body> 9. <form action="verwerk2.php" method="post"> 10. <p> 11. <label for="voornaam">voornaam:</label> 12. <input type="text" name="voornaam" id="voornaam" /> 13. </p> 14. <p> 15. <label for="achternaam">achternaam:</label> 16. <input type="text" name="achternaam" id="achternaam" /> 17. </p> 18. <p> 19. <label>geboortedatum:</label> 20. <select name="dag"> for($i = 1; $i <= 31; $i++) 23. { 24. echo '<option value="'.$i.'">'.$i.'</option>'; 25. } 26.?> 27. </select> 28. <select name="maand"> 29. <?php 30. for($i = 1; $i <= 12; $i++) 31. { 32. echo '<option value="'.$i.'">'.$i.'</option>'; 33. } 34.?> 35. </select> 36. <select name="jaar"> 37. <?php 38. for($i = date('y'); $i >= 1950; $i--) 39. { 40. echo '<option value="'.$i.'">'.$i.'</option>'; 41. } 42.?> 43. </select> 44. </p> 45. <p> 46. <input type="submit" value="verzenden" /> 47. </p> 48. </form> 49. </body> 50. </html> We zien dat er wat extra velden bijgekomen zijn en dat er nu ook wat PHP code in het formulier verwerkt zit. Ik wil voor het invoeren van de geboortedatum namelijk drie <select> boxjes gebruiken voor repectievelijk de dag, de maand en het jaar. Nu zouden we natuurlijk alle opties handmatig in HTML kunnen gaan invoeren (31 dagen, 12 maanden, 58 jaren) maar dat zou natuurlijk niet echt slim zijn. We hebben immers de beschikking over PHP die zoiets heel eenvoudig voor ons kan genereren. Met een drietal for loopjes is dat probleem zo opgelost. De eerste twee loopjes spreken voor zich. In de derde for loop tellen we nu een keer af in plaats van op. We gaan nu dus vanaf het huidige jaar, dat we bepalen met behulp van de date() functie, aftellen tot aan het jaar Vandaar dat we ook $i gebruiken om de waarde van $i telkens met 1 te verlagen. Een werkend voorbeeld is wederom via phphulp.jorendewit.nl 1 te vinden. Verwerking van het uitgebreide formulier We hebben nu een nieuw element aan ons formulier toegevoegd, dus de verwerking van het formulier moeten we ook aanpassen. Deze komt er als volgt uit te zien: 1 Directe url:

36 36 PHP Beginnershandleiding Code: verwerk2.php 2. include '../../inc/stats.php'; 3. // Controle of een formulier gepost is 4. if($_server['request_method'] == 'POST') 5. { 6. // Arrays declareren voor opslag van fouten en data 7. $aerrors = array(); 8. $adata = array(); // Velden die in het formulier aanwezig moeten zijn 11. $aformuliervelden = array( 12. 'voornaam', 13. 'achternaam', 14. 'dag', 15. 'maand', 16. 'jaar' 17. ); // Waarden uit de $_POST array doorlopen 20. foreach($aformuliervelden as $sveld) 21. { 22. if(isset($_post[$sveld])) 23. { 24. // Spaties aan begin en eind weghalen 25. $svalue = trim($_post[$sveld]); // Controle of variabele gevuld is 28. if(empty($svalue)) 29. { 30. // Foutmelding toevoegen 31. $aerrors[] = 'Je bent vergeten om '.$sveld.' in te vullen'; 32. } // Ingevulde waarden aan data array toevoegen 35. $adata[$sveld] = $svalue; 36. } 37. else 38. { 39. $aerrors[] = 'Het veld '.$sveld.' is niet gepost!'; 40. } 41. } // Datum controle 44. if(isset($adata['maand'], $adata['dag'], $adata['jaar']) && checkdate($adata['maand'], $adata['dag'], $adata['jaar'])) 45. { 46. $sdatum = $adata['dag'].'-'.$adata['maand'].'-'.$adata['jaar']; 47. } 48. else 49. { 50. $aerrors[] = 'Dit is geen geldige datum'; 51. } // Controleren of er geen fouten opgetreden zijn 54. if(empty($aerrors)) 55. { 56. // Formulier succes! 57. echo '<p>je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>'; 58. echo '<p>voornaam: '.$adata['voornaam'].'<br />'; 59. echo 'Achternaam: '.$adata['achternaam'].'</p>'; 60. echo '<p>geboortedatum: '.$sdatum.'</p>'; 61. } 62. else 63. { 64. // Fouten opgetreden: weergeven en terug naar formulier 65. header('refresh: 3; url=formulier2.php'); 66. foreach($aerrors as $serror) 67. { 68. echo '<p style="color:red">'.$serror.'</p>'; 69. } 70. } 71. } 72. else 73. { 74. // Verwerk.php mag nog niet bezocht worden, terug naar het formulier 75. header('location: formulier2.php'); 76. } 77.?>

37 8. Formulieren 37 We zien dat de verwerking eigenlijk bijna hetzelfde is, op een paar kleine veranderingen na. Allereerst zijn de verwijzingen naar formulier.php natuurlijk veranderd in formulier2.php. Daarnaast heb ik nu een controle ingebouwd die controleert of de ingevulde datum wel geldig is. 2. if(isset($adata['maand'], $adata['dag'], $adata['jaar']) && checkdate($adata['maand'], $adata['dag'], $adata['jaar'])) 3. { 4. $sdatum = $adata['dag'].'-'.$adata['maand'].'-'.$adata['jaar']; 5. } 6. else 7. { 8. $aerrors[] = 'Dit is geen geldige datum'; 9. } 10.?> Allereerst controleren we met isset() of de benodigde variabelen wel voorkomen in de $adata array, en of ze dus wel in het formulier staan. De functie checkdate() wordt vervolgens gebruikt om de geldigheid van een ingevoerde datum te controleren. Deze functie accepteert 3 parameters, respectievelijk een maand, dag en jaar. Vervolgens wordt een boolean terug gegeven of de datum geldig is of niet. Op deze manier is het dus niet mogelijk om bijvoorbeeld een datum als 31 februari 2008 te selecteren. Als de controle van de datum slaagt, voegen we de verschillende onderdelen samen in een variabele $sdatum. Zo niet, dan voegen we een foutmelding toe aan de array $aerrors. De laatste kleine verandering bevindt zich in de verwerking van de gecontroleerde gegevens. Naast de voor en achternaam, wordt nu ook de ingevulde geboortedatum op het scherm getoond. Tot zover het maken en verwerken van formulieren in deze handleiding. Mocht je nog andere voorbeelden willen bekijken, dan verwijs ik je graag door naar een van de volgende scripts van op phphulp.jorendewit.nl: Uitgebreide formuliercontrole 1 Contactformulier met Swift Mailer 2 Deze voorbeelden zijn een stuk uitgebreider en laten zien wat er onder andere ook mogelijk is op het gebied van formulier controle en verwerking. 1 Directe url: 2 Directe url:

38 38 PHP Beginnershandleiding 9. Superglobals PHP kent enkele vooraf gedefinieerde variabelen, de zogenaamde superglobals. Deze variabelen zijn arrays die afhankelijk van de situatie allerlei waarden kunnen bevatten. Deze superglobals zijn overal en in elk script beschikbaar. Dit wil echter niet zeggen dat ze ook altijd gevuld zijn, dat hangt van de situatie af. De superglobals waarin ik in deze handleiding aandacht zal besteden zijn: $_GET $_POST $_FILES $_SERVER $_COOKIE $_REQUEST Naast deze lijst zijn er nog twee variabelen: $_ENV en $GLOBALS. Deze gebruik je echter (bijna) nooit, dus daar zal ik hier verder ook geen aandacht aan besteden. Als we naar het lijstje kijken zien we dat we twee van deze variabelen al gebruikt hebben. $_SERVER en $_POST kwamen namelijk al eerder in het verwerkingsscript van ons formulier tegen. Nu zal ik de uitleg achter de werking van deze variabelen geven. $_GET Iedereen heeft wel eens een url van een website gezien die er bijvoorbeeld zo uit zag: Wellicht dat je je ook ooit al eens afgevraagd hebt wat die? en & in de url nou precies doen en dat je al een vermoeden had dat dit variabelen zijn. Dan zat je helemaal op het juiste spoor. Deze zogenaamde GET variabelen zijn variabelen die aan de url meegegeven kunnen worden en die we later in ons script kunnen gebruiken. In bovenstaand voorbeeld heb je dus beschikking over de GET variabelen 'show' en 'id'. In ons script zijn deze variabelen te vinden in de superglobal $_GET. Deze variabele is een array waarin alle variabelen uit de url opgeslagen zijn. Met het volgende scriptje in onze index.php zal ik laten zien hoe dit werkt: Code: index.php 2. if(isset($_get['naam'], $_GET['leeftijd'])) 3. { 4. echo 'Hoi '.$_GET['naam'].', jij bent '.$_GET['leeftijd'].' jaar.'; 5. } 6. else 7. { 8. echo 'Een van de benodigde GET variabelen bestaat niet'; 9. } 10.?> Als we het script nu aan zouden roepen met de volgende url: index.php?naam=kees&leeftijd=42, zou dat de volgende output geven: Hoi Kees, jij bent 40 jaar. Allereerst controleren we met isset() of de twee GET variabelen wel bestaan. Dit moeten we altijd doen met variabelen die uit de url komen, het wordt namelijk lastig werken met variabelen die niet bestaan. Vervolgens gebruiken we de variabelen om wat informatie op het scherm te zetten. Om te laten zien dat de controle of de variabelen bestaan werkt, roepen we de pagina nu als volgt aan: index.php?naam=kees. Dit is de output die we nu krijgen:

39 9. Superglobals 39 Een van de benodigde GET variabelen bestaat niet $_POST De werking van deze variabele hebben we in het vorige hoofdstuk al kunnen aanschouwen. Kort gezegd bevat deze variabele de waarden die met behulp van een formulier gepost zijn. Een formulier met als method 'post' is tevens ook de enige manier om deze variabele te vullen. In het vorige hoofdstuk staat een uitgebreid voorbeeld van de werking van deze superglobal, dus ik ga hier niet nog eens een voorbeeld geven. Wij gaan snel door met de volgende superglobal. $_FILES Zoals je wellicht wel weet is het met een combinatie van HTML en PHP ook mogelijk om bestanden naar de webserver te uploaden. Denk bijvoorbeeld aan het toevoegen van een bijlage aan je webmail of het toevoegen van een filmpje op youtube. Om bestanden te kunnen uploaden heb je in je formulier een veld van het type 'file' nodig. Bovendien moet je ervoor zorgen dan je ook het enctype attribuut aan de <form> tag meegeeft met de waarde 'multipart/form data'. 2. if($_server['request_method'] == 'POST') 3. { 4. echo '<pre>'.print_r($_files, true).'</pre>'; 5. } 6.?> <form action="#" method="post" enctype="multipart/form-data"> 9. <p> 10. <label for="userfile">bestand:</label> 11. <input type="file" name="userfile" id="userfile" /> 12. </p> 13. <p> 14. <input type="submit" value="uploaden" /> 15. </p> 16. </form> Hier zien we een voorbeeld van een formuliertje om een bestand te uploaden. Als action heb ik dit keer een # ingevuld, dan worden de waarden uit het formulier naar dezelfde pagina gestuurd. Verder zien we dat de method weer op 'post' staat en dat we nu een enctype meegegeven hebben. Omdat het formulier de waarden naar dezelfde pagina verstuurd, zien we ook dat de verwerking van het formulier in dit scriptje staat. In dit geval bestaat het uit niet meer dan het weergeven de de inhoud van $_FILES op het scherm. Een voorbeeld van output na uploaden van een bestand zou de volgende kunnen zijn: Array ( [userfile] => Array ( [name] => sprinkhaan.jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\phpD23E.tmp [error] => 0 [size] => ) ) We zien dat $_FILES een multidimensionale associatieve array is. De eerste sleutel bevat de naam van het input veld waarin we de bestandsnaam kozen. De waarde die bij deze sleutel hoort is weer een array met gegevens over het bestand dat geupload is. Een kort overzichtje:

40 40 PHP Beginnershandleiding name De bestandsnaam van het geuploade bestand type Het MIME type van het bestand. Dit geeft aan wat voor soort bestand het is tmp_name Elk geupload bestand komt in de tmp map onder een tijdelijke naam te staan error Normaal gesproken 0, een andere waarde als het uploaden niet lukt size De bestandsgrootte in bytes Nu heb ik het telkens over het bestand dat geupload is, maar in werkelijkheid is dat nog niet het geval. Het is door de HTML code van jouw computer naar een tijdelijke locatie verhuist. Nu zul je met PHP het uploaden van het bestand af moeten ronden. Dit hoort echter niet tot de onderwerpen die ik in deze handleiding behandel. Wil je hier meer over lezen, dan vind je op phphulp.jorendewit.nl een duidelijk en veilig voorbeeld 1. $_SERVER Ook van deze superglobal hebben we in het vorige hoofdstuk gebruik gemaakt. In deze variabele is informatie over de server en de manier waarop met de server gecommuniceerd is, opgeslagen. Laten we eens kijken wat we er allemaal in vinden: 2. echo '<pre>'.print_r($_server, true).'</pre>'; 3.?> Array ( [HTTP_HOST] => localhost [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-gb; rv: ) Gecko/ Firefox/ [HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/ *;q=0.5 [HTTP_ACCEPT_LANGUAGE] => en-gb,en;q=0.5 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => ISO ,utf-8;q=0.7,*;q=0.7 [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => mtrack= m ; PHPSESSID=g5fiq9d9udq9vanpvuosb0dsn4 [PATH] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\QuickTime\QTSystem\;C:\WINDOWS\Microsoft.NET\Framework\v [SystemRoot] => C:\WINDOWS [COMSPEC] => C:\WINDOWS\system32\cmd.exe [PATHEXT] =>.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH [WINDIR] => C:\WINDOWS [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.2.6 (Win32) PHP/5.2.5 [SERVER_NAME] => localhost [SERVER_ADDR] => [SERVER_PORT] => 80 [REMOTE_ADDR] => [DOCUMENT_ROOT] => C:/wamp/www/ [SERVER_ADMIN] => webmaster@localhost [SCRIPT_FILENAME] => C:/wamp/www/index.php [REMOTE_PORT] => 4819 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /index.php [SCRIPT_NAME] => /index.php [PHP_SELF] => /index.php [REQUEST_TIME] => ) Ik zal niet elke waarde uit deze array bespreken, enkel de variabelen die je regelmatig gebruikt zal ik kort toelichten. 1 Directe url:

41 9. Superglobals 41 HTTP_HOST Geeft de hostnaam weer. Dus bijvoorbeeld 'localhost' of 'phphulp.jorendewit.nl' REMOTE_ADDR Het ip adres van de bezoeker van het script DOCUMENT_ROOT Geeft het pad waarin het script zich bevind, relatief vanaf de root van de server REQUEST_METHOD Geeft de manier waarop de pagina is aangeroepen. Meestal GET of POST. REQUEST_URI De url waarmee het script aangeroepen is, inclusief GET variabelen SCRIPT_NAME De bestandsnaam van het uitgevoerde script De variabelen uit deze array gebruik je in de meeste gevallen om bijvoorbeeld te controleren of een formulier gepost is, te controleren hoe het script aangeroepen is, of om gegevens over de bezoeker te achterhalen. Meestal kun je variabelen uit deze array wel combineren tot een gewenst resultaat. $_SESSION We hebben nu de werking van onder andere de $_GET en $_POST superglobal gezien, en hoe we daarmee variabelen van buitenaf in een script kunnen krijgen. Maar wellicht dat je je wel eens afgevraagd hebt of er niet een manier is om variabelen beschikbaar te maken op een pagina zonder dat je deze via een formulier verstuurd of in de url zet. Dat is nou precies waar je binnen PHP een sessievariabele voor kunt gebruiken. Deze kun je aanmaken op pagina1 en vervolgens op pagina2 weer uitlezen. De voorwaarde is dat je elke pagina waarop je sessievariabelen wilt gebruiken, begint met session_start(). Sessievariabelen worden tijdelijk opgeslagen op de server en zijn te gebruiken met de superglobal $_SESSION. Code: pagina1.php 2. // Elke pagina waar we sessies gebruiken, beginnen met met session_start() 3. session_start(); // Declareren van sessievariabelen 6. $snaam = 'Kees'; 7. $_SESSION['naam'] = $snaam; 8. $_SESSION['leeftijd'] = 42; 9.?> Code: pagina2.php 2. // Elke pagina waar we sessies gebruiken, beginnen met met session_start() 3. session_start(); // Uitlezen van de sessievariabele 6. echo 'Hoi '.$_SESSION['naam'].' jij bent '.$_SESSION['leeftijd'].' jaar'; 7.?> Hoi Kees jij bent 42 jaar Een sessievariabele zal beschikbaar zijn, zolang de sessie nog actief is. Hoe lang dat is, is afhankelijk van de instellingen van de server. Het zou bijvoorbeeld 1 dag kunnen zijn, maar het is ook mogelijk dat de sessie bij het afsluiten van de browser al gesloten wordt. In het volgende hoofdstuk zal ik dieper ingaan op het gebruik van sessievariabelen en zullen we een eerste loginscriptje schrijven. $_COOKIE Naast het gebruik van sessievariabelen om gegevens op meerdere paginas te kunnen gebruiken, kent PHP ook het gebruik van cookies voor dit doeleinde. Het verschil met sessievariabelen is dat cookies op de PC van de bezoeker opgeslagen worden. Ze kunnen dus handmatig verwijderd en gewijzigd worden en derhalve is het niet veilig om er gevoelige informatie in te zetten.

42 42 PHP Beginnershandleiding Cookies aanmaken Het aanmaken van een cookie doen we met de functie setcookie(). Code: pagina1.php 2. // De naam die we in een cookie op willen slaan. 3. $snaam = 'Kees'; // Het aanmaken van de cookie met setcookie() 6. setcookie('cookienaam', $snaam, time()+3600); 7.?> De eerste parameter van de setcookie() functie is de naam van de cookie. Daaraan kunnen we hem straks herkennen. Daarna volgt de inhoud van de cookie, in dit geval een naam, en tenslotte geven we het tijdstip waarop de cookie moet verlopen, op. Een cookie is net als een sessie namelijk maar een bepaalde tijd geldig, in dit geval dus een uur. Uitlezen van de cookie Voor het uitlezen van de cookie kunnen de de superglobal $_COOKIE gebruiken. Code: pagina2.php 2. echo 'Welkom terug '.$_COOKIE['cookieNaam']; 3.?> Welkom terug Kees Cookies gebruik je in de meeste gevallen om specifieke instellingen van een gebruiker langere tijd te bewaren. Bijvoorbeeld het automatisch inloggen als een gebruiker op een website terugkeert, wordt door middel van cookies gedaan. $_REQUEST De laatste superglobal die ik wil bespreken is $_REQUEST. Deze superglobal bevat een combinatie van de $_GET. $_POST en $_COOKIE arrays. In plaats van een voorbeeld te geven, wil ik het gebruik van deze variabele juist afraden. Deze variabele heeft totaal geen meerwaarde boven de losse superglobals en kan alleen maar voor verwarring zorgen. Met deze superglobal weet je namelijk niet meer niet meer of een waarde nu uit de GET, POST of COOKIE array afkomstig is. Naast onduidelijkheid kan dit ook een potentieel veiligheidslek met zich meebrengen. Gewoon niet gebruiken dus.

43 10. Sessies nader bekeken: een eerste loginscript Sessies nader bekeken: een eerste loginscript In het vorige hoofdstuk hebben we een uitleg van het gebruik van superglobals in PHP gezien. Ook hebben we daar kennis gemaakt met de $_SESSION superglobal waarmee we variabele op meerdere paginas beschikbaar konden maken. We zullen nu kijken naar hoe we deze manier kunnen toepassen in een zeer eenvoudig loginscript. Het script dat we schrijven is een loginscript voor 1 gebruiker met wachtwoord en zal gebruik maken van sessies. De HTML code Laten we maar weer beginnen met de HTML code van het loginformulier. We hebben nu twee inputvelden nodig waarin we een gebruikersnaam en wachtwoord in kunnen vullen. De typen die we voor deze velden gebruiken zijn respectievelijk 'text' en 'password'. Code: login_form.php 1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " 2. <html xmlns=" 3. <head> 4. <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 5. <title>mijn eerste loginscript!</title> 6. </head> <body> 9. <h1>inloggen</h1> 10. <form method="post" action="login.php"> 11. <p> 12. <label for="user">gebruikersnaam:</label> 13. <input type="text" name="user" id="users" /> 14. </p> 15. <p> 16. <label for="pass">wachtwoord:</label> 17. <input type="password" name="pass" id="pass" /> 18. </p> 19. <p> 20. <input type="submit" value="inloggen" /> 21. </p> 22. </form> 23. </body> 24. </html> Deze code spreekt redelijk voor zich. De action van het formulier laten we verwijzen naar login.php, het script waarmee we het login formulier verwerken. Een werkend voorbeeld van het loginscript is via de handleiding op phphulp.jorendewit.nl 1 te vinden. Het PHP script Ook nu zal ik eerst weer het hele script laten zien, waarna ik het stap voor stap met je zal doornemen. 1 Directe url:

44 44 PHP Beginnershandleiding Code: login.php 2. // We gaan sessies gebruiken 3. session_start(); // Gebruikersnaam en wachtwoord instellen 6. $sgebruikercontrole = 'admin'; 7. $swachtwoordcontrole = 'voorbeeld'; // Controle of het formulier verzonden is 10. if($_server['request_method'] == 'POST') 11. { 12. // Controle of benodigde velden wel ingevuld zijn 13. if(isset($_post['user'], $_POST['pass'])) 14. { 15. // Overbodige spaties verwijderen 16. $sgebruiker = trim($_post['user']); 17. $swachtwoord = trim($_post['pass']); // Gebruikersnaam en wachtwoord controleren 20. if($sgebruiker == $sgebruikercontrole && $swachtwoord == $swachtwoordcontrole) 21. { 22. // Juiste gebruikersnaam en wachtwoord: inloggen! 23. $_SESSION['logged_in'] = true; 24. $_SESSION['gebruiker'] = $sgebruiker; // Doorsturen en melding geven 27. header('refresh: 3; url=beveiligd.php'); 28. echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.'; 29. } 30. else 31. { 32. // Terugsturen en foutmelding geven 33. header('refresh: 3; url=login_form.php'); 34. echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!'; 35. } 36. } 37. else 38. { 39. header('refresh: 3; url=login_form.php'); 40. echo 'Een vereist veld bestaat niet!'; 41. } 42. } 43. else 44. { 45. // Terug naar het formulier 46. header('location: login_form.php'); 47. exit(); 48. } 49.?> Zoals je ziet lijkt het redelijk veel op de afhandeling van een formulier die we eerder al toegepast hebben. In dit script zitten echter wel een aantal andere dingen. 2. // We gaan sessies gebruiken 3. session_start(); // Gebruikersnaam en wachtwoord instellen 6. $sgebruikercontrole = 'admin'; 7. $swachtwoordcontrole = 'voorbeeld'; 8.?> We maken bij dit loginscript gebruik van sessievariabelen, dus moeten we de pagina met session_start() beginnen. Vervolgens declareren we twee variabelen die respectievelijk de gebruikersnaam en het wachtwoord bevatten, deze zullen we later voor de controle gebruiken. In geavanceerdere loginscripts haal je de gebruikersnaam en wachtwoord voor controle vaak uit een database. Maar aangezien database verbindingen geen onderdeel van deze handleiding zijn, zal ik dat hier niet behandelen.

45 10. Sessies nader bekeken: een eerste loginscript // Controle of het formulier verzonden is 3. if($_server['request_method'] == 'POST') 4.?> Ook hier controleren we eerst of er wel een formulier gepost is. We kunnen immers alleen met $_POST variabelen werken als ze ook daadwerkelijk gevuld en dus verzonden zijn. 2. // Controle of benodigde velden wel ingevuld zijn 3. if(isset($_post['user'], $_POST['pass'])) 4.?> De controle of de benodigde velden wel in de $_POST array aanwezig zijn, kan hier natuurlijk ook niet ontbreken. 2. // Overbodige spaties verwijderen 3. $sgebruiker = trim($_post['user']); 4. $swachtwoord = trim($_post['pass']); 5.?> Vervolgens gebruiken we trim() om de loze spaties voor of achter een input te verwijderen. Dit voorkomt dat de gebruikersnaam en wachtwoord niet overeen zouden komen door zo'n spatie. 2. if($sgebruiker == $sgebruikercontrole && $swachtwoord == $swachtwoordcontrole) 3. { 4. // Juiste gebruikersnaam en wachtwoord: inloggen! 5. $_SESSION['logged_in'] = true; 6. $_SESSION['gebruiker'] = $sgebruiker; // Doorsturen en melding geven 9. header('refresh: 3; url=beveiligd.php'); 10. echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.'; 11. } 12.?> Dit is het gedeelte waar het eigenlijk om draait. Allereerst controleren we of de ingevulde gebruikersnaam en wachtwoord overeenkomen met de ingestelde waarden. Als dat het geval is, declareren we een tweetal sessievariabelen. $_SESSION['logged_in'] is een boolean die aangeeft of een gebruiker ingelogd is, $_SESSION['gebruiker'] krijgt de gebruikersnaam van de ingelogde gebruiker. Opmerking: wachtwoorden sla je nooit op in een sessievariabele of cookie. Dit is nergens voor nodig en bovendien onveilig aangezien ook sessies gestolen kunnen worden. Een wachtwoord heb je maar eenmalig nodig, en dat is bij de controle van het login formulier. Tenslotte geven we een melding dat de gebruiker ingelogd is en sturen we de gebruiker door naar de volgende pagina.

46 46 PHP Beginnershandleiding 2. else 3. { 4. // Terugsturen en foutmelding geven 5. header('refresh: 3; url=login_form.php'); 6. echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!'; 7. } 8.?> Als de gebruikersnamen en/of het wachtwoord niet overeenkomen, geven we daar een melding van en sturen we de gebruiker terug naar het login formulier. De beveiligde pagina Tot nu toe hebben we gezien hoe we het login formulier in HTML weergeven en hoe de verwerking van het login formulier eruit ziet. Dan kunnen we nu kijken naar de beveiligde paginas die alleen toegankelijk zijn voor ingelogde gebruikers. Op deze beveiligde paginas controleren we helemaal aan het begin met een if statement of de bezoeker wel ingelogd is. Als dat niet het geval is, sturen we hem direct door naar het login formulier en stoppen we de rest van de uitvoer van het script. Code: beveiligd.php 2. // We werken ook hier met sessies 3. session_start(); // Controleren of de bezoeker ingelogd is 6. if(!isset($_session['logged_in']) $_SESSION['logged_in'] == false) 7. { 8. header('location: login_form.php'); 9. exit(); 10. } // Een welkomst tekst weergeven 13. echo 'Welkom '.$_SESSION['gebruiker'].' wat leuk dat je er weer bent.'; 14.?> Allereerst beginnen we deze pagina ook weer met session_start(), we werken immers weer met sessievariabelen. Vervolgens controleren we of de variabele $_SESSION['logged_in'] bestaat en of de waarde van deze variabele niet gelijk is aan FALSE. Als een van deze voorwaarden wel het geval is, sturen we de gebruiker met een header() direct door naar het login formulier en gebruiken we exit() om de verdere uitvoer van het script te stoppen. Mocht de bezoeker wel ingelogd zijn, dan wordt niet voldaan aan het if statement en wordt de rest van het script uitgevoerd. In ons geval houdt dat het geven van een welkomstbericht in. In dat bericht gebruiken we $_SESSION['gebruiker'] om de ingelogde gebruiker persoonlijk aan te spreken. Op elke pagina waarop je enkel ingelogde gebruikers toegang wilt geven, plaats je dus regel 1 10 uit dit voorbeeld boven aan het script. Op die manier heb je altijd de zekerheid dat de pagina alleen aan ingelogde gebruikers getoond wordt. Een werkend voorbeeld van het logiscript is op phphulp.jorendewit.nl 1 te vinden. De gebruikersnaam en wachtwoord zijn, zoals je in het script kunt zien, admin en voorbeeld. 1 Directe url:

47 11. Netjes scripten Netjes scripten Het einde van deze handleiding begint in zicht te komen. Er zijn echter nog een paar zaken waaraan ik aandacht wil besteden. Deze laatste twee hoofdstukken zullen in het teken staan van de manier waarop je scripts op bouwt en het oplossen van fouten in een script aan de hand van foutmeldingen (debuggen). Het netjes opbouwen van je PHP scripts is belangrijk. Allereerst omdat je zo het overzicht over je code behoudt. Vooral naarmate je code langer wordt, kan hij wel eens heel onoverzichtelijk worden als je niet op een nette manier script. Daarnaast zullen we zien dat het oplossen van fouten veel makkelijker wordt als je scripts netjes opgebouwd zijn. Inspringen Een eenvoudige methode om je code overzichtelijk te houden is door op vaste plaatsen en consequent in te springen. Kijk eens naar het volgende stukje code: 2. if($_server['request_method'] == 'POST'){ 3. $aerrors = array(); 4. $adata = array(); 5. foreach($_post as $skey => $svalue){ 6. $svalue = trim($svalue); 7. if(empty($svalue)){ 8. $aerrors[] = 'Je bent vergeten om '.$skey.' in te vullen'; 9. } 10. $adata[$skey] = $svalue; 11. } 12. if(empty($aerrors)){ 13. echo '<p>je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>'; 14. echo '<p>voornaam: '.$adata['voornaam'].'<br />'; 15. echo 'Achternaam: '.$adata['achternaam'].'</p>'; 16. }else{ 17. header('refresh: 3; url=formulier.php'); 18. foreach($aerrors as $serror){ 19. echo '<p style="color:red">'.$serror.'</p>'; 20. } 21. } 22. } 23.?> Dit is een werkend stukje code en als we goed kijken zien we dat dit een deel uit het verwerkingsscript van ons eerste formulier is. Alleen heb ik nu alle 'overbodige' tabs en enters uit het script gehaald. Vergelijk dit nu eens met de originele code:

48 48 PHP Beginnershandleiding 2. if($_server['request_method'] == 'POST') 3. { 4. // Arrays declareren voor opslag van fouten en data 5. $aerrors = array(); 6. $adata = array(); // Waarden uit de $_POST array doorlopen 9. foreach($_post as $skey => $svalue) 10. { 11. // Spaties aan begin en eind weghalen 12. $svalue = trim($svalue); // Controle of variabele gevuld is 15. if(empty($svalue)) 16. { 17. // Foutmelding toevoegen 18. $aerrors[] = 'Je bent vergeten om '.$skey.' in te vullen'; 19. } // Ingevulde waarden aan data array toevoegen 22. $adata[$skey] = $svalue; 23. } // Controleren of er geen fouten opgetreden zijn 26. if(empty($aerrors)) 27. { 28. // Formulier succes! 29. echo '<p>je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>'; 30. echo '<p>voornaam: '.$adata['voornaam'].'<br />'; 31. echo 'Achternaam: '.$adata['achternaam'].'</p>'; 32. } 33. else 34. { 35. // Fouten opgetreden: weergeven en terug naar formulier 36. header('refresh: 3; url=formulier.php'); 37. foreach($aerrors as $serror) 38. { 39. echo '<p style="color:red">'.$serror.'</p>'; 40. } 41. } 42. } 43.?> Volgens mij kun je niet anders dan het met me eens zijn, dat dit een stuk duidelijker en overzichtelijker is. Dit wordt voornamelijk veroorzaakt door het op een consequente manier inspringen. De manier die ik altijd gebruik is de volgende: 2. if( statement ) 3. { 4. // Doe iets 5. while( statement) 6. { 7. //Doe nog iets 8. } 9. } 10. else 11. { 12. // Doe iets anders 13. } 14.?> Een andere standaard die ook veel gebruikt wordt is deze:

49 11. Netjes scripten if( statement ) { 3. // Doe iets 4. while( statement) { 5. //Doe nog iets 6. } 7. } else { 8. // Doe iets anders 9. } 10.?> Deze methode is korter maar vind ik persoonlijk minder fijn werken. De keuze van de manier van inspringen is heel persoonlijk en je hoeft je ook niet per se aan een algemene standaard te houden. Het belangrijkste is dat je 1 methode kiest en die vervolgens consequent toepast. Ook als je stukjes code kopieert (wat ik zelf ook regelmatig doe), verander dan de layout ervan naar je eigen methode, zodat de code netjes in de rest van je script past. Commentaar Ik heb het al eerder in deze handleiding gezegd, maar het toevoegen van commentaar is minstens zo belangrijk om het overzicht te behouden. Niet alleen voor anderen maar ook voor jezelf. Vooral als je code langer wordt is het belangrijk om commentaar toe te voegen aan de verschillende elementen in je code. Op die manier weten anderen en jijzelf later nog wat de functie van een bepaald onderdeel ook alweer was. Zorg dat je commentaar op nuttige plaatsen toepast, te veel is namelijk ook niet goed. Ga dus niet aan elk if en else statementje een regel commentaar toevoegen als de functie ervan ook zonder commentaar duidelijk is. Dit zal er alleen maar voor zorgen dat je code weer onoverzichtelijker wordt, en dat moet je zien te voorkomen.

50 50 PHP Beginnershandleiding 12. Debuggen: het oplossen van PHP fouten Een belangrijk aspect van het programmeren waarmee ik deze handleiding wil afsluiten, is het debuggen van je scripts. Alle programmeurs zijn mensen en mensen maken fouten. We kunnen dus ook niet voorkomen dat er foutjes in onze scripts sluipen waardoor ze wellicht niet zullen werken. Dit hoeft echter helemaal geen probleem te zijn, aangezien je fouten kunt oplossen. Het debuggen van je script bestaat uit 3 stappen: Constateren van een fout De fout lokaliseren in je script Oplossen van de fout Voordat we hier echter mee beginnen, eerst iets anders. We willen immers wel dat PHP ook daadwerkelijk foutmeldingen geeft als er iets fout gaat. Daarom zetten we van nu af aan altijd deze twee regels boven aan onze php scripts: 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); 4.?> De eerste regel zorgt ervoor dat fouten überhaupt weergegeven worden, terwijl de tweede regel ervoor zorgt dat alle mogelijke foutmeldingen op het scherm getoond worden. Regels toegevoegd maar geen fouten te zien? Het kan zijn dat de display_errors instelling in de php.ini uitgeschakeld staat. Hoewel we hem in ons script met ini_set() aan zetten, wordt dit pas gedaan als het script uitgevoerd wordt. Eventuele syntax fouten in het script worden dus nog niet weergegeven. Om dat voor elkaar te krijgen, plaatsen we een.htaccess bestandje met de volgende regels in de root (vaak: public_html, www of htdocs) van onze website: Code:.htaccess # Display Errors inschakelen php_flag display_errors on Nu worden alle foutmeldingen netjes op het scherm getoond. Debuggen Ik zal een aantal voorbeelden geven van de meest voorkomende fouten in een PHP script. Bij elk voorbeeld zullen we vervolgens aan de hand van de drie stappen van het debuggen de fout proberen te verhelpen. De eerste stap, het constateren van de fout, is de minst lastige. PHP zal namelijk een foutmelding op het scherm zetten en al dan niet het script stoppen. De syntax van de standaard PHP foutmelding ziet er er als volgt uit: [fout level]: [bericht] in [bestand] on line [regelnummer] De tweede stap zal in de meeste gevallen de lastigste zijn. In de foutmelding wordt altijd een bestand en regelnummer gegeven waar de fout optreedt. Dat geeft ons een indicatie van waar iets fout gaat en gecombineerd met het bericht leidt ons dat meestal wel naar de fout. De derde stap is weer heel eenvoudig. Immers, als je weet wat er fout gaat, kun je het ook heel eenvoudig oplossen.

51 12. Debuggen: het oplossen van PHP fouten 51 Debuggen is een techniek die je jezelf moet aanleren. Goed debuggen zul je niet in een keer onder de knie hebben, daar komt ook een stukje ervaring bij kijken. Laten we daarom gewoon maar eens beginnen en naar wat veel voorkomende fouten en oplossingen kijken. Parse error 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); $snaam = 'Kees' 6. echo $snaam; 7.?> Parse error: syntax error, unexpected T_ECHO in C:\wamp\www\fouten.php on line 6 Deze foutmelding geeft aan dat we een fout in de syntax van ons script hebben, en wel op regel 6 in fouten.php. PHP geeft aan dat hij een bepaald element niet verwacht: 'syntax error, unexpected T_ECHO'. Met andere woorden, de echo op regel 6 komt onverwacht. Om de fout te lokaliseren zullen we vanaf regel 6 terug moeten gaan kijken, op zoek naar de reden waarom de echo onverwacht is. In veel gevallen zal het zo zijn dat je ergens een punt komma, quote of haakje vergeten bent. De fout is hier snel gevonden, we zien namelijk dat we vergeten zijn om regel 5 met een punt komma af te sluiten. De oplossing is dus het plaatsen van de punt komma. PHP zal altijd aangeven welk element niet verwacht wordt. Soms wordt het teken weergegeven, soms een omschrijving. Enkele omschrijvingen die je regelmatig ziet: T_VARIABELE Een variabele T_IS_EQUAL Een == teken Undefined variable 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); echo $snaam; 6.?> Notice: Undefined variable: snaam in C:\wamp\www\fouten.php on line 5 Deze foutmelding vertelt ons dat er op regel 5 in fouten.php iets fout gegaan is. Het bericht 'Undefined variable: snaam' houdt in dat we een variabele $snaam gebruikt hebben die niet bestaat. De oplossing is dus ofwel het eerder declareren van deze variabele, ofwel eerst controleren of deze variabele bestaat voordat we hem gebruiken:

52 52 PHP Beginnershandleiding Code: oplossing1 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); $snaam = 'Kees'; 6. echo $snaam; 7.?> Code: oplossing2 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); if(isset($snaam)) 6. { 7. echo $snaam; 8. } 9.?> Undefined index 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); echo $_GET['naam']; 6.?> Notice: Undefined index: naam in C:\wamp\www\fouten.php on line 5 De undefined index is bijna hetzelfde als de undefined variabele. Deze foutmelding wordt namelijk weergegeven als een bepaalde sleutel in een array niet bestaat. De oplossing is hier wederom het eerst controleren of de variabele bestaat voordat je hem gebruikt: Code: oplossing 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); if(isset($_get['naam'])) 6. { 7. echo $_GET['naam']; 8. } 9.?>

53 12. Debuggen: het oplossen van PHP fouten 53 Parse errors: unexpected $end 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); if(isset($_get['naam'])) 6. { 7. echo $_GET['naam']; 8.?> Parse error: syntax error, unexpected $end in C:\wamp\www\fouten.php on line 10 Dit zijn meestal vervelendere fouten om op te moeten lossen. Met name omdat deze fout altijd plaatsvindt op de laatste regel van je script. De oorzaak is bijna altijd dat het aantal { niet gelijk is aan het aantal } in je script waardoor er dus bepaalde constructies niet afgesloten zijn. In het voorbeeld is direct duidelijk dat we de } van het ifstatement vergeten zijn. Maar naarmate je code langer wordt, kan dit een ware zoektocht opleveren. En dan blijkt maar weer hoe belangrijk het is om netjes te scripten! Headers already sent 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); echo 'Hello World!'; 6. header('refresh: 3; url=index.php'); 7.?> Warning: Cannot modify header information headers already sent by (output started at C:\wamp\www\fouten.php:5) in C:\wamp\www\fouten.php on line 6 Dit is een veel voorkomende fout waar veel beginnende programmeurs moeite mee hebben. Hij wordt veroorzaakt doordat je voor de functies header(), session_start() en setcookie() nog helemaal geen output naar de browser verzonden mag hebben. Dat betekent geen echo, geen HTML maar ook geen loze spatie ergens buiten je php tags. De foutmelding geeft ons ten eerste weer het script en regelnummer waar de fout is opgetreden. De melding geeft aan dat het een 'headers already sent' fout betreft. Verder geeft de foutmelding ook nog aan waar er al output naar de browser verzonden is. In ons geval in fouten.php op regel 5. En dat klopt, want daar staat onze echo. De oplossing van deze fouten is niet altijd even eenvoudig. Waar je altijd op moet proberen te letten is dat je altijd eerst alle logica (php) afhandelt voordat je output (HTML) gaat genereren. In ons geval zullen we de header() dus voor de echo moeten plaatsen: 2. ini_set('display_errors', 'On'); 3. error_reporting(e_all); header('refres: 3; url=index.php'); 6. echo 'Hello World!'; 7.?>

54 54 PHP Beginnershandleiding Ik krijg niets te zien? Als je een lege pagina terug krijgt terwijl je toch echt output verwacht, zul je nog even goed naar je script moeten kijken. Controleer even of er wel degelijk output gegeven zou moeten worden. In het andere geval zou het kunnen dat de display_errors instelling uit staat waardoor fouten helemaal niet weergegeven worden. Hoewel we dat telkens met die eerste twee regels code aanzetten, gebeurt dit pas op een moment nadat bijvoorbeeld parse errors opgetreden zijn. Deze worden dan alsnog niet weergegeven. Dat kunnen we oplossen door een bestandje met de naam.htaccess (ja een punt als begin en verder geen extensie) in de root van onze website te zetten. In dit bestandje zetten we dan de volgende regel: Code:.htaccess php_flag display_errors on Nu staat de display_errors instelling ingeschakeld en worden ook de parse errors weergegeven. Voor meer informatie over foutafhanding in PHP verwijs ik je graag door naar mijn handleiding over foutafhandeling in PHP 1. Daar ga ik veel dieper in op de verschillende mogelijkheden die je hebt met betrekking tot het afhandelen van fouten in PHP. 1 Directe url:

55 13. Slotwoord en referenties Slotwoord en referenties Nu zijn we dan echt aan het einde van deze handleiding gekomen. Ik hoop dat ik je hiermee de basis van PHP op een duidelijk manier heb kunnen uitleggen. Als je deze handleiding aandachtig doorgenomen hebt, heb je genoeg kennis om te beginnen met het schrijven van eigen PHP scripts, het programmeren van je eigen toepassingen of wellicht het verder lezen van andere, moeilijkere handleidingen. Zoals je wellicht snel zult merken, is de kennis die je nu bezit echt nog maar de basis. De wijde wereld van het programmeren ligt nu voor je open. Andere onderwerpen die eigenlijk altijd hand in hand gaan met het gebruik van PHP zijn natuurlijk het gebruik van HTML en CSS, maar ook het gebruik van databases om je scripts nog dynamischer te maken, behoort nu tot de mogelijkheden. Ik zal nog enkele urls geven naar sites of handleidingen die meer informatie geven over deze verschillende onderwerpen: PHP PHP.net Handleiding Foutafhandeling in PHP PHP Contactformulier met Swift Mailer Filters in PHP 5 HTML W3Schools HTML Tutorial W3Schools XHTML Tutorial CSS W3Schools CSS Tutorial Quirksmode artikelen over CSS Websitemaken.be HTML en CSS Tutorials Databases & SQL SQL Beginners handleiding W3Schools SQL Tutorial PDO Verbinden met verschillende databases MySQL Handleiding PostgreSQL Handleiding Opmerkingen, vragen of suggesties over deze handleiding zijn natuurlijk altijd welkom! Via mijn website ( kun je je reacties, vragen of opmerkingen kwijt. O

56 56 PHP Beginnershandleiding 14. Bronvermelding Voor het schrijven van deze handleiding heb ik van de volgende bronnen gebruik gemaakt: Deiman, R. (2007). Beginnen met PHP. Geraadpleegd op , Kapteijn, A. (z.d.). PHP Programmeren. Geraadpleegd op , programmeren.php Mirax (2007). Een uitgebreide PHP cursus. Geraadpleegd op , PHP.net (z.d.). PHP.net: Documentation. Geraadpleegd op ,

Formulier maken en opvangen met php

Formulier maken en opvangen met php Welkom bij mijn PHP tutorial (Deel 2) 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

Formulieren maken met Dreamweaver CS 4/CS 5

Formulieren maken met Dreamweaver CS 4/CS 5 Formulieren maken met Dreamweaver CS 4/CS 5 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit

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

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

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

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

Les 9: formulier controle met javascript.

Les 9: formulier controle met javascript. Les 9: formulier controle met javascript. Javascript is erg veel gebruikt bij internet toepassingen. In tegenstelling tot PHP, wat een server side scripting is, is java client side scripting. Dwz, niet

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 [email protected] Basis php 1. Introductie 2.

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

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

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

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester. In onderstaande oefeningen zijn kleuren gebruikt. Deze dienen aleen om de structuren makkelijker terug te kunnen herkennen. Ze worden niet standaard zo gebruikt. De dunne rood/roze balken zijn ook geen

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

Handleiding Wordpress

Handleiding Wordpress Handleiding Wordpress Inhoudsopgave 1. Inloggen 2. Berichten en Pagina s 3. Afbeeldingen en video s 4. Weblinks 1. Inloggen 1.1 Inloggen bij Wordpress We starten met het inloggen op je WordPress gebaseerde

Nadere informatie

Les W-04: Een introductie in PHP

Les W-04: Een introductie in PHP Les W-04: Een introductie in PHP 4.0 PHP De afgelopen jaren zijn websites steeds interactiever geworden. Je beantwoordt een enquête via internet, doet mee aan een poll, stuurt een formulier naar iemands

Nadere informatie

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara MINICURSUS PHP Op dit lesmateriaal is een Creative Commons licentie van toepassing. 2017-2018 Sebastiaan Franken en Rosalie de Klerk Bambara PHP Cursus Deze cursus is om de eerste stappen in de wereld

Nadere informatie

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? 1 Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? Voordat je begint met programmeren, moet je Ruby installeren.

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

Foutcontrole met Javascript

Foutcontrole met Javascript Foutcontrole met Javascript Pol Van Dingenen Yannick Van Hauwe INLEIDING Het controleren van de gegevens die ingevuld zijn in formulieren is heel erg belangrijk. In de praktijk is enkel en alleen controle

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

JavaScript. 0 - Wat is JavaScript? JavaScript toevoegen

JavaScript. 0 - Wat is JavaScript? JavaScript toevoegen 0 - Wat is JavaScript? JavaScript is hele andere koek dan Scratch. Het wordt ook door professionele programmeurs gebruikt. Doordat er veel mensen gebruik maken van JavaScript is er veel informatie over

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

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

Formulieren en waarden posten naar een view

Formulieren en waarden posten naar een view Hoofdstuk 4 Formulieren en waarden posten naar een view Waarden posten naar een view in een Zend-project gaat heel anders dan dat je gewend bent. Om dit mechanisme te leren, kunnen we het beste een eenvoudige

Nadere informatie

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. 1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat

Nadere informatie

Programmeerstructuren met App Inventor

Programmeerstructuren met App Inventor Programmeerstructuren met App Inventor Kevin Krul, Universiteit Utrecht Roncalli, Bergen op Zoom Inhoud: Les 1: Introductie tot App Inventor, when statement en variabelen. Les 2: Introductie if-statement

Nadere informatie

Formulieren maken met Dreamweaver CS 4

Formulieren maken met Dreamweaver CS 4 Formulieren maken met Dreamweaver CS 4 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit zoveel

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

Programmeren voor het web met PHP

Programmeren voor het web met PHP Programmeren voor het web met PHP De meestgebruikte programmeertaal voor websites is PHP. Het is een heel handige taal waarmee je een eigen slimme website kunt bouwen. Je gaat nu leren hoe PHP werkt, en

Nadere informatie

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

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op XAMPP... 14 Handige links... 15 2 Disclaimer Bij 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

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

Blog-Het gebruik van variabelen in Excel VBA

Blog-Het gebruik van variabelen in Excel VBA Blog-Het gebruik van variabelen in Excel VBA Versie : 2012.01.31.1 (Blog http://www.reinder.eu) Dank voor de leuke reacties op het vorige blog en ook dank voor de kritische noot over het nivo dat de gebruiker

Nadere informatie

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET Visual Basic.NET M. den Besten 0.3 VB. NET Inhoud Voorwoord Deel 1 Visual Basic.NET 1.1 Inleiding...13 1.2 De programmeertaal Visual Basic.NET...14 1.3 Microsoft Visual Basic 2010 Express Edition...15

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

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

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

BEGINNER JAVA Inhoudsopgave

BEGINNER JAVA Inhoudsopgave Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire

Nadere informatie

De WordPress 3.5 Beginners Handleiding

De WordPress 3.5 Beginners Handleiding De WordPress 3.5 Beginners Handleiding Internetbureau Elephant april 13 Inhoud Introductie... 2 Inloggen... 3 Het dashboard... 5 Berichten en pagina's... 6 Nieuw Bericht... 6 Nieuwe Pagina... 8 Afbeeldingen,

Nadere informatie

Website maker. Bezoek je domein om de Website maker in te stellen. De volgende melding zal zichtbaar zijn.

Website maker. Bezoek je domein om de Website maker in te stellen. De volgende melding zal zichtbaar zijn. Aan de slag met de Bezoek je domein om de in te stellen. De volgende melding zal zichtbaar zijn. Volg de url 'administratie paneel' om in te loggen en de vervolgens in te stellen. Als eerst krijg je de

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 [email protected] en [email protected]

Nadere informatie

Les 3: Het maken van pagina s, het menu en het schrijven van een blogpost Pagina s

Les 3: Het maken van pagina s, het menu en het schrijven van een blogpost Pagina s Les 3: Het maken van pagina s, het menu en het schrijven van een blogpost Bij het maken van een blog is het belangrijk dat je er inhoud op plaatst. Dit noemen we content. Alles wat je openbaar op je blog

Nadere informatie

Dynamiek met VO-Script

Dynamiek met VO-Script Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software [email protected] Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries

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

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

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

Webscripting. PCVO Gent & OBAC. Willem De Meyer

Webscripting. PCVO Gent & OBAC. Willem De Meyer Webscripting PCVO Gent & OBAC Willem De Meyer Situering van de module De module webscripting kan na de cursus webdesign gevolgd worden. Kennis van html is noodzakelijk om op de opbouw van webpagina s te

Nadere informatie

Inhoud. Pagina 2 van 13

Inhoud. Pagina 2 van 13 Code Conventie Inhoud PHP algemeen... 3 Namen van variabelen... 3 Enkele of dubbele aanhalingstekens... 3 Globale variabelen... 3 Namen van functies... 3 Argumenten van functies... 3 Formattering... 4

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

Dynamische Websites. Week 2

Dynamische Websites. Week 2 Dynamische Websites Week 2 AGENDA Labo 1 GET, POST Navigatie, etc Varia 1 2

Nadere informatie

HANDLEIDING DOIT BEHEER SYSTEEM

HANDLEIDING DOIT BEHEER SYSTEEM HANDLEIDING DOIT BEHEER SYSTEEM ALGEMENE INFORMATIE Het Doit beheer systeem is een modulair opgebouwd systeem waarin modules makkelijk kunnen worden toegevoegd of aangepast, niet iedere gebruiker zal dezelfde

Nadere informatie

Simon de schildpad. 2012 J van Weert 1

Simon de schildpad. 2012 J van Weert 1 Programmeren met Simon Simon de schildpad 2012 J van Weert 1 Inleiding: Wat is programmeren eigenlijk? Een computer doet niets zonder een programma. Die programma s worden geschreven door mensen: programmeurs.

Nadere informatie

Hoofdstuk 1 Inleiding PHP 7 of ouder Hoe dit boek werkt 2

Hoofdstuk 1 Inleiding PHP 7 of ouder Hoe dit boek werkt 2 Inhoud Hoofdstuk 1 Inleiding 1 1.1 PHP 7 of ouder 2 1.2 Hoe dit boek werkt 2 Hoofdstuk 2 De programmeeromgeving 5 2.1 In dit hoofdstuk 5 2.2 Editor 5 2.3 Webserver op Linux, Mac of PC 5 2.4 De webmap 6

Nadere informatie

Quick Guide VivianCMS

Quick Guide VivianCMS Quick Guide VivianCMS Gastenboek creëren Versie: 1.0 Startdatum: 24 juli 2006 Datum laatste wijziging: 24 juli 2006 Opmerking: Gepubliceerd op http://www.viviancms.nl Inhoud 1 Inleiding...3 1.1 Contactformulier

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

v.1.30 Genkgo Handleiding Webshop Applicatie Producten verkopen op uw website

v.1.30 Genkgo Handleiding Webshop Applicatie Producten verkopen op uw website v.1.30 Genkgo Handleiding Webshop Applicatie Producten verkopen op uw website Inhoud Voordat u begint...3 Het instellen van uw webshop...4 Verkoper gegevens...4 Tenaamstelling... 4 Adres... 4 Contactgegevens...

Nadere informatie

HTTP SMS API Technische Specificatie messagebird.com versie 1.1.6-05 mei 2014

HTTP SMS API Technische Specificatie messagebird.com versie 1.1.6-05 mei 2014 HTTP SMS API Technische Specificatie messagebird.com versie 1.1.6-05 mei 2014 1 Inhoudsopgave INHOUDSOPGAVE 2 1 VERBINDING MET DE API 4 1.1 QUICK START 4 2 SMS PARAMETERS 5 2.1 VERPLICHTE PARAMETERS 6

Nadere informatie

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april 2009. Versie 2.1.0

Technisch ontwerp. Projectteam 6. Project Web Essentials 02 april 2009. Versie 2.1.0 Projectteam 6 Faculteit Natuur en Techniek Hogeschool Utrecht Projectleider: Hans Allis, [email protected] Technisch ontwerp Project "Web Essentials" 02 april 2009 Versie 2.1.0 Teamleden: Armin

Nadere informatie

Startgids 061 Nieuw product aanmaken en wijzigen

Startgids 061 Nieuw product aanmaken en wijzigen Startgids 061 Nieuw product aanmaken en wijzigen In deze startgids wordt uitleg gegeven hoe u nieuwe producten kunt aanmaken en wijzigen in de Safe Concept webapplicatie. Inhoud Een nieuw product aanmaken

Nadere informatie

Koppeling met een database

Koppeling met een database PHP en MySQL Koppeling met een database 11.1 Inleiding In PHP is het eenvoudig om een koppeling te maken met een database. Een database kan diverse gegevens bewaren die met PHP aangeroepen en/of bewerkt

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

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

Functies. Huub de Beer. Eindhoven, 4 juni 2011

Functies. Huub de Beer. Eindhoven, 4 juni 2011 Functies Huub de Beer Eindhoven, 4 juni 2011 Functies: je kent ze al Je hebt al verschillende PHP functies gebruikt: pi() om het getal π uit te rekenen. sin( 0.453 ) om het de sinus van het getal 0.453

Nadere informatie

En hoe gaan ze dit allemaal terugvinden?

En hoe gaan ze dit allemaal terugvinden? En hoe gaan ze dit allemaal terugvinden? Taak 1.2.10 Thomas Muller Paul van der Linden MT1A Tutor: van Griensven Docent: van den Biggelaar Gemaakt door Thomas Muller en Paul van der Linden Pagina 1 van

Nadere informatie

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn. Objectgeoriënteerd PHP (versie 5) Kennisvereisten: Ervaring met programmeren in PHP met MySQL Je weet wat een class of klasse is Je weet wat een instantie van een klasse (een object) is Je weet wat een

Nadere informatie

#Stap 1 Uw account activeren en inloggen

#Stap 1 Uw account activeren en inloggen Inhoud #Stap 1 Uw account activeren en inloggen... 2 #Stap 2 Een test dossier aanmaken... 3 #Stap 3 Uw overzichtspagina... 3 #Stap 4 Het Dashboard... 4 #Optie 1 Bekijken... 4 #Optie 2 Wijzigen... 5 #Optie

Nadere informatie

PHP. Les 4 : Variabelen

PHP. Les 4 : Variabelen PHP Les 4 : Variabelen Interessante links: o http://www.dbzweb.be/moermant/ o http://php.net/manual/en/function.echo.php o http://www.w3schools.com/php/default.asp Wat zijn variabelen? Variabelen zijn

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Lab Webdesign: Javascript 25 februari 2008

Lab Webdesign: Javascript 25 februari 2008 H4: FUNCTIES We zullen in dit hoofdstuk zien hoe we functies moeten maken, aanroepen, argumenten doorgeven en waarden retourneren. Ook zullen we het hebben over het begrip "recursie", en laten zien hoe

Nadere informatie

Handleiding bij de Booktest Generator

Handleiding bij de Booktest Generator Handleiding bij de Booktest Generator Het programma voor het maken van toetsen bij boeken. (c) 2005/2009 Visiria Uitgeversmaatschappij Twisk Inleiding Onze dank voor het aanvragen van de Booktest Generator.

Nadere informatie

Een database gebruiken

Een database gebruiken Een database gebruiken In een vorige handleiding heb ik laten zien hoe je met Scratch soortgelijke gegevens kunt opslaan in een lijst om deze op een later moment weer op te halen. Als voorbeeld las ik

Nadere informatie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

Nadere informatie

Bijlage Inlezen nieuwe tarieven per verzekeraar

Bijlage Inlezen nieuwe tarieven per verzekeraar ! Bijlage inlezen nieuwe tarieven (vanaf 3.2) Bijlage Inlezen nieuwe tarieven per verzekeraar Scipio 3.303 biedt ondersteuning om gebruikers alle tarieven van de verschillende verzekeraars in één keer

Nadere informatie

Ik zal je nu stap voor stap laten zien hoe je je product op je website als betaalde download kunt aanbieden.

Ik zal je nu stap voor stap laten zien hoe je je product op je website als betaalde download kunt aanbieden. Inleiding Als je producten op je website wilt verkopen maar je wilt niet meteen een hele webshop optuigen, dan kan dit ook eenvoudiger. Er is een manier om snel en gemakkelijk producten op je website te

Nadere informatie

Simon de schildpad. 2015 J van Weert 1

Simon de schildpad. 2015 J van Weert 1 Programmeren met Simon Simon de schildpad 2015 J van Weert 1 Inleiding: Wat is programmeren eigenlijk? Een computer doet niets zonder een programma. Die programma s worden geschreven door mensen: programmeurs.

Nadere informatie

Lab Webdesign: Javascript 7 april 2008

Lab Webdesign: Javascript 7 april 2008 H8: FORMULIEREN In dit hoofdstuk komt het "form"-object aan de orde: we zullen zien hoe we JavaScript kunnen gebruiken voor het manipuleren en valideren van de gegevens die een eindgebruiker invult in

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

Opzetten van een evenement

Opzetten van een evenement Opzetten van een evenement Inhoud Begrippenlijst... 3 Voor het evenement... 4 De wizard doorlopen:... 4 Wizard pagina: Welkom bij event-timing.nl... 4 Wizard pagina: Evenement gegevens... 4 Wizard pagina:

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

ChainWise digitaal factureren

ChainWise digitaal factureren ChainWise digitaal factureren Product ChainWise Bedrijfssoftware Jaar 2016 Alle rechten voorbehouden aan ChainWise Niets in deze uitgave mag worden gebruikt in welke vorm dan ook zonder schriftelijke toestemming

Nadere informatie

CS-WebDesign.nl. Invoeren van een product in de editor

CS-WebDesign.nl. Invoeren van een product in de editor CS-WebDesign.nl Invoeren van een product in de editor 2005-2012 Courbois Software Beuningen Fazantlaan 63, 6641 XW Beuningen. www.courboissoftware.com & www.cs-webdesign.nl 024 677 25 46 - [email protected]

Nadere informatie

Quick Guide VivianCMS

Quick Guide VivianCMS Quick Guide VivianCMS Contactformulier creëren Versie: 1.0 Startdatum: 24 juli 2006 Datum laatste wijziging: 24 juli 2006 Opmerking: Gepubliceerd op http://www.viviancms.nl Inhoud 1 Inleiding...3 1.1 Contactformulier

Nadere informatie

Handleiding RS Form! 1.0.4

Handleiding RS Form! 1.0.4 Handleiding RS Form! 1.0.4 Inhoud 1. Controlepaneel... 3 2. Forms Manager... 4 2.1 Nieuwe form aanmaken... 4 2.2 Nieuwe fields toevoegen... 7 2.3 Wijzigen/verwijderen bestaande Forms, Fields... 10 Versie

Nadere informatie

HANDLEIDING TRACK & 1. Track & Trace e-mails bewerken 2. 1.1 Algemeen 3 1.2 E-mails 3 1.3 E-mails bewerken 4 1.4 Triggers 4 1.5 Beschikbare Tags 5

HANDLEIDING TRACK & 1. Track & Trace e-mails bewerken 2. 1.1 Algemeen 3 1.2 E-mails 3 1.3 E-mails bewerken 4 1.4 Triggers 4 1.5 Beschikbare Tags 5 HANDLEIDING TRACK & INHOUDSOPGAVE Trigger Based Track & Trace e-mails 1. Track & Trace e-mails bewerken 2 1.1 Algemeen 3 1.2 E-mails 3 1.3 E-mails bewerken 4 1.4 Triggers 4 1.5 Beschikbare Tags 5 2. Track

Nadere informatie

v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen

v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen Inhoud Algemene informatie...3 Voor wie is deze handleiding?...3 Voordat u begint...3 Pagina beheer...4 Pagina aanmaken...4 Pagina wijzigen...4

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

Hosting. Bestelformulier en domeinnaamcontrole. Januari, 2013. WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland. w: www.wefact.nl e: helpdesk@wefact.

Hosting. Bestelformulier en domeinnaamcontrole. Januari, 2013. WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland. w: www.wefact.nl e: helpdesk@wefact. Hosting Januari, 2013 Bestelformulier en domeinnaamcontrole WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland w: www.wefact.nl e: [email protected] Introductie Algemeen In deze handleiding wordt uitgelegd

Nadere informatie

Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010

Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010 4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen. 4.1 Starten met MS Access Als je het programma Microsoft Access

Nadere informatie

Handleiding Wordpress CMS 4-5-2015

Handleiding Wordpress CMS 4-5-2015 Handleiding Wordpress CMS 4-5-2015 Inhoud 1. Het dashboard.... 3 2. Een pagina of bericht aanpassen.... 5 3. Een nieuw bericht toevoegen... 6 4. Een pagina maken... 7 5. Website met sitebuilder... 8 6.

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

Een spoedcursus python

Een spoedcursus python Een spoedcursus python Zoals je in de titel misschien al gezien hebt, geven wij een spoedcursus Python. Door deze cursus leer je alle basics, zoals het rekenen met Python en het gebruik van strings. Het

Nadere informatie

Quickstart handleiding

Quickstart handleiding Inleiding Allereerst hartelijk bedankt voor het aanschaffen van. U heeft met deze aankoop een goede keuze gemaakt voor een zeer professionele E-mail marketing tool. In deze quickstart handleiding zullen

Nadere informatie