Welkom, Gast. Je bent niet ingelogd.

PHP cursus

Door Syncie op 24 Jun 2007, 13:55

Hey members,

We hebben besloten om deze PHP cursus te schrijven omdat we vaak code zien van erg lage kwaliteit.
We zullen dit bericht steeds verder uitbreiden, hieronder kan je reageren.

We gaan veel pratijk laten zien en dus geen moelijke theorie met veel moeilijke termen. We zetten ze er wel bij voor mensen die dat willen.

Deze blog wordt continu geupdate!

TIPS voor dingen die erbij moeten komen zijn meer dan welkom.

Groeten, Badeendje(Yannick), Basjee(Bas), BlackWhizz(Koen) en Syncie(Ivo).

--------------------------------------------------------------------------------------------------------
Inhoudsopgave:

  • [*]Hoofdstuk 1: De basis, PHP openen, PHP commentaar. (Moeilijkheid: 1/5)
  • [*]Hoofdstuk 2: Teksten op het scherm van de gebruiker laten verschijnen. (Moeilijkheid: 1/5)
  • [*]Hoofdstuk 3: Variabelen, wat kun je ermee? (Moeilijkheid: 1/5)
  • [*]Hoofdstuk 4: PHP-operators, Superglobals, functies en if-statements. (Moeilijkheid: 2/5)
  • [*]Hoofdstuk 5: Array\'s, ze aanmaken, behandelen en uitlezen. (Moeilijkheid: 2/5);
  • [*]Hoofdstuk 6: Functies(Moeilijkheid: 2/5)
  • [*]!Hoofdstuk 7: GDlib(Moeilijkheid: 3/5)
  • [*]Hoofdstuk 8: Loops en lussen(Moeilijkheid(2/5)
  • [*]!Hoofdstuk 9: Queries(Moeilijkheid: 3/5)
  • [*]!Hoofdstuk 10: Een stukje praktijk(Een eigen gastenboek maken)(Moeilijkheid: 3/5)
  • [*]!Hoofdstuk 11: Reguliere expressies(Moeilijkheid: 5/5)
  • [*]!Hoofdstuk 12: Snelheid, geheugengebruik en veiligheid binnen een script(Moeilijkheid: 3/5)
  • [*]!Hoofdstuk 13: Queries, een beetje verder(Joins)(Moeilijkheid: 4/5)
  • [*]!Hoofdstuk 14: OOP: Classes voor PHP 4(Moeilijkheid: 5/5)
  • [*]!Hoofdstuk 15: OOP: Classes voor PHP 5(Moeilijkheid: 5/5)


--------------------------------------------------------------------------------------------------------

Hoofstuk 1:

Hier begint het, de PHP cursus. Je moet natuurlijk (x)HTML kunnen voordat je hieraan begint. JavaScript is een pré.

Als eerste moet je weten hoe je PHP opent, er zijn veel manieren voor maar er is eigenlijk maar 1 manier die altijd werkt zonder problemen en dat is:

1
2
<?php
?>

Andere manieren werken vaak maar op een beperkt aantal servers en dat willen we niet. Ons doel is om een website/applicatie te schrijven die op zoveel mogelijk servers werkt.

Als je een website/applicatie gaat schrijven is het erg belangrijk om netjes en overzichtelijk te scripten. Het is de bedoeling dat andere scripters snel kunnen kijken wat jou script doet en waarvoor de code dient. Als eerste gebruiken we veel enters en tabs, natuurlijk geen onnodige enters en tabs. Ten tweede schrijven we steeds kleine stukjes uitleg bij de code, dit wordt commentaar genoemd. PHP kent 3 vormen van commentaar. Hieronder ga ik die laten zien:

1
2
3
4
5
6
7
8
9
10
11
12
<?php

// Dit is commentaar, dit past op 1 regel.

# Dit is ook commmentaar en dit past ook op 1 regel.

/*
    Dit is commentaar dat op meerdere lijnen toepasbaar is.
    Natuurlijk zal je dit commentaarblok ook moeten sluiten, dit doen we hieronder.
*/

?>

Dit waren de 3 vormen van commentaar. Als eerste openen we PHP, daarna komen de eerste 2 vormen van commentaar die op 1 regel kunnen. Daarna komt een commentaarvorm die op meerdere regels kan.

--------------------------------------------------------------------------------------------------------
Hoofstuk 2:

Als je aan het PHP\'en bent moet je natuurlijk dingen aan de gebruiker laten zien. PHP kent hier 2 language constructs voor: echo en print. Het woord language constructs mag je lijk weer vergeten.
Hieronder zal je zien hoe echo en print werken.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

echo \'Hello world!
<br />\';
/* Met echo geven we aan dat we iets willen laten zien.
Met die \' geven we aan dat alles wat daarna komt op het scherm van de gebruiker moet komen.
De \' daarna geeft aan einde echo. En de ; geeft aan einde regel.

Het is nu wel belangrijk dat je geen \' gebruikt tussen de \'\', anders denkt PHP dat je de echo afsluit.
Als je toch een \' wilt laten zien moet je die escapen, dit betekend een backslash ervoor zetten.
Dat zal je in het volgende voorbeeld zien.
*/

print \'Hello again!\';

?>

Nu ziet de gebruiker:
1
2
Hello world!
Hello again!

We hadden het net over escapen, daar is dit een goed voorbeeld van:
1
2
3
4
5
6
<?php

echo \'Ik heb wel 1000 DVD\'s\';
// Dit is fout, we hebben de \' niet ge-escaped.

?>

1
2
3
4
5
6
<?php

echo \'Ik heb wel 1000 DVD\\\'s\';
// Dit is goed we hebben de \' ge-escaped.

?>

Dit waren de 2 manieren om iets te laten zien aan de gebruiker, we gebruiken er maar 1 en dat is echo. Dat komt omdat echo sneller is dan print.
Natuurlijk kun je ook (x)HTML gebruiken. Daar een voorbeeldje van:
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
<?php

echo \'
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">

<html xmlns=\"http://www.w3.org/1999/xhtml\">

    <head>
    
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />
        <meta name=\"author\" content=\"\" />
        <meta name=\"description\" content=\"\" />
        <meta name=\"keywords\" content=\"\"  />
        <meta name=\"robots\" content=\"index, follow\" />
        
        <title>PHP pagina</title>        
        
    </head>
    
    <body>
        
        Deze pagina wordt ge-echoëd door PHP.    
                    
    </body>
    
</html>\';

?>

--------------------------------------------------------------------------------------------------------
Hoofstuk 3:

PHP kent net zoals veel programmeer/scripttalen variabelen. Dit zijn stukjes geheugen waar je iets in kunt plaatsen.
We maken hier gebruik van een voorbeeld omdat er niet veel aan uit te leggen valt.

1
2
3
4
5
6
7
8
9
<?php

$variabele    =    \'Hallo bezoeker.\';
// Creeër een variabele.

$variabele2    =    2;
// Creeër nog een variabele.

?>

We hebben hierboven 2 variabelen aangemaakt. De bovenste bevat nu Hallo bezoeker. Als je wilt aangeven dat er een variabele komt zal je altijd eerst een $ moeten plaatsen, daarna de naam van de variabele. Als je de variabele inhoud wilt geven zal je een = en dan \'\'; moeten plaatsen. Dan kan je daartussen een tekst plaatsen.
Hierop heb je 2 uitzonderingen:
1. Getallen, om getallen hoeven geen quotes, maar dit mag wel.
2. variabelen, om variabelen hoeven geen quotes.
Voorbeeld:
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
<?php

$nummer        =    50;
// Deze variabele bevat nu 50

$nummer2    =    $nummer;
// Deze veriable bevat nu de inhoud van $nummer.

$nummer3    =    \'$nummer2\';
// Deze variabele bevat nu $nummer2 en NIET de inhoud van $nummer 2, dit komt omdat er \'\' om de variabele heen staan.

$nummer4    =    \'\' . $nummer2 . \'\';
/* Dit zal wel weer werken.
Als je al 2 quotes hebt geopend en je weil er een variabele tussen zetten kan je dit zo doen: Je zet tussen de quotes \' . $variabele . \'.
Omdat dit misschien wat onduidelijk is komt hieronder een duidelijker voorbeeld: */

$nummer5    =    \'Nummer: \' . $nummer2  . \', dit was het nummer.\';
// Dit maakt het misschien wat duidelijker.

$nummer6    =    $nummer2 . \', dit was het nummer.\';
// Dit zal ook werken.

$nummer7    =    \'Het nummer is: \' . $nummer2;
// Dit zal ook werken.

$variabele    =    true;
// De variabele is true(Waar), omdat true een boolean is hoeven er GEEN quotes omheen.

$variabele2    =    false;
// De variabele is false(Niet waar), omdat false een boolean is hoeven er geen quotes omheen.

$variabele3    =    null;
// Totaal niks, null!

unset($variabele);
// Verwijder de variabele.

?>

Zoals je hebt gezien zijn er dus veel opties mogelijk met variabelen. Een variabele op het scherm van de gebruiker laten zien werkt net zoals het voorbeeld hierboven:

1
2
3
4
5
6
7
<?php

$naam        =    \'Jan\';
$leeftijd    =    16;

echo \'Hallo, ik ben \' . $naam . \' en ik ben \' . $leeftijd . \' jaar oud.\';
?>

Variabelen kun je steeds groter maken(Uitbreiden), dit laten we je zien d.m.v een voorbeeld:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

$variabele    =    \'Hallo, \';
// Creeër de variabele.

$variabele    .=    \'ik\';
// De waarde ik toevoegen, die . voor die = geeft aan dat we de variabele uit willen breiden. Die . zou ook een + kunnen zijn dus += maar wij gebruiken altijd .=, dit komt omdat += bij het rekenen met variabelen ook optellen kan zijn. Daarover lees je straks meer.

$variabele    .=    \'ben\';

$variabele    .=    \'Jan.\';

echo $variabele;

?>

Het bovenstaande voorbeeld zal dit laten zien: Hallo, ik ben Jan.

Ook kun je met PHP rekenen, daarvan hieronder een voorbeeld waarin (bijna) alle vormen voorkomen:

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
<?php

$getal    =    100;
// Creeër de variabele, we hebben geen quotes omdat het een getal is, dan is het niet verplicht.

$getal    =    $getal + 50;
// We zeggen hier de waarde van $getal + 50. Quotes zijn wederom niet verplicht omdat we met getallen werken. 100 + 50 = 150

$getal    +=    50;
// We zeggen hier exact hetzelfde als de veriable hierboven, alleen dan sneller. 150 + 50 = 200

$getal    =    $getal - 100;
// Spreekt voor zich. 200 - 100 = 100

$getal    -=    25;
// 100 - 25 = 75

$getal    =    $getal / 3;
// Gedeeld door. 75 / 3 = 25

$getal    /=    5;
// Zelfde als hierboven. 25 / 5 = 5

$getal    =    $getal * 20;
// Keer 5 * 20 = 100

$getal    *=    2;
// Zelfde als hierboven. 100 * 2 = 200

echo $getal . \'
<br />\';
// Zo, de gebruiker zie nu(Als we kunnen tellen) 200 op het scherm. En een entertje, zo kunnen we de volgende uitkomsten ook laten zien.

// Nu komt het moeilijkere deel, we gaan gebruik maken van PHP functies om wortels en machten te berekenen en pi te verkrijgen.

$nieuwGetal        =    pow(5, 10);
// Je ziet nu dat we de functie pow() gebruiken met 2 parameters. pow betekendt macht, we gaan dus met machten werken. De 5 is het getal waarover een macht heen moet komen en 10 is de macht. Het bovenste stukje betekend dus 5 tot de macht 10(5 ^ 10). Helaas kent PHP 5 ^ 10 niet, daarom gebruiken we pow.

echo $nieuwGetal . \'
<br />\';
// De gebruiker ziet nu: 9765625 en een entertje.

$nogEenGetal    =    sqrt(9);
// De wortel van 9.

echo $nogEenGetal . \'
<br />\';
// De gebruiker ziet nu: 3 en een entertje.

echo pi() . \'
<br />\';
// Laat pi zien en een entertje.

?>

--------------------------------------------------------------------------------------------------------
Hoofstuk 4:

Operators

Je hebt verschillende operators
== Is gelijk aan
!= Is niet gelijk aan
=== Is gelijk aan met spellingscontrole
!== Is niet gelijk aan met spellingscontrole
> Groter dan
< Kleiner dan
>= Groter dan of gelijk aan
<= Kleiner dan of gelijk aan

Voorbeeld;

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
<?php

$a    =    5;
$b    =    5;

if($a > $b){
    
    echo $a . \' is groter dan \' . $b;
    
}elseif($a < $b){
    
    echo $a . \' is kleiner dan \' . $b;
    
}elseif($a != $b){
    
    echo $a . \' is niet gelijk aan \' . $b;
    
}elseif($a == $b){
    
    echo $a . \' is gelijk aan \' . $b;
    
} 
 
/* Uitkomst:
5 is gelijk aan 5
*/

?>

&& And (en)
|| OR (of)

Deze twee operators zijn erg handig omdat het veel code kan schelen.

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
<?php

/*
Stel:
Je wilt kijken of $a groter is dan $b of als $b groter is dan $a .
Dan zou je het zo doen:
*/
 
if($a > $b){
    
    $uitkomst        =    $a . \' is groter dan \' . $b;

}

if($b > $a){
        
        $uitkomst    .=    $b . \' is groter dan \' . $a;
}

echo $uitkomst;
 
// Maar dit kan ook korter:

if($a > $b || $b > $a){
    
    $uitkomst    .=    $a . \' is groter dan \' . $b . \' of andersom!\';
    
}

echo $uitkomst;

?>

PHP kent ook een \"speciale\" vorm van variabelen, dit zijn Superglobals. Deze zal je altijd nodig hebben bij user-input(Dingen die de gebruiker naar jouw systeem verstuurd).

Een lijstje met belangrijke Superglobals:

1
2
3
4
5
6
$_GET
$_POST
$_SERVER
$_COOKIE
$_SESSION
$_FILES

$_GET
Met deze superglobal kan je informatie uit de URL halen.
Voorbeeld:

1
2
3
4
5
6
7
8
9
10
11
<?php

/*
Stel we gaan naar deze URL: http://www.site.nl/index.php?naam=Jan
En we willen de inhoud van ?naam= laten zien
*/

echo \'Hallo \' . $_GET[\'naam\'];
// Nu zie je: Hallo Jan

?>

Dit voorbeeldje laat goed zien hoe $_GET werkt MAAR is totaal onveilig. Mensen kunnen nu HTML en JavaScript invoeren in de URL en daarmee fouten dingen doen, dit is vooral belangrijk voor laten. We zullen gebruik moeten maken van de PHP-functie htmlentities.

1
2
3
4
5
6
7
8
9
10
11
<?php

/*
Stel we gaan naar deze URL: http://www.site.nl/index.php?naam=Jan
En we willen de inhoud van ?naam= laten zien
*/

echo \'Hallo \' . htmlentities($_GET[\'naam\'], ENT_QUOTES);
// Nu zie je: Hallo Jan

?>

De functie htmlentities zorgt dat alle HTML naar gewone tekst zal worden veranderd. Nu zie je achter $_GET[\'naam\'], ENT_QUOTES staan. Dit is een parameter, met deze parameter geef je aan dat enkele EN dubbele quotes beveiligd moeten worden, dit is de beste manier op Javascript en HTML tegen te gaan. Maar stel nu dat ze hierheen gaan: http://www.site.nl/index.php en het bovenstaande script wordt uitgevoerd. Dan gaat het fout want $_GET[\'naam\'] bestaat niet! We zullen dus moeten controleren om $_GET[\'naam\'] bestaat. En natuurlijk moeten we ook kijken of die leeg is.

Voorbeeld:

1
2
3
4
5
6
7
8
9
10
<?php

if(isset($_GET[\'naam\'])){
    // Controleer of $_GET[\'naam\'] bestaat.
    
    // Doe dit
    
}

?>

Zo daar gebeurt een hele hoop:
als $_GET bestaat doe dit
De PHP-functie isset bestaat uit de woorden is en set dus met isset kijk je of een variabele gezet is. Alles wat tussen de { } komt zal worden uitgevoerd als $_GET[\'naam\'] gezet is.

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
<?php

if(isset($_GET[\'naam\'])){
    // Controleer of $_GET[\'naam\'] bestaat.
    
    echo \'Naam in de URL bestaat!
    <br />\';
    // Vertel de gebruiker dat $_GET[\'naam\'] bestaat.
    
    if(empty($_GET[\'naam\'])){
        // Als $_GET[\'naam leeg is.
        
        echo \'Maar helaas heb je je naam leeg gelaten.
        <br />\';
        
    }else{
        // Als niet aan de if-voorwaarde wordt voldaan, dus als $_GET[\'naam\'] niet leeg is.
        
        echo \'Goedzo! Je hebt je naam ingevuld.
        <br />
        Jij bent: \' . htmlentities($_GET[\'naam\'], ENT_QUOTES) . \'.
        <br />
        Of niet?\';
        
    }
    
}else{
    // Als niet aan de if voorwaarde wordt voldaan
    
    echo \'Naam in de URL bestaat net!
    <br />\';
    
}

?>

Nu hebben we gecontroleerd of de ?naam= bestaat en of er iets is ingevuld. Hieronder komt er nog een uitgebreider voorbeeld:

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
<?php

if(isset($_GET[\'naam\'])){
    // Controleer of $_GET[\'naam\'] bestaat.
    
    echo \'Naam in de URL bestaat!
    <br />\';
    // Vertel de gebruiker dat $_GET[\'naam\'] bestaat.
    
    if(!empty($_GET[\'naam\'])){
        /* Als $_GET[\'naam NIET leeg is.
        BELANGRIJK:
        Dat ! aan het begin betekend NIET dus er staat: Als NIET is leeg $_GET[\'naam\']
        */    
        
        if($_GET[\'naam\'] == \'Yannick\'){
            // Als $_GET[\'naam\'] Yannick is! Let op de ==, dus 2x = in plaats van 1.
            
            echo \'Hey Yannick!\';
            
        }elseif($_GET[\'naam\'] == \'Bas\'){
            // Als $_GET[\'naam\'] geen Yannick is maar wel Bas!
            
            echo \'Hey Bas!\';
            
        }elseif($_GET[\'naam\'] == \'Ivo\'){
            // Als $_GET[\'naam\'] geen Yannick is, geen Bas is maar wel Ivo.
            
            echo \'Hey Ivo!\';
            
        }else{
            // Als $_GET[\'naam\'] geen Yannick, Bas of Ivo is.
            
            echo \'Goedzo! Je hebt je naam ingevuld maar je bent niet 1 van ons!
            <br />
            Jij bent: \' . htmlentities($_GET[\'naam\'], ENT_QUOTES) . \'.
            <br />
            Of niet?\';
            
        }
        
    }else{
        // Als niet aan de if-voorwaarde wordt voldaan, dus als $_GET[\'naam\'] niet leeg is.
        
        echo \'Maar helaas heb je je naam leeg gelaten.
        <br />\';
        
    }
    
}else{
    // Als niet aan de if voorwaarde wordt voldaan
    
    echo \'Naam in de URL bestaat niet!
    <br />\';
    
}

?>

Wat ook nog kan:

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
<?php

if(isset($_GET[\'naam\']) && !empty($_GET[\'naam\'])){
    /*
    Controleer of $_GET[\'naam\'] bestaat en NIET leeg is.
    Die ! zegt eigenlijk NIET! 
    Die && zegt en ook!
    Dus: als $_GET[\'naam\'] bestaat en ook $_GET[\'naam\'] NIET leeg is.
    */

    if($_GET[\'naam\'] == \'Yannick\'){
        // Als $_GET[\'naam\'] Yannick is! Let op de ==, dus 2x = in plaats van 1.
        
        echo \'Hey Yannick!\';
        
    }elseif($_GET[\'naam\'] == \'Bas\'){
        // Als $_GET[\'naam\'] geen Yannick is maar wel Bas!
        
        echo \'Hey Bas!\';
        
    }elseif($_GET[\'naam\'] == \'Ivo\'){
        // Als $_GET[\'naam\'] geen Yannick is, geen Bas is maar wel Ivo.
        
        echo \'Hey Ivo!\';
        
    }else{
        // Als $_GET[\'naam\'] geen Yannick, Bas of Ivo is.
        
        echo \'Goedzo! Je hebt je naam ingevuld maar je bent niet 1 van ons!
        <br />
        Jij bent: \' . htmlentities($_GET[\'naam\'], ENT_QUOTES) . \'.
        <br />
        Of niet?\';
        
    }
    
}else{
    // Als niet aan de if voorwaarde wordt voldaan
    
    echo \'Naam in de URL bestaat niet, of is leeg!
    <br />\';
    
}

?>

Wat ook nog kan:

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
<?php

if(!isset($_GET[\'naam\']) || empty($_GET[\'naam\'])){
    /*
    Deze if doet dit;
    Als $_GET[\'naam\'] NIET bestaat
    || betekend OF
    Of als $_GET[\'naam\'] leeg is
    */
        
    echo \'Naam in de URL bestaat niet, of is leeg!
    <br />\';
    
}else{
    // Als niet aan de if voorwaarde wordt voldaan
    
    if($_GET[\'naam\'] == \'Yannick\'){
        // Als $_GET[\'naam\'] Yannick is! Let op de ==, dus 2x = in plaats van 1.
        
        echo \'Hey Yannick!\';
        
    }elseif($_GET[\'naam\'] == \'Bas\'){
        // Als $_GET[\'naam\'] geen Yannick is maar wel Bas!
        
        echo \'Hey Bas!\';
        
    }elseif($_GET[\'naam\'] == \'Ivo\'){
        // Als $_GET[\'naam\'] geen Yannick is, geen Bas is maar wel Ivo.
        
        echo \'Hey Ivo!\';
        
    }else{
        // Als $_GET[\'naam\'] geen Yannick, Bas of Ivo is.
        
        echo \'Goedzo! Je hebt je naam ingevuld maar je bent niet 1 van ons!
        <br />
        Jij bent: \' . htmlentities($_GET[\'naam\'], ENT_QUOTES) . \'.
        <br />
        Of niet?\';
        
    }
    
}

?>

Het is erg belangrijk dat je dit snapt, dit zijn de hoofdlijnen van PHP!
Zorg dat je dit VOLLEDIG begrijpt voordat je doorgaat! Begrijp je dit niet, lees het dan nog een paar keer of stel je vraag.

$_POST
Met deze variabele kan je data uit formulier velden lezen. Als jij op www.saven.nl inlogt dat moet je je gebruikersnaam en wachtwoord invullen. Dan haalt het script van saven jouw gebruikernaam en wachtwoord op uit de $_POST variabele.

Het is belangrijk om te weten hoe pagina\'s worden aangeroepen. Je hebt een GET en een POST methode. GET gebruik je bijvoorbeeld bij het lezen van topics en POST bij het plaatsen van een reactie. Om te kunnen bepalen of de pagina op de GET of POST methode wordt aangeroepen zullen we gebruik moeten maken van de $_SERVER superglobal.
Dit laten we zien aan de hand van een voorbeeldje:

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

$form    =    \'<form method=\"post\" action=\"\' . htmlentities($_SERVER[\'PHP_SELF\'], ENT_QUOTES) . \'\">
<b>Geslacht:</b> Man: <input type=\"radio\" name=\"geslacht\" value=\"man\" /> Vrouw: <input type=\"radio\" name=\"geslacht\" value=\"vrouw\" />
<br />
<b>Naam:</b> <input type=\"text\" name=\"naam\" size=\"30\" maxlength=\"30\" />
<br />
<b>Leeftijd:</b> <input type=\"text\" name=\"leeftijd\" size=\"2\" maxlength=\"2\" />
<br/ >
<input type=\"submit\" value=\"Invoer verzenden\" />
</form>\';
/* We plaatsen het formulier in een variabele omdat we 3 keer dat formulier moeten laten zien, dat scheelt heel wat tekens.
Wat wel jammer is, is dat het wat geheugen kost van de server.

Alle invoer-velden hebben een naam, die naam gaan we straks gebruiken.

Omdat $_SERVER[\'PHP_SELF\'] aanpasbaar is door de bezoeker zullen we HTML en JavaScript moeten blokkeren uit veiligheidsoverwegingen. */


if($_SERVER[\'REQUEST_METHOD\'] == \'POST\'){
    /* Als de aanvraagmethode van deze pagina post is. $_SERVER[\'REQUEST_METHOD\'] bevat de aanvraagmethode.
    
    Het formulier is verzonden. We gaan als eerste kijken of het formulier NIET bewerkt is.
    Daarna gaan we kijken of alles is ingevuld.
    Daarna gaan we de info laten zien. */
    
    if(isset($_POST[\'geslacht\']) && isset($_POST[\'naam\']) && isset($_POST[\'leeftijd\'])){
        // Kijk of alle velden bestaan, zo niet, dan is er een ongeldig formulier gepost(Niet het formulier dat in $form staat dus).
        
        if(empty($_POST[\'geslacht\']) || empty($_POST[\'naam\']) || empty($_POST[\'leeftijd\']) || !ctype_digit($_POST[\'leeftijd\'])){
            /* Zoals je ziet kijken we of 1 of meer van de velden leeg is/zijn maar je ziet ook dat er iets nieuws bij is gekomen: ctype_digit.
            Met ctype_digit kijken we of iets een getal is zonder comma,s, exponenten e.d.
            Een leeftijd mag tenslott alleen*/
            
            // Er klopt iets niet in het formulier, we gaan kijken welke fout(en) is/zijn opgetreden en dan een foutmelding genereren.
            
            echo \'<b style=\"color:#FF0000\">De volgende fout(en) is/zij opgetreden:</b>
            <br />\';
            // Beginnen met de foutmelding.
            
            if(empty($_POST[\'geslacht\'])){
                
                echo \'Je hebt geen geslacht opgegeven.\';
                // Geef de foutmelding
                
            }
            // Kijk of het geslacht is opgegeven, zo niet geef een error.
            
            if(empty($_POST[\'naam\'])){
                
                echo \'Je hebt geen naam opgegeven.\';
                
            }
            // Zie vorig blok
            
            if(empty($_POST[\'leeftijd\'])){
                
                echo \'Je hebt geen leeftijd ingevuld.\';// Spreekt voor zich
                
            }elseif(!ctype_digit($_POST[\'leeftijd\'])){
                // Kijk of de leeftijd naast getallen ook andere tekens bevat.
                
                echo \'Een leeftijd mag alleen uit getallen bestaan\';
                
            }
            // Valideer de leeftijd.            
            
            
        }else{
            // Alles klopt
            
            if($_POST[\'geslacht\'] != \'man\' && $_POST[\'geslacht\'] != \'vrouw\'){
                // Kijk of het geslacht klopt, zo niet:
                
                $_POST[\'geslacht\']    =    \'Onbekend\';
                // Het geslacht is onbekend.
                
            }
            
            $_POST[\'leeftijd\']    =    (strlen($_POST[\'leeftijd\']) < 3 ? $_POST[\'leeftijd\'] . \'jaar\' : \'Te oud\');
            /*
            Dit is een moeilijke. Dit is een if-statement op 1 regel!
            Als je een if-statement in een variabele gebruikt doe je dit:
            $variabele    =    ();
            $variabele    =    (conditie ? als de conditie waar is(true) : als de conditie niet waar is(false))
            
            Dit is moeilijk om snel te zien, kijk hier dus goed naar! Mocht je het niet snappen, gewoon vragen!
            */
                            
            // De PHP-functie ucfirst zorgt ervoor dat de eerste letter van een variabele een hoofdletter wordt.
            echo \'Jij bent een \' . ucfirst($_POST[\'geslacht\']) . \'
            <br />
            Je naam is: \' . htmlentities($_POST[\'naam\'], ENT_QUOTES) . \'
            <br />
            En je bent \' . $_POST[\'leeftijd\'] . \'.\';
            // Moet je begrijpen, geen uitleg vereist.
                            
        }
        
    }else{
        
        echo \'<b style=\"color:#FF0000\">Er is een fout opgetreden:</b>
        <br />
        Het formulier is corrupt, probeer het hieronder nogmaals.
        <br />
        <br />
        \' . $form;
        
    }
        
}else{
    // De aanvraagmethode is GET, daaruit blijkt dat het formulier NIET verzonden is.
    
    echo \'Vul hieronder je gegevens in:
    <br />
    \' . $form;
    
}

?>

Ook dit is weer erg belangrijk! Ook nu zal je niet verder moeten gaan als je dit niet snapt!

$_SERVER
De $_SERVER superglobal beval heel veel nuttige informatie over de server en bezoeker. Een paar voorbeelden zijn dat je het IP van de bezoeker kunt zien, je kunt de URL compleet uitlezen, je kunt de bestandsnaam opvragen, je kunt de aanvraag-methode aanvragen, je kunt de browser e.d. van de bezoeker opvragen enz. Je kunt ook de bestands-naam ophalen, dit is makkelijk bij formulieren, dan hoef je geen niet-dynamische bestandsnaam in te vullen.

Een voorbeeldje van hoe je een IP laat zien:

1
2
3
4
5
6
7
<?php

echo htmlentities($_SERVER[\'REMOTE_ADDR\'], ENT_QUOTES);
/* $_SERVER[\'REMOTE_ADDR\'] bevat het IP, we plaatsen er htmlentities omheen vanwege de veiligheid, IP\'s zijn bevinvloedbaar!
Later gaan we IP\'s valideren in PHP 4 of hoger met reguliere expressies en in PHP 5.2.0 of hoger met filter_var. */

?>

Je ziet ook vaak dat mensen een heel klein beveiligingsscriptje maken met PHP, zo kunnen alleen mensen met een bepaald IP de website bezoeken.
Daarvan een voorbeelde:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

if($_SERVER[\'REMOTE_ADDR\'] == \'000.000.000.000\'){
    // Hier vergelijken we het IP van de bezoeker met het IP dat toegang heeft.
    
    echo \'Toegang\';
    
}else{
    
    echo \'Geen toegang\';
    
}

?>

Let wel op, het is niet waterdicht, mensen kunnen IP\'s namaken!
Zoals je ziet werkt dit voorbeeldje maar met 1 IP en we willen natuurlijk meerdere IP\'s kunnen toevoegen.
Dit zal gaan met array\'s die in hoofdstuk 5 aan de orde komen. Toch ga ik hieronder alvast een voorbeeldje geven.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

$ips    =    array(\'000.000.000.000\', \'111.111.111.111\', \'222.222.222.222\');
// De IP\'s die toegang hebben, voor meer informatie over die array: Ga naar hoofdstuk 5.

if(in_array($_SERVER[\'REMOTE_ADDR\'], $ips)){
    // Als het IP van de bezoeker voorkomt in de array heeft hij/zij toegang tot we website.
    
    echo \'Toegang\';
    
}else{
    
    echo \'Geen toegang\';
    
}

?>

Als je het bovenstaande voorbeeldje snapt kan je nu een simpel IP ban script maken, probeer dat maar eens voordat je verder gaat.

$_COOKIE
De bekende cookies, daarin kun je kleine hoeveelheden data op een computer van een bezoeker opslaan als hij of zij dat toelaat.
We beginnen gelijk met een voorbeeldje(Alweer):
Belangrijk:
We maken de variabele $content, ditt doen we omdat we cookies gaan plaatsen. PHP kent een belangrijke regel en die is: Eerst cookies/headers en dan pas tekst echoën! Veel PHP scripters kunnen dit niet, weten het niet, houden er geen rekening mee of zijn te lui om dit aan te pakken en gebruiken een slome manier om het op te lossen! Wij niet! Wij willen een goed functionerende en snelle website! Daarom houden we ons aan deze regel!
Dus eerst cookies en headers.
Dan echoen!

Daarom gebruiken we hier dus content, we slaan de teksten die we gaan laten zien tijdelijk op in een variabele die we later gaan echoën!
Gebruik deze manier bij elk script dat je maakt! Deze manier zullen we vanaf nu overal toepassen. Ook bij het gastenboek.

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
<?php

$content    =    null;

if(!isset($_COOKIE[\'bezocht\'])){
    
    if(!setcookie(\'bezocht\', \'ja\', time() + 3600*24*365, \'/\', $_SERVER[\'HTTP_HOST\'])){
        /* We proberen een cookie te plaatsen met de naam bezocht.
        De inhoud \"ja\".
        En de cookie moet voor 1 jaar geldig zijn op de root van onze website. 
        BELANGRIJK: time() geeft de huigide timestamp, met een timestamp kun je datums maken en kan je makkelijk rekenen met tijden! De lengte van een timestamp is altijd 10!
        Deze if kijkt of er een fout optreed tijdens het plaatsen van de cookie*/
        
        $content    .=    \'Cookie niet kunnen plaatsen! Zorg dat je browser cookies accepteerd.\';
        
    }elseif(!setcookie(\'aantalBezoeken\', 1, time() + 3600*24*365, \'/\', $_SERVER[\'HTTP_HOST\'])){
        /* Nu proberen we een cookie te maken waarin we het aantal keer dat de bezoeker de website bezoekt proberen te tellen 
        Ook deze cookie blijft een jaar geldig. */
        
        $content    .=    \'Cookie niet kunnen plaatsen! Zorg dat je browser cookies accepteerd.\';
        
    }else{
        
        $content    .=    \'Bezoek geregistreerd!\';
        
    }
    
    echo \'Hallo, jij bent volgens mij voor het eerst of deze site(Of heb je stiekem je cookies verwijderd?)
    <br />
    \' . $content;
    
}else{
        
    if(ctype_digit($_COOKIE[\'aantalBezoeken\'])){
        
        setcookie(\'aantalBezoeken\', ($_COOKIE[\'aantalBezoeker\'] + 1), time() + 3600*24*365, \'/\', $_SERVER[\'HTTP_HOST\']);
        // We updaten de cookie met 1 bij het aantal bezoeken.
        
        echo \'Hallo, jij bent hier al eerder geweest! 
        <br />
        Volgens mij als jij niets veranderd hebt ben jij hier al \' . $_COOKIE[\'aantalBezoeken\'] . \' keer geweest.\';
        /* Normaal zouden we de inhoud van de cookie door htmlentities halen.
        Deze keer doen we dat niet omdat we al hebben gekeken of de inhoud alleen getallen bevat, dit klopte.
        Daarom is het niet meer nodig om de (x)HTML eruit te halen */        
        
    }else{
                
        if(!setcookie(\'bezocht\', \'\', time() - 3600*24*365, \'/\', $_SERVER[\'HTTP_HOST\'])){
            // We maken de cookie-inhoud leeg en zeggen dat de cookie 1 jaar geleden had moeten vervallen, zo zal bij het volgende bezoek de cookie verwijderd zijn.
            
            $content    .=    \'Cookie niet kunnen verwijderen! Zorg dat je browser cookies accepteerd.\';
            
        }elseif(!setcookie(\'aantalBezoeken\', \'\', time() - 3600*24*365, \'/\', $_SERVER[\'HTTP_HOST\'])){
            
            $content    .=    \'Cookie niet kunnen verwijderen! Zorg dat je browser cookies accepteerd.\'
            
        }else{
            
            $content    .=    \'Cookies succesvol verwijderd.\';
            
        }
        
        echo \'Jij hebt de inhoud van de cookie bewerkt, de inhoud is niet numeriek meer!
        <br />
        \' . $content;        
        
    }
    
}

?>

Dit kan allemaal met 1 cookie maar nu hebben we het met 2 cookies gedaan voor de overzichtelijkheid!
Cookies zijn door de bezoeker bewerkbaar! Vertrouw daarom nooit de inhoud ervan.

$_SESSION
Sessie\'s, sessie\'s lijken op cookies, alleen staan cookies op de PC van de gebruiker en sessie\'s niet.
Sessie\'s kunnen gemaakt worden door cookies, maar ook door informatie uit de URL, ook is er nog een andere manier.
Dit mag je gelijk weer vergeten want dit is eigenlijk niet van belang.

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
<?php

session_start();
/* Hiermee geven we aan dat we in dit script ergens sessie\'s willen gaan gebruiken.
Zonder session_start() zal je nooit iets met sessie\'s kunnen doen. */

$content    =    null;
// Zolas we net al zeiden gingen we vanaf nu $content gebruiken.

if(isset($_SESSION[\'antiSpam\']) && ctype_digit($_SESSION[\'antiSpam\']) && strlen($_SESSION[\'antiSpam\']) == 10){
        
    if($_SESSION[\'antiSpam\'] < time()){
        
        unset($_SESSION[\'antiSpam\']);
        
        header(\'Refresh: 5;\');
        
    }else{
        
        $content    .=    \'Jij bent op en om \' . date(\'d-m-Y H:i:s\', ($_SESSION[\'antiSpam\'] - 10)) . \' op deze website geweest.
        <br />
        Je mag elke 10 seconden een bezoek brengen, je zult dus nog even moeten wachten.\';
            
    }
    
}else{
    
    $content    .=    \'Jij hebt de afgelopen 10 seconden de website niet bezocht. Daarom mag je nu kijken.\';
    
    $_SESSION[\'antiSpam\']    =    (time() + 10);
    // We plaatsen de huidige tijd + 10 seconden
    
}

echo \'<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">

<html xmlns=\"http://www.w3.org/1999/xhtml\">

    <head>
    
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />
        <meta name=\"author\" content=\"\" />
        <meta name=\"description\" content=\"\" />
        <meta name=\"keywords\" content=\"\"  />
        <meta name=\"robots\" content=\"index, follow\" />
        
        <title>PHP pagina</title>        
        
    </head>
    
    <body>
        
        \' . $content . \'    
                    
    </body>
    
</html>\';

?>

$_FILES

Hier gaan we leren hoe we bestanden moeten uploaden in PHP, je kent het wel, de bekende uploaddumps.
Soms heb je zelf ook een uploadscript nodig, dat gaan we hieronder maken.
We gaan het lekker simpel doen, we gaan een image-uploader maken.
De volgende extenties zijn toegestaan: gif, png, jpg, jpeg
De volgende filetypes zijn toegestaan: image/gif, image/png, image/jpeg
Foto\'s mogen maximaal 1 mb zijn.
Foto\'s gaan we uploaden in de map /uploads
Bestanden worden automatisch hernoemd als het bestand al bestaat.
Controleer altijd de extentie EN filetypes!

Zo, dit was de voorbereiding, nu het script.

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php

$form    =    \'<form method=\"post\" enctype=\"multipart/form-data\">
    <b>Plaatje dat je wilt uploaden:</b> <input type=\"file\" name=\"bestand\" size=\"30\" />
    <br />
    <input type=\"submit\" value=\"Upload foto\" />
</form>\';
// We maken een variabele waarin het POST formulier staat.

$content        =    null;
// We maken een variabele waarin we de content gaan plaatsen.

$extenties        =    array(\'gif\', \'png\', \'jpg\', \'jpeg\');
// Een array(Zie hoofdstuk 5) met de toegelaten extenties erin.

$bestandsTypes    =    array(\'image/gif\', \'image/png\', \'image/jpeg\');
// Een array(Zie hoofdstuk 5) met de toegelaten bestandstypen erin.

$maxSize        =    1024;
/* Een variabele die de maximale grote van het geuploade bestand bevat. KB\'s!
1024KB is gelijk aan 1 MB */


if($_SERVER[\'REQUEST_METHOD\'] == \'POST\'){
    // Kijk of de pagina aanvraag-methode POST is.
    
    if(isset($_FILES[\'bestand\'])){
        // Kijk of het formulier klopt, dat er een veld genaamd file bestaat.
        
        if(empty($_FILES[\'bestand\'][\'name\'])){
            
            $content    .=    \'<b style=\"color:#FF0000\">De volgende fout is opgetreden:
            <br />
            Er is geen bestand geupload.
            <br />
            <br />
            <b>Probeer het opnieuw:</b>
            <br />
            \' . $form;
            
        }else{
            
            $extentie    =    explode(\'.\', $_FILES[\'bestand\'][\'name\']);
            /* We verdelen de naam van het bestand, elke keer als er een punt is geweest komt er een nieuw deel.
            $extention zal nu een array worden. */
            
            $extentie    =    end($extentie);
            // We pakken het stukje tekst achter de laatste .(Dit is de extentie.
            /*
            Je denkt nu vast waarom doet hij dit niet in 1 variabele, dat is toch sneller?
            Het antwoord is: Nee, PHP zal een E_STRICT error laten zien als dit niet in 2 variabelen had gestaan. */
            
            if(!in_array($extentie, $extenties) || !in_array($_FILES[\'bestand\'][\'type\'], $bestandsTypes) || $_FILES[\'bestand\'][\'size\'] > ($maxSize * 1024)){
                        
                $content    .=    \'<b style=\"color:#FF0000\">De volgende fout is opgetreden:
                <br />\';    
                
                if(!in_array($extentie, $extenties)){
                    
                    $content    .=    \'De extentie van uw bestand is niet toegelaten. U kunt foto\\\'s uploaden met de extentie gif, png, jpg en jpeg.
                    <br />\';
                    
                }elseif(!in_array($_FILES[\'bestand\'][\'type\'], $bestandsTypes)){
                    
                    $content    .=    \'Het type van uw bestand is niet toegelaten. Probeer uw foto te openen en opnieuw op te slaan met paint, waarschijnlijk heeft u een corrupte foto.
                    <br />\';
                    
                }
                
                if($_FILES[\'bestand\'][\'size\'] > ($maxSize * 1024)){
                    
                    $content    .=    \'Uw foto is te groot, u foto max maximaal \' . $maxSize . \'KB zijn. Probeer uw foto te verkleinen.
                    <br />\';
                    
                }
                
                $content        .=    \'Los de bovenstaande fouten op en probeer het opnieuw.
                <br />
                <br />
                \' . $form;
                        
            }else{
                        
                // Alles klopt, nu kunnen we de foto gaan opslaan.
                
                if(is_uploaded_file($_FILES[\'bestand\'][\'tmp_name\'])){
                    // Kijk of de server het bestand goed heeft opgeslagen in de tijdelijke map.
                    
                    if(file_exists(\'uploads/\' . $_FILES[\'bestand\'][\'name\'])){
                        // Er bestaat al een foto met die naam, we zullen de foto moeten gaan hernoemen.
                        
                        $bestandsnaam    =    \'uploads/\' . time().rand(000,9) . \'-\' . $_FILES[\'bestand\'][\'name\'];
                        // Genereer een nieuwe bestandsnaam
                        
                    }else{
                        
                        $bestandsnaam    =    \'uploads/\' . $_FILES[\'bestand\'][\'name\'];
                        // Maak de bestandsnaam
                        
                    }
                    // Controleer de bestandsnaam
                    
                    if(move_uploaded_file($_FILES[\'bestand\'][\'tmp_name\'], $bestandsnaam)){
                        // Verplaats het bestand van de tijdelijke map naar de uiteindelijek map.
                        
                        echo \'Je bestand is geupload in de map: \' . $bestandsnaam . \'
                        <br />
                        Veel plezier met je upload!\';
                        
                    }else{
                        
                            $content    .=    \'<b style=\"color:#FF0000\">Systeemfout:</b> De server kon het bestand niet in de nieuwe map te plaatsen.</b>\';
                        
                    }
                    
                }else{
                    // Een systeemfout, we gaan een mooie melding maken.
                    
                    $content    .=    \'<b style=\"color:#FF0000\">Systeemfout:</b> De server kon het bestand niet in de tijdelijke map plaatsen.</b>\';
                    
                }
                        
            }                    
                        
        }
        
    }else{
        // Foute invoer, het formulier is niet van ons want er bestaat geen veld genaamd bestand.
        
        echo $form;
        
    }
    
}else{
    
    echo $form;
    
}

?>

--------------------------------------------------------------------------------------------------------
Hoofstuk 5:
We hebben nu het grootste deel van variabelen behandeld. We gaan nu verder met een ander deel van variabelen, array\'s.
Een array is simpel gezegd een variabele met meerdere waardes. Hieronder een voorbeeld van een array:
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
<?php

$array    =    array(\'waarde1\', \'waarde2\', \'waarde3\', \'waarde4\');
// We maken een array met 4 waardes.

echo $array[0];
// Dit laat zien: waarde1. Dus alle waardes krijgen gelijk een nummer vanaf 0. Om de 0 tussen de [] hoeven geen quotes omdat het een getal is, bij letters moet dit wel.

// Hieronder laten we hoe je een waarde zelf een naam kan geven.

$naw    =    array(
\'naam\'            =>    \'Jan\',
\'adres\'            =>    \'Straatweg\',
\'huisnummer\'    =>    \'00\',
\'postcode\'        =>    \'0000AA\',
\'plaats\'        =>    \'Den Haag\'
);
// Maak de array. Naw staat voor Naam, adres, woonplaats.

echo \'<b>Naam:</b>\' . $naw[\'naam\'] . \'
<br />
<b>Adres:</b>\' . $naw[\'adres\'] . \' <b>Huisnummer:</b> \' . $naw[\'huisnummer\'] . \'
<br />
<b>Postcode:</b>\' . $naw[\'postcode\'] . \'
<br />
<b>Plaats:</b>\' . $naw[\'plaats\'] . \'
<br />
<br />
Einde naw gegevens.\';
?>

Maar het naw gedeelte kan veel sneller! Hiervoor hebben we in PHP een loop genaamd foreach. Hiermee kun je array\'s makkelijk uitlezen en er bepaalde acties mee uitvoeren.

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
<?php

$naw    =    array(
\'naam\'            =>    \'Jan\',
\'adres\'            =>    \'Straatweg\',
\'huisnummer\'    =>    \'00\',
\'postcode\'        =>    \'0000AA\',
\'plaats\'        =>    \'Den Haag\'
);
// Maak de array. Naw staat voor Naam, adres, woonplaats.

foreach($naw as $naam => $waarde){
    /* We gaan de array naw uit elkaar halen op naam en waarse. Hierbij is bijvoorbeeld het adres de naam en Straatweg de waarde.
    
    Een loop wordt altijd meerdere keren herhaald, deze zal 5 keer herhaald worden omdat er 5x een naam en waarde in de array staat.
    $naam bevat de eerste keer naam, de tweede keer adres, de derde keer huisnummer enz.
    $waarde zal de eerste keer Jan hebben, de tweede keer Straatweg, de derde keer 00 enz.
    De PHP-functie ucfirst zorgt dat de eerste letter van een variabele een hoofdletter wordt.
    Dus je ziet dan in plaats van naam Naam staan. Dit is veel sneller dan dat we eerst deden en we krijgen toch hetzelfde resultaat. */
    
    echo \'<b>\' . ucfirst($naam) . \':</b> \' . $waarde . \'
    <br />\';
    
}

echo \'<br />
Einde naw gegevens.\';
// Dit wordt na de foreach loop uitgevoerd.

?>

Het is mogelijk om te kijken of een bepaalde waarde voorkomt in een array, dit heb je aan het einde van hoofdstuk 4 kunnen zien.

--------------------------------------------------------------------------------------------------------
Hoofstuk 6:

Je kan ook eigen functies, dit kunnen bijvoorbeeld functies zijn die PHP niet kent. Functies gebruik je als je iets een aantal keer moet doen, het scheelt je dan namelijk typewerk, dit noemen we herbruikbaarheid.

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
<?php

/* Ik geef hier een voorbeeld over een beveiligingsfunctie, wat deze precies doet vind je hieronder.
We beginnen de code met \'function\', daarna de naam van de functie(in dit geval safe).
Daarna komen de () en de variabele. Deze variabele is gelijk aan wat er word ingevuld als deze functie gebruikt word.
Binnen de accolades ({}) begint de functie.
Let er wel op dat je bij de 1e en de laatste regel geen afsluiting zet! (;)
*/

function safe($input){

    $input = htmlentities($input, ENT_QUOTES);
    /* Eerst filteren we alle html eruit.
    Dat zou betekenen als de $input <b> was, er gewoon <b> uitkomt.
    Zonder enig effect, dus de tekst word NIET bold.*/
    
    $input = trim($input);
    /* Trim() verwijdert whitespace van het begin en eind van een string.
    Bijvoorbeeld \' Ik \' zou worden \'Ik\' */    
    
    return $input;
    // Hiermee geef je de beveiligde waarde terug
}


echo \'Jij bent: \' . safe($_GET[\'naam\']);
 
//Als iemand ?naam= doet ziet hij zijn eigen naam die beveiligd is tegen HTML en alle onnodige spaties aan het begin en het eind worden eruit gehaald.

?>

Natuurlijk kan dit vele malen sneller door alle functies in 1 keer te gebruiken maar dit is overzichtelijker.

Functies kunnen ook iets controleren, daarvan hieronder een simpel voorbeeld:

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
<?php

$mensBeschrijving    =    \'mens\';
// Geef aan waaraan een mens moet voldoen.

function isMens($type){
    
    global $mensBeschrijving;
    /* Zorg dat $mensBeschrijving bereikbaar is in de functie isMens.
    Je kunt dus niet zomaar variabelen die niet in functies gecreerd worden bereiken.
    Je zult dus eerst global moeten doen. */
    
    if($type == \'mens\'){
        // Kijk of $type alleen mens bevat
        
        return true;
        // Return waar
        
    }else{
        
        return false;
        // Return niet waar
        
    }
    
    if(isMens(\'mens\')){
        
        echo \'Ja, dit is een mens.\';
        
    }else{
        
        echo \'Nee, dit is geen mens.\';
        
    }
    
}

?>

--------------------------------------------------------------------------------------------------------
Hoofstuk 7:
Komt nog! Nog even geduld...

--------------------------------------------------------------------------------------------------------
Hoofstuk 8:
Loops en lussen, soms zal je in PHP iets een X aantal keer moeten herhalen.

We beginnen met een while, eigenlijk kan ik hier niet zo snel een nuttig voorbeeld van geven, een while wordt vaak gebruikt bij queries. For loops daarentegen is weer wel erg handig en wordt veel gebruikt. De nuttigheid van de while zal je dus grotendeels bij de queries leren.

Een while:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

$nummer = 0;
// Een variabele de waarde 0 toekennen. 

while($nummer <= 10){
// De while loop starten, als $nummer kleiner of gelijk aan 10 is wordt de volgende actie uitgevoerd.
 

    echo $nummer . \'
    <br />\';
    // Echo ieder getal tussen de 0($nummer variabele) en de 10

    ++$nummer;                
    // Waarde $nummer met 1 verhogen, je kan ook met + 1 bij de variabele plaatsen, maar dit is korter en wordt meer gebruikt 

}
// De while loop eindigen

?>

Dit zal
1
2
3
ect weergeven.

Een for, de while hierboven is nutteloos en slecht, voor wat we hierboven willen doen kunnen we beter een for gebruiken.
Een voorbeeldje:

1
2
3
4
5
6
7
8
9
10
11
<?php

for($i = 0; $i <= 10; $i++){
    // We beginnen met $i, die is nul, we voeren het onderstaande uit als $i <= 10 is en bij elke keer dat we het uitvoeren tellen we er 1 bij op.
    
    echo $i . \'
    <br />\';
    
}

?>

Een praktijkvoorbeeld met een for, we gaan een functie maken die een random code teruggeeft die uit a-z A-Z en 0-9 bestaat.:

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
<?php

function randomCode($lengte){
    
    $tekens            =    array_merge(range(\'a\', \'z\'), range(\'A\', \'Z\'), range(0, 9));
    // Te tekens die toegestaan zijn.
    
    $aantalTekens    =    (count($tekens) - 1);
    // Tel het aantal toegestane tekens. Die -1 is er omdat we er anders 1 te veel hebben.
    
    $randomCode        =    null;
    // We maken de variabele $randomCode aan, die vullen we in de for-loop.
    
    for($i = 1; $i <= $lengte; $i++){
        
        $randomCode    .=    $tekens[rand(0, $aantalTekens)];
        /* We pakken een random teken op basis van het nummer dat random gepakt wordt door PHP.
        Zoals je bij array\'s hebt geleerd krijgt elke waarde in een array een nummer.
        Nu hebben dus alle leters in $tekens een nummer zo heeft a het nummer 0 en z het nummer 26 en A het nummer 27.
        We pakken dus de array $tekens[*] Waar het sterretje staat moet dus steeds een ander nummer komen.
        Dat doet de functie rand(); */
        
    }
    // Als $i kleiner of gelijk aan de lengte is die als parameter in de functie staat voegen we een teken toe.
    
    return $randomCode;
    // Geef de random code terug.
    
    /*
    
    Voor de mensen die denken dan shuffle beter is:
    Shuffle schuffeld de tekens, maar dit zorgt voor een limiet van het aantal tekens.
    En zal elk teken maar 1 keer voorkomen 
    
    */
    
}

echo randomCode(100);

?>

Dit voorbeeld zal een random code van 100 tekens terugsturen.

Basjee
Octo
Geplaatst op: 05 Aug 2007, 19:52

iisys schreef:

[...]
Tel is op je vingers: hoeveel dagen zitten er tussen 30 juli en 5 augustus?

31 juli
1 augustus
2 augustus
3 augustus
4 augustus
5 augustus

Whoa! Dat zijn wel ZES (6) dagen!

En jij zat er.. Eeuh.. ff kijken.. 30 - 6 = 24 dagen naast !

Okeuh, misschien beetje overdreven, maar let volgende keer op de datum Bas :\')

edit: (6) veranderde naar .


Oewps, ik las Juni. :\')

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 05 Aug 2007, 19:48

Basjee schreef:

[...]
Het is niet toegestaan om te reageren op blogs waarvan de laatste reactie ouder dan 30 dagen is!
De crew zal het je niet kwalijk nemen omdat je net nieuw bent, maar je kan er voortaan beter even op letten!


Tel is op je vingers: hoeveel dagen zitten er tussen 30 juli en 5 augustus?

31 juli
1 augustus
2 augustus
3 augustus
4 augustus
5 augustus

Whoa! Dat zijn wel ZES (6) dagen!

En jij zat er.. Eeuh.. ff kijken.. 30 - 6 = 24 dagen naast !

Okeuh, misschien beetje overdreven, maar let volgende keer op de datum Bas :\')

edit: (6) veranderde naar .

[Laatst bewerkt door iisys op zondag 5 augustus 2007, om 19:49]
Rinaldo
Geplaatst op: 05 Aug 2007, 19:46

Basjee schreef:

[...]
Het is niet toegestaan om te reageren op blogs waarvan de laatste reactie ouder dan 30 dagen is!
De crew zal het je niet kwalijk nemen omdat je net nieuw bent, maar je kan er voortaan beter even op letten!


rolf xD .

6 dagen=30 dagen ...?

Basjee
Octo
Geplaatst op: 05 Aug 2007, 19:40

Tijn schreef:

mooie en duidelijke cursus

ik had die van levenloos al gedaan, maar deze is veel duidelijker en er wordt netter gescript


Het is niet toegestaan om te reageren op blogs waarvan de laatste reactie ouder dan 30 dagen is!
De crew zal het je niet kwalijk nemen omdat je net nieuw bent, maar je kan er voortaan beter even op letten!

Tijn
;-D
Geplaatst op: 05 Aug 2007, 13:40

mooie en duidelijke cursus

ik had die van levenloos al gedaan, maar deze is veel duidelijker en er wordt netter gescript

Martijn
Geplaatst op: 30 Jul 2007, 22:24

Ook jij bedankt ik ga morgen ff mooie tut uitzoeken

Gonaz
Geplaatst op: 30 Jul 2007, 21:31

Thx Badeendje (heb nu al een cursus of 6 )

Badeendje
Pompehdompehdom
moderator
Geplaatst op: 30 Jul 2007, 21:09

Ik heb nog wel een goed boek(pdf), helemaal vanaf het begin, tot oop en gdlib etc op het einde.
PHP 5 & Mysql Bible (Engels wel)

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 30 Jul 2007, 16:16

Ik voeg jullie allebei ff toe op msn, dan geef ik een paar sites met e-books ^,^

Gonaz
Geplaatst op: 30 Jul 2007, 16:09

iisys schreef:

[...]
Als je zo graag een phpcursus in pdf formaat wil heb ik nog wel een paar e-books voor je (engels). Misschien beetje groot en uitgebreid, maar deze cursus is nog niet volledig.

Stuur ook maar naar mij, ik ken nog niets van PHP daarom wilde ik deze cursus gebruiken. Maar ik kan niet leren van een monitor daarom maak ik hem in PDF, en kunnen er andere geïnteresseerden ook van genieten.

Martijn
Geplaatst op: 30 Jul 2007, 14:06

iisys schreef:

[...]
Als je zo graag een phpcursus in pdf formaat wil heb ik nog wel een paar e-books voor je (engels). Misschien beetje groot en uitgebreid, maar deze cursus is nog niet volledig.

Stuur ze maar, ik heb er wel belang bij

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 30 Jul 2007, 13:13

Gonaz schreef:

Ik heb een ideetje, aangezien ik het nogal omslachtig vind om een cursus te volgen op een internetsite (zeker als je internet plat ligt).
Zou ik de cursus in een PDF\'je willen gieten. De mensen kunnen hem dan afprinten (gemakkelijker om te leren).
Natuurlijk doe ik niets zonder de toestemming van de makers en vermeld ik de makers, de website waarop hij gemaakt is in de PDF.
Mss kun je de PDF in de beginpost plaatsen, zodat potentiële gebruikers ervan hem gemakkelijk vinden.
Als je dit een goed idee vind, zeg het me ff.

Als je zo graag een phpcursus in pdf formaat wil heb ik nog wel een paar e-books voor je (engels). Misschien beetje groot en uitgebreid, maar deze cursus is nog niet volledig.

Gonaz
Geplaatst op: 29 Jul 2007, 22:25

Ik heb een ideetje, aangezien ik het nogal omslachtig vind om een cursus te volgen op een internetsite (zeker als je internet plat ligt).
Zou ik de cursus in een PDF\'je willen gieten. De mensen kunnen hem dan afprinten (gemakkelijker om te leren).
Natuurlijk doe ik niets zonder de toestemming van de makers en vermeld ik de makers, de website waarop hij gemaakt is in de PDF.
Mss kun je de PDF in de beginpost plaatsen, zodat potentiële gebruikers ervan hem gemakkelijk vinden.
Als je dit een goed idee vind, zeg het me ff.

Died
Geplaatst op: 28 Jun 2007, 21:03

Syncie schreef:

[...]
Dan zou je het op je eigen website moeten hosten, dat zou ik ook kunnen doen alleen heb ik daarvoor niet gekozen.

Succes!


Ik host het inderdaad ook op mijn eigen website :\')...

Syncie
Geplaatst op: 28 Jun 2007, 19:21

Spunk schreef:

Ik zal het maar even onthullen.
Zelf ben ik ook bezig met een PHP tutorial.
Waarom?
Ik vind het hier op Saven.nl nogal overzichtelijk.
Mijn tutorial is naar mijn mening erg overzichtelijk omdat ik de functie heb ik gebouwd om delen te openen en te sluiten dmv van javascript, en omdat ik het hele scherm tot mijn beschikking heb.
Ik zeg niets over de inhoud, die kan eventueel ook slechter zijn dan deze tutorial, maar dat mogen de mensen zelf beslissen als mijn tutorial uiteindelijk af is.

Dan zou je het op je eigen website moeten hosten, dat zou ik ook kunnen doen alleen heb ik daarvoor niet gekozen.

Succes!

Basjee
Octo
Geplaatst op: 28 Jun 2007, 17:38

Spunk schreef:

Ik vind het hier op Saven.nl nogal overzichtelijk.

Ik ook.

Als je maar niets kopieert enzo

Died
Geplaatst op: 27 Jun 2007, 23:00

Ik zal het maar even onthullen.
Zelf ben ik ook bezig met een PHP tutorial.
Waarom?
Ik vind het hier op Saven.nl nogal overzichtelijk.
Mijn tutorial is naar mijn mening erg overzichtelijk omdat ik de functie heb ik gebouwd om delen te openen en te sluiten dmv van javascript, en omdat ik het hele scherm tot mijn beschikking heb.
Ik zeg niets over de inhoud, die kan eventueel ook slechter zijn dan deze tutorial, maar dat mogen de mensen zelf beslissen als mijn tutorial uiteindelijk af is.

Syncie
Geplaatst op: 27 Jun 2007, 11:26

Basjee schreef:

Morgen heb ik de OPERATORS ook af

De operators komen vanmiddag, aan GD-lib wordt gewerkt en ook aan het gastenboek wordt gewerkt!

Basjee
Octo
Geplaatst op: 26 Jun 2007, 22:13

Morgen heb ik de OPERATORS ook af

Syncie
Geplaatst op: 26 Jun 2007, 20:56

Kick(UPDATE)

Superglobals uitgebreid.
Functies uitgebreid.
Foto-upload script, je kan nu je eigen uploadscripts maken.

Syncie
Geplaatst op: 25 Jun 2007, 20:46

Arie schreef:

[...]
Oh dan is het goed .
Succes en blijf zitten net als ik .

Die kans is er zeker en daar heb ik dus alles behalve zin in, nog een jaar op school en een andere klas.

Arie
Geplaatst op: 25 Jun 2007, 20:37

Syncie schreef:

[...]
Komt eraan, maar ik heb pwweek dus ik heb niet veel tijd

Oh dan is het goed .
Succes en blijf zitten net als ik .

Syncie
Geplaatst op: 25 Jun 2007, 20:31

Arie schreef:

[...]
Maar is die al gepost dan? Zoja wel hoofdstuk?
Want ik zie alleen maar tot hoofdstuk 6.

Komt eraan, maar ik heb pwweek dus ik heb niet veel tijd

Arie
Geplaatst op: 25 Jun 2007, 20:15

Badeendje schreef:

[...]

Die heb ik gemaakt, Syncie doet nog wat kleine toevoegingetjes en zal vandaag of morgen wel tegelijk met de operators erbij komen te staan, het begin van mysql_query\'s de heele erge basis ervan.


Maar is die al gepost dan? Zoja wel hoofdstuk?
Want ik zie alleen maar tot hoofdstuk 6.

Badeendje
Pompehdompehdom
moderator
Geplaatst op: 25 Jun 2007, 20:03

Arie schreef:

Wanneer komt het stuk met MySQL?

Die heb ik gemaakt, Syncie doet nog wat kleine toevoegingetjes en zal vandaag of morgen wel tegelijk met de operators erbij komen te staan, het begin van mysql_query\'s de heele erge basis ervan.

📫

Nieuw privébericht

🔥

Registreren


Login