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
PHP
Beginnershandleiding
Inhoudsopgave
3
Inhoudsopgave
VOORWOORD .......................................................................................................................................................... 1
1.
INLEIDING ........................................................................................................................................................ 5
Wat
is
PHP? ................................................................................................................................................................................. 5
Voorkennis................................................................................................................................................................................... 5
Wat
heb
ik
nodig?..................................................................................................................................................................... 5
2.
MIJN
EERSTE
PHP
SCRIPT ........................................................................................................................... 6
Ons
eerste
PHP
bestand ......................................................................................................................................................... 6
Alternatieve
open
en
sluittags........................................................................................................................................... 7
Echo ................................................................................................................................................................................................ 7
3.
VARIABELEN.................................................................................................................................................... 8
Aanmaken
van
variabelen.................................................................................................................................................... 8
Verschillende
typen
variabelen .......................................................................................................................................... 8
Commentaar ............................................................................................................................................................................... 8
Naamgeving................................................................................................................................................................................ 9
Variabelen
buiten
quotes ...................................................................................................................................................... 9
Rekenen
met
variabelen ......................................................................................................................................................10
4.
STATEMENTS ................................................................................................................................................ 11
If/else
statements ...................................................................................................................................................................11
Switch
statement ....................................................................................................................................................................13
5.
LOOPS .............................................................................................................................................................. 15
While ............................................................................................................................................................................................15
For .................................................................................................................................................................................................15
6.
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..................................................................................................................................................................................23
7.
FUNCTIES ........................................................................................................................................................ 25
Zelf
functies
schrijven ...........................................................................................................................................................25
Functies
zonder
parameters..............................................................................................................................................25
Functies
met
parameters ....................................................................................................................................................26
Meer
functies... .........................................................................................................................................................................26
Een
controle
functie...............................................................................................................................................................27
Optionele
parameters:
BTW? ............................................................................................................................................28
8.
FORMULIEREN .............................................................................................................................................. 30
DE
HTML
CODE .........................................................................................................................................................................30
VERWERKING
VAN
HET
FORMULIER:
DE
CODE .....................................................................................................................30
VERWERKING
VAN
HET
FORMULIER:
DE
UITLEG ..................................................................................................................32
1.
Controleren
of
een
formulier
gepost
is .....................................................................................................................32
2.
Controleren
of
de
vereiste
velden
ingevuld
zijn....................................................................................................32
3.
Eventuele
andere
controles
op
de
velden
uitvoeren ...........................................................................................33
4.
Geen
errors?
Gegevens
verwerken..............................................................................................................................33
5.
Wel
errors?
Fouten
weergeven
en
terug
naar
formulier..................................................................................33
UITBREIDEN
VAN
HET
FORMULIER .........................................................................................................................................34
4
PHP
Beginnershandleiding
VERWERKING
VAN
HET
UITGEBREIDE
FORMULIER ............................................................................................................. 35
9.
SUPERGLOBALS ............................................................................................................................................38
$_GET.......................................................................................................................................................................................... 38
$_POST ....................................................................................................................................................................................... 39
$_FILES ...................................................................................................................................................................................... 39
$_SERVER ................................................................................................................................................................................. 40
$_SESSION ................................................................................................................................................................................ 41
$_COOKIE.................................................................................................................................................................................. 41
Cookies
aanmaken ................................................................................................................................................................. 42
Uitlezen
van
de
cookie..........................................................................................................................................................42
$_REQUEST .............................................................................................................................................................................. 42
10.
SESSIES
NADER
BEKEKEN:
EEN
EERSTE
LOGINSCRIPT.................................................................43
DE
HTML
CODE ......................................................................................................................................................................... 43
HET
PHP
SCRIPT ....................................................................................................................................................................... 43
DE
BEVEILIGDE
PAGINA ............................................................................................................................................................ 46
11.
NETJES
SCRIPTEN ......................................................................................................................................47
INSPRINGEN ................................................................................................................................................................................ 47
COMMENTAAR ............................................................................................................................................................................ 49
12.
DEBUGGEN:
HET
OPLOSSEN
VAN
PHP
FOUTEN...............................................................................50
Regels
toegevoegd
maar
geen
fouten
te
zien?...........................................................................................................50
DEBUGGEN .................................................................................................................................................................................. 50
Parse
error ................................................................................................................................................................................51
Undefined
variable ................................................................................................................................................................51
Undefined
index ......................................................................................................................................................................52
Parse
errors:
unexpected
$end .........................................................................................................................................53
Header
already
sent ..............................................................................................................................................................53
Ik
krijg
niets
te
zien? .............................................................................................................................................................54
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
WAMP1.
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
PDT2.
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:
http://www.wampserver.com
2
Download:
http://www.eclipse.org/pdt
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:
Code
1. 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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Mijn eerste php script!
Bovenstaande
code
is
een
voorbeeld
van
hoe
een
webpagina
opgebouwd
wordt.
Zoals
je
wellicht
al
wist
bestaat
een
HTML
pagina
altijd
uit
,
en
tags.
In
de
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:
Output
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
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:
2.
Mijn
eerste
PHP
script
7
Code
1. 2. 3. 4. 5. 6. 7. 8. 9.
Mijn eerste php script! Hello World!
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
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
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.
Code
1. 2. 3. 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:
Output
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:
Code
1. 2. 3. 4. 5. 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:
3.
Variabelen
9
Code
1. 2. 3. 4. 5. 6. 7. 8. 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.
Code
1. 2. 3. 4. 5. 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'.
Code
1. 2. 3. 4. 5. 6.
'; // FOUT echo 'Dit is de welkomsttekst: '.$sWelkomstTekst.'
'; // GOED ?>
Output
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
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
'; echo $x.$y.$z; ?>
Output
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
'; $fBtw = $fSubtotaal * 0.19; $fTotaal = $fSubtotaal + $fBtw; echo 'Totaal: '.$fTotaal; ?>
Output
Subtotaal:
99.5
Totaal:
118.405
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.net1.
1
Zie
http://www.php.net/operators,
onder
‘arithmic
operators’
4.
Statements
11
4. 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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 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.
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
5) { echo $x.' is groter dan 5'; } else { echo $x.' is niet groter dan 5'; } ?>
Output
4
is
niet
groter
dan
5
Allereerst
kennen
we
de
waarde
4
aan
de
variabele
$x
toe.
Vervolgens
controleren
we
in
het
if‐ statement
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
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
5) { echo $x.' is groter dan 5'; } elseif($x == 5) { echo $x.' is precies 5'; } else { echo $x.' is niet groter dan 5'; } ?>
Output
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9.
5 && $y < 10) { echo '$x is groter dan 5 en $y is kleiner dan 10'; } ?>
Output
$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
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
5)) { echo $x.' is niet groter dan 5'; } else { echo $x.' is groter dan 5'; } ?>
Output
4
is
niet
groter
dan
5
Nu
zien
we
dat
het
if‐statement
een
waarheid
oplevert
en
dus
uitgevoerd
wordt.
Het
!
in
het
if‐ statement
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:
Code
1. 2. 3. 4. 5. 6.
Een
overzicht
met
alle
soorten
operators
is
te
vinden
op
php.net1.
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
is gelijk aan 0'; is gelijk aan 1'; is gelijk aan 2'; voldoet niet aan een van de genoemde voorwaarden';
Output
$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
http://www.php.net/operators
onder
‘comparison
operators’
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
10 : echo '$x is groter dan 10'; break; case $x == 10 : echo '$x is gelijk aan 10'; break; case $x < 10 : echo '$x is kleiner dan 10'; break; default : echo '$x voldoet niet aan een van de genoemde voorwaarden'; } ?>
Output
$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.
5.
Loops
15
5. 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:
Code
1. 2. 3. 4. 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:
Code
1. 2. 3. 4. 5. 6. 7. 8.
Output
1
2
3
4
5
6
7
8
9
10
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:
Code
1. 2. 3. 4. 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
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6.
Output
1
2
3
4
5
6
7
8
9
10
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
6. 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.
Code
1. 2. 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:
Code
1. 2. 3. 4.
'.print_r($aFruit, true).''; ?>
Output
Array ( [0] [1] [2] [3] )
=> => => =>
appel peer banaan 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
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6. 7. 8. 9.
10, 'peer' => 0, 'banaan' => 4, 'kiwi' => 12 ); echo '<pre>'.print_r($aFruitAantallen, true).''; ?>
Output
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:
Code
1. 2. 3. 4.
Output
Een
appel
is
lekker,
een
kiwi
wat
minder.
De
associatieve
array
kunnen
we
op
precies
dezelfde
manier
uitlezen:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9.
10, 'peer' => 0, 'banaan' => 4, 'kiwi' => 12 ); echo 'Ik heb '.$aFruitAantallen['appel'].' appels en '.$aFruitAantallen['banaan'].' bananen.'; ?>
Output
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:
6.
Arrays
19
Code
1. 2. 3. 4. 5. 6.
$sValue) { // Doe iets met $sKey en/of $sValue } ?>
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9.
Fruitsoorten:
'; foreach($aFruit as $sFruit) { echo $sFruit.'
'; } ?>
Output
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
10, 'peer' => 0, 'banaan' => 4, 'kiwi' => 12 ); echo '
Fruit en aantallen:'; foreach($aFruitAantallen as $sFruit => $iAantal) { echo $sFruit.': '.$iAantal.'
'; } ?>
Output
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
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:
Code
1. 2. 3. 4. 5. 6. 7.
'.print_r($aFruit, true).''; ?>
Output
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:
Code
1. 2. 3. 4. 5. 6. 7. 8.
'.print_r($aFruit, true).''; ?>
Output
Array ( [0] [1] [2] [3] )
=> => => =>
appel peer banaan 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:
6.
Arrays
21
Code
1. 2. 3. 4. 5. 6. 7. 8. 9.
'.print_r($aFruitAantallen, true).''; ?>
Output
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
array ( 'Westendorf', 'Gerlos', 'Kitzbühl', 'Mayerhofen' ), 'Zonvakantie' => array ( 'Curacao', 'Spanje', 'Italië', 'Brazilië' ) ); echo '<pre>'.print_r($aVakantieBestemmingen, true).''; ?>
22
PHP
Beginnershandleiding
Output
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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
array ( 'Westendorf', 'Gerlos', 'Kitzbühl', 'Mayerhofen' ), 'Zonvakantie' => array ( 'Curacao', 'Spanje', 'Italië', 'Brazilië' ) );
echo 'De wintersport in '.$aVakantieBestemmingen['Wintersport'][3].' was geweldig, maar ik ga volgend jaar toch liever naar '.$aVakantieBestemmingen['Zonvakantie'][1].'.'; 18. ?>
Output
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:
6.
Arrays
23
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
array ( 'Westendorf', 'Gerlos', 'Kitzbühl', 'Mayerhofen' ), 'Zonvakantie' => array ( 'Curacao', 'Spanje', 'Italië', 'Brazilië' ) ); foreach($aVakantieBestemmingen as $sSoort => $aLocaties) { echo '
'.$sSoort.''; foreach($aLocaties as $sLocatie) { echo $sLocatie.'
'; } } ?>
Output
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
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
'.print_r($aVakantieBestemmingen , true).''; ?>
Output
Array ( [Wintersport] => Array ( [0] => Westendorf [1] => Gerlos [2] => Kitzbühl [3] => Mayerhofen ) [Zonvakantie] => Array ( [0] => Curacao [1] => Spanje [2] => Italië [3] => Brazilië ) )
7.
Functies
25
7. 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:
Code
1. 2. 3. 4. 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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Output
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
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Output
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:
Code
1. 2. 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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
'; } // Functie aanroepen $sTekst = 'Hello World!'; geefWeer($sTekst); geefWeer('Een tweede tekst'); ?>
Output
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
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Output
$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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
3 && substr($sGebruikersnaam, 0, 1) != 'A') { echo 'Gebruikersnaam is goed'; } else { echo 'Gebruikersnaam ongeldig!'; } ?>
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
http://www.php.net/count
28
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
3 && substr($sGebruikersnaam, 0, 1) != 'A') { return true; } else { return false; } } // Functie aanroepen $sGebruiker = 'Joren'; if(checkGebruikersnaam($sGebruiker)) { echo 'Deze gebruikersnaam is geldig!'; } else { echo 'Ongeldige gebruikersnaam'; } ?>
Output
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
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
'; echo 'Totaal incl. BTW: '.calcTotaal($aBedragen, true).'
'; ?>
Output
Totaal
excl.
BTW:
50.35
Totaal
incl.
BTW:
59.92
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:
Code
1. 2. 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
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.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Mijn eerste formulier!
2. 3. 4. 5. 6. 7. 8. 9.
22. 23.
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
tags,
aangezien
dat
het
gedeelte
is
dat
op
het
scherm
weergegeven
wordt.
De
49. 50.
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
1950.
Vandaar
dat
we
ook
$i‐‐
gebruiken
om
de
waarde
van
$i
telkens
met
1
te
verlagen.
Een
werkend
voorbeeld
is
wederom
via
phphulp.jorendewit.nl1
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:
http://phphulp.jorendewit.nl/files/php_tutorial/formulier2.php
36
PHP
Beginnershandleiding
Code:
verwerk2.php
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:'; echo '
Voornaam: '.$aData['voornaam'].'
'; echo 'Achternaam: '.$aData['achternaam'].'
'; echo '
Geboortedatum: '.$sDatum.'
'; } else { // Fouten opgetreden: weergeven en terug naar formulier header('Refresh: 3; url=formulier2.php'); foreach($aErrors as $sError) { echo '
'.$sError.'
'; } } } else { // Verwerk.php mag nog niet bezocht worden, terug naar het formulier header('Location: formulier2.php'); } ?>
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.
Code
1. 2.
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
formuliercontrole1
Contactformulier
met
Swift
Mailer2
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:
http://phphulp.jorendewit.nl/view/34/
2
Directe
url:
http://phphulp.jorendewit.nl/view/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:
http://www.eensite.nl/index.php?show=bericht&id=10.
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
1. 2. 3. 4. 5. 6. 7. 8. 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:
Output
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:
9.
Superglobals
39
Output
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
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:
Output
Array ( [userfile] => Array ( [name] => sprinkhaan.jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\phpD23E.tmp [error] => 0 [size] => 45194 ) )
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
• • • • •
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
voorbeeld1.
$_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:
Code
1. 2. 3.
'.print_r($_SERVER, true).''; ?>
Output
Array ( [HTTP_HOST] => localhost [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11 [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-8859-1,utf-8;q=0.7,*;q=0.7 [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => mtrack=119762117M1932826833; 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\v2.0.50727 [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] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 127.0.0.1 [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] => 1199267859 )
Ik
zal
niet
elke
waarde
uit
deze
array
bespreken,
enkel
de
variabelen
die
je
regelmatig
gebruikt
zal
ik
kort
toelichten.
1
Directe
url:
http://phphulp.jorendewit.nl/view/12/
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
1. 2. 3. 4. 5. 6. 7. 8. 9.
Code:
pagina2.php
1. 2. 3. 4. 5. 6. 7.
Output
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
PHP
Beginnershandleiding
Cookies
aanmaken
Het
aanmaken
van
een
cookie
doen
we
met
de
functie
setcookie().
Code:
pagina1.php
1. 2. 3. 4. 5. 6. 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
1. 2. 3.
Output
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.
10.
Sessies
nader
bekeken:
een
eerste
loginscript
43
10. 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. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Mijn eerste loginscript! Inloggen
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.nl1
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:
http://phphulp.jorendewit.nl/files/php_tutorial/login_form.php
44
PHP
Beginnershandleiding
Code:
login.php
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 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.
Code
1. 2. 3. 4. 5. 6. 7. 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.
10.
Sessies
nader
bekeken:
een
eerste
loginscript
45
Code
1. 2. 3. 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.
Code
1. 2. 3. 4.
De
controle
of
de
benodigde
velden
wel
in
de
$_POST
array
aanwezig
zijn,
kan
hier
natuurlijk
ook
niet
ontbreken.
Code
1. 2. 3. 4. 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.
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 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
PHP
Beginnershandleiding
Code
1. 2. 3. 4. 5. 6. 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
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 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
1te
vinden.
De
gebruikersnaam
en
wachtwoord
zijn,
zoals
je
in
het
script
kunt
zien,
admin
en
voorbeeld.
1
Directe
url:
http://phphulp.jorendewit.nl/files/php_tutorial/login_form.php
11.
Netjes
scripten
47
11. 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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
$sValue){ $sValue = trim($sValue); if(empty($sValue)){ $aErrors[] = 'Je bent vergeten om '.$sKey.' in te vullen'; } $aData[$sKey] = $sValue; } if(empty($aErrors)){ echo '
Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:
'; echo '
Voornaam: '.$aData['voornaam'].'
'; echo 'Achternaam: '.$aData['achternaam'].'
'; }else{ header('Refresh: 3; url=formulier.php'); foreach($aErrors as $sError){ echo '
'.$sError.'
'; } } } ?>
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
PHP
Beginnershandleiding
Code
1. $sValue) 10. { 11. // Spaties aan begin en eind weghalen 12. $sValue = trim($sValue); 13. 14. // Controle of variabele gevuld is 15. if(empty($sValue)) 16. { 17. // Foutmelding toevoegen 18. $aErrors[] = 'Je bent vergeten om '.$sKey.' in te vullen'; 19. } 20. 21. // Ingevulde waarden aan data array toevoegen 22. $aData[$sKey] = $sValue; 23. } 24. 25. // Controleren of er geen fouten opgetreden zijn 26. if(empty($aErrors)) 27. { 28. // Formulier succes! 29. echo '
Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:
'; 30. echo '
Voornaam: '.$aData['voornaam'].'
'; 31. echo 'Achternaam: '.$aData['achternaam'].'
'; 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 '
'.$sError.'
'; 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:
Code
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Een
andere
standaard
die
ook
veel
gebruikt
wordt
is
deze:
11.
Netjes
scripten
49
Code
1. 2. 3. 4. 5. 6. 7. 8. 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
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:
Code
1. 2. 3. 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:
Output
[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.
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
Code
1. 2. 3. 4. 5. 6. 7.
Output
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
Code
1. 2. 3. 4. 5. 6.
Output
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
PHP
Beginnershandleiding
Code:
oplossing1
1. 2. 3. 4. 5. 6. 7.
Code:
oplossing2
1. 2. 3. 4. 5. 6. 7. 8. 9.
Undefined
index
Code
1. 2. 3. 4. 5. 6.
Output
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
1. 2. 3. 4. 5. 6. 7. 8. 9.
12.
Debuggen:
het
oplossen
van
PHP
fouten
53
Parse
errors:
unexpected
$end
Code
1. 2. 3. 4. 5. 6. 7. 8.
Output
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
if‐ statement
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
Code
1. 2. 3. 4. 5. 6. 7.
Output
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:
Code
1. 2. 3. 4. 5. 6. 7.
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
PHP1.
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:
http://phphulp.jorendewit.nl/view/35/
13.
Slotwoord
en
referenties
55
13. 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
⇒ http://www.php.net/
• Foutafhandeling
in
PHP
⇒ http://phphulp.jorendewit.nl/view/35/
• PHP
Contactformulier
met
Swift
Mailer
⇒ http://phphulp.jorendewit.nl/view/38/
• Filters
in
PHP
5
⇒ http://phphulp.jorendewit.nl/view/24/
HTML
• W3Schools
HTML
Tutorial
⇒ http://www.w3schools.com/html/default.asp
• W3Schools
XHTML
Tutorial
⇒ http://www.w3schools.com/xhtml/default.asp
CSS
• W3Schools
CSS
Tutorial
⇒ http://www.w3schools.com/css/default.asp
• Quirksmode
artikelen
over
CSS
⇒ http://quirksmode.org/css/contents.html
• Websitemaken.be
HTML
en
CSS
Tutorials
⇒ http://www.websitemaken.be/index.php?page=show_item&type=3&topic=1
Databases
&
SQL
• SQL
Beginners
handleiding
⇒ http://phphulp.jorendewit.nl/view/41/
• W3Schools
SQL
Tutorial
⇒ http://www.w3schools.com/sql/default.asp
• PDO
‐
Verbinden
met
verschillende
databases
⇒ http://phphulp.jorendewit.nl/view/27/
• MySQL
Handleiding
⇒ http://dev.mysql.com/doc/refman/5.1/en/
• PostgreSQL
Handleiding
⇒ http://postgresql.org/docs
Opmerkingen,
vragen
of
suggesties
over
deze
handleiding
zijn
natuurlijk
altijd
welkom!
Via
mijn
website
(http://phphulp.jorendewit.nl)
kun
je
je
reacties,
vragen
of
opmerkingen
kwijt.
O
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
28‐12‐2007,
http://www.phphulp.nl/php/tutorials/8/508/
Kapteijn,
A.
(z.d.).
PHP
Programmeren.
Geraadpleegd
op
27‐12‐2007,
http://04.ipublications.net/php‐programmeren.php
Mirax
(2007).
Een
uitgebreide
PHP
cursus.
Geraadpleegd
op
01‐01‐2008,
http://www.websitemaken.be/index.php?page=show_item&id=862
PHP.net
(z.d.).
PHP.net:
Documentation.
Geraadpleegd
op
27‐12‐2007,
http://www.php.net/docs.php