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.

Artofdead
Master Fish
Geplaatst op: 18 Jun 2009, 07:21

sandr schreef:

[...]
Die ontwikkeling staat ook al maanden stil dusja

Idd, nu je het zegt, hij is ineens gestopt met V5.
Vind ik niet kunnen Saven, aan het werk

Sharp
:')
moderator
Geplaatst op: 17 Jun 2009, 23:32

sandr schreef:

[...]
Die ontwikkeling staat ook al maanden stil dusja

You should know...

sandr
aka Chuck Norris
Geplaatst op: 17 Jun 2009, 20:20

Tijn schreef:

"Komt wel in v5"

Die ontwikkeling staat ook al maanden stil dusja

Tijn
;-D
Geplaatst op: 17 Jun 2009, 20:13

"Komt wel in v5"

sandr
aka Chuck Norris
Geplaatst op: 17 Jun 2009, 19:09

Tijn schreef:

Saven je paginanavigatie klopt niet op pagina 5

Heb ik maanden geleden ooit gemeld, maar nog niet gefixed .

Darkmystery
Indeed.
Geplaatst op: 17 Jun 2009, 09:25

Tijn schreef:

Saven je paginanavigatie klopt niet op pagina 5

Oude bug, maar wel gay ja.

Tijn
;-D
Geplaatst op: 17 Jun 2009, 07:55

Saven je paginanavigatie klopt niet op pagina 5

Gast
Geplaatst op: 16 Jun 2009, 19:44

Joris schreef:

Agressief op commentaar... Zo kennen we syncie al, die anderen 'niets' noemt maar zelf zonder vrienden & sociaal leven zit. Bijvoorbeeld als ie commentaar krijgt. Jij bent degene die niets is, nounou, je kan PHP, wat ben jij een knappe jongen zeg! Respect voor syncie! (doorgehaald omdat dat niet in zn leven voorkomt, het enige wat in zn leven voorkomt is echo met enkele haakjes en framework's.

Misschien heb je op sommige punten wel gelijk. Overigens vind ik framework's niet handig, ik gebruik alleen een framework voor ajax (prototype).

Zoek een leven gast!!


Syncie
Geplaatst op: 19 May 2008, 11:56

Saven schreef:

[...]
hoi Joris

pwned

Kansloos man, niet onder je eigen naam reageren

iisys schreef:

[...]
Idd, er zijn hier nou niet echt nerds. De tijd van de nerds is sowieso al voorbij, maar dat terzijde.

Joris, jij houdt NU je hoofd, jij reageert hier niet meer op, want het kan ons helemaal niks schelen hoe jij ij iemand anders zogenaamd probeert af te kraken. Jij stil, Syncie stil, gedraag je weer zoals de professional die je wilt zijn.
Joris reageert niet, dus heeft Syncie ook niks om op te reageren.



Joris, als je wil via PM verder.

[Laatst bewerkt door Syncie op maandag 19 mei 2008, om 21:19]
iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 19 May 2008, 10:49

Syncie schreef:

[...]
Lijkt me eigenlijk niet echt. De mensen die ik hier zie & op msn heb zijn alles behalve nerds ofzo en hebben genoeg vrienden... Hier ligt het nerd-gehalte nog best laag volgens mij....

Idd, er zijn hier nou niet echt nerds. De tijd van de nerds is sowieso al voorbij, maar dat terzijde.

Joris, jij houdt NU je hoofd, jij reageert hier niet meer op, want het kan ons helemaal niks schelen hoe jij iemand anders zogenaamd probeert af te kraken. Jij stil, Syncie stil, gedraag je weer zoals de professional die je wilt zijn.
Joris reageert niet, dus heeft Syncie ook niks om op te reageren.

Saven
admin
Geplaatst op: 19 May 2008, 10:14

pwnzzr schreef:

[...]

"Vrienden & sociaal leven genoeg hier" betekent dat jij toch geen vrienden hebt buiten dit forum? Verder bemoei ik me niet met jullie.....


hoi Joris

[Laatst bewerkt door Saven op maandag 19 mei 2008, om 10:15]
Syncie
Geplaatst op: 19 May 2008, 09:29

Darkmystery schreef:

[...]

Ga eens weg ofzo, jou pauper-commentaar verpest deze blog.
En we weten allemaal wel dat de gemiddelde saven-er hier een kleine vriendenkring heeft, jij dus ook.
En kom nou niet aanzetten met 'ik heb wel vrienden, kanker op!' want je habbo vriendjes tellen niet mee.

(We weten allemaal wel dat je met artmoney habbo wou hoaxen ofzo. )


Lijkt me eigenlijk niet echt. De mensen die ik hier zie & op msn heb zijn alles behalve nerds ofzo en hebben genoeg vrienden... Hier ligt het nerd-gehalte nog best laag volgens mij....

Darkmystery
Indeed.
Geplaatst op: 19 May 2008, 08:44

Joris schreef:

<blaat>

Ga eens weg ofzo, jou pauper-commentaar verpest deze blog.
En we weten allemaal wel dat de gemiddelde saven-er hier een kleine vriendenkring heeft, jij dus ook.
En kom nou niet aanzetten met 'ik heb wel vrienden, kanker op!' want je habbo vriendjes tellen niet mee.
(We weten allemaal wel dat je met artmoney habbo wou hoaxen ofzo. )

[Laatst bewerkt door Darkmystery op maandag 19 mei 2008, om 08:47]
Syncie
Geplaatst op: 19 May 2008, 00:10

pwnzzr schreef:

[...]

"Vrienden & sociaal leven genoeg hier" betekent dat jij toch geen vrienden hebt buiten dit forum? Verder bemoei ik me niet met jullie.....


Nee dat betekend het niet, het staat er wel wat onhandig inderdaad xD
Ik bedoel buiten pc sjit om

Gast
Geplaatst op: 19 May 2008, 00:04

Syncie schreef:

[...]
Whahahahhaha

Allereerst maak ik op uit je post dat je mij min of meer gelijk geeft. Daarvoor bedankt.

Dan even over naar het sociale leven en vrienden gedeelte. Je kent mij niet, dat blijkt wel. Vrienden & sociaal leven genoeg hier. Het feit dat je daarover begint zonder enige feiten is voor mij meer een reden om aan te nemen dat jij eerder zelf een probleem in die richting hebt. Maargoed, daar kan je niets aan doen=)

"Vrienden & sociaal leven genoeg hier" betekent dat jij toch geen vrienden hebt buiten dit forum? Verder bemoei ik me niet met jullie.....

Modbreak

Joris, reageer gewoon met je eigen account..

[Laatst bewerkt door Badeendje op maandag 19 mei 2008, om 16:16]
Syncie
Geplaatst op: 19 May 2008, 00:01

Joris schreef:

Blaablaablaaa

Whahahahhaha

Allereerst maak ik op uit je post dat je mij min of meer gelijk geeft. Daarvoor bedankt.

Dan even over naar het sociale leven en vrienden gedeelte. Je kent mij niet, dat blijkt wel. Vrienden & sociaal leven genoeg hier. Het feit dat je daarover begint zonder enige feiten is voor mij meer een reden om aan te nemen dat jij eerder zelf een probleem in die richting hebt. Maargoed, daar kan je niets aan doen.

Kom maar eens naar Den Haag als je wil

[Laatst bewerkt door Syncie op maandag 19 mei 2008, om 00:04]
Joris
moderator
Geplaatst op: 18 May 2008, 23:45

Agressief op commentaar... Zo kennen we syncie al, die anderen 'niets' noemt maar zelf zonder vrienden & sociaal leven zit. Bijvoorbeeld als ie commentaar krijgt. Jij bent degene die niets is, nounou, je kan PHP, wat ben jij een knappe jongen zeg! Respect voor syncie! (doorgehaald omdat dat niet in zn leven voorkomt, het enige wat in zn leven voorkomt is echo met enkele haakjes en framework's.

Misschien heb je op sommige punten wel gelijk. Overigens vind ik framework's niet handig, ik gebruik alleen een framework voor ajax (prototype).

Zoek een leven gast!!

[Laatst bewerkt door Joris op zondag 18 mei 2008, om 23:48]
Syncie
Geplaatst op: 17 May 2008, 12:58

- Je bericht is langer dan 1000 tekens

Vandaar dat ik hier even verder ga.

Echo met enkele haakjes, want een kanker onzin. Rot toch op man met je dubbele haakjes. Is per persoon verschillend en ik vind enkele haakjes netter werken.

Ik haal niets buiten de PHP, de HTML bedoel je? Nee duh, vieze noob, dit is een tutorial. Dan begin je niet gelijk met een template parser o.i.d. En als je bedoelt PHP afsluiten en openen, nee dat is lekker, daarmee ben je goed bezig! In mijn framework regelt Template Lite al die sjit en zie je niets van HTML in de PHP staan.

PHPbattle als je wil

Trouwens, die tutorial is al een fucking jaar oud bijna.

[Laatst bewerkt door Syncie op maandag 19 mei 2008, om 00:06]
Syncie
Geplaatst op: 17 May 2008, 12:55

Joris a.k.a. De Stinknoob schreef:

lol, deze tut zit verschikkelijk vol met bugs....

Waarom gebruik je ook

$_SERVER['REQUEST_METHOD'] ????!!

Want als ik een inlogsysteem (rechts) op mijn site heb en een contactformulier (in het midden), dan submit hij ze op allebei als je dit gebruikt
En waarom echo met enkele haakjes? Want officieël moet het met dubbele haakjes? En je haalt niks buiten de PHP... ook lekker bagger.

Ik dacht dat jij zo goed PHP kon Het is niet slecht maar er zijn wel aandachtspuntjes ^^
Verder nice gedaan.


$_SERVER['REQUEST_METHOD'], daarmee lees je uit op welke manier de pagina wordt opgevraagd, POST/GET e.d. Dat met 2 formulieren, dan kun je ook gewoon isset($_POST['bla']) doen. Ik vind REQUEST_METHOD netter werken. En over het algemeen, met 2 formulieren, het inlog-formulier verwijst naar authentication/login en contact naar info/contact dus daar zou je ook geen last van moeten hebben.

[Laatst bewerkt door Syncie op zaterdag 17 mei 2008, om 13:03]
Saven
admin
Geplaatst op: 17 May 2008, 11:56

Joris schreef:

lol, deze tut zit verschikkelijk vol met bugs....

Waarom gebruik je ook

$_SERVER['REQUEST_METHOD'] ????!!

Want als ik een inlogsysteem (rechts) op mijn site heb en een contactformulier (in het midden), dan submit hij ze op allebei als je dit gebruikt
En waarom echo met enkele haakjes? Want officieël moet het met dubbele haakjes? En je haalt niks buiten de PHP... ook lekker bagger.

Ik dacht dat jij zo goed PHP kon Het is niet slecht maar er zijn wel aandachtspuntjes ^^
Verder nice gedaan.


... royal sadness
die request method vind ik ook poep ja, maar de rest wat je blaat slaat nergens op.
echo moet officieel helemaal niks. met enkele quotes is zelfs sneller dan met dubbele quotes. En niks buiten de php halen? Nee staat lekker om de 3 regels de php tag lopen afsluiten.. dat echo ding bestaat niet voor niets.
En daarbij is enkele quotes veel makkelijker bij echo zodat je niet href=\"\" hoeft te backslashen... kun je gewoon echo 'href="blaat" enz'

als er iemand is die totaal een php noob is ben jij het wel

Frenk
Non-Octo
Geplaatst op: 17 May 2008, 10:43

Christan schreef:

[...]

Hij stopt teminste niet midden in een PHP battle.


Christan
Pwn erd
Geplaatst op: 17 May 2008, 10:35

Joris schreef:

lol, deze tut zit verschikkelijk vol met bugs....

Waarom gebruik je ook

$_SERVER['REQUEST_METHOD'] ????!!

Want als ik een inlogsysteem (rechts) op mijn site heb en een contactformulier (in het midden), dan submit hij ze op allebei als je dit gebruikt
En waarom echo met enkele haakjes? Want officieël moet het met dubbele haakjes? En je haalt niks buiten de PHP... ook lekker bagger.

Ik dacht dat jij zo goed PHP kon Het is niet slecht maar er zijn wel aandachtspuntjes ^^
Verder nice gedaan.

Hij stopt teminste niet midden in een PHP battle.

Robertenzo
Geplaatst op: 17 May 2008, 10:02

Joris schreef:

lol, deze tut zit verschikkelijk vol met bugs....

Waarom gebruik je ook

$_SERVER['REQUEST_METHOD'] ????!!

Want als ik een inlogsysteem (rechts) op mijn site heb en een contactformulier (in het midden), dan submit hij ze op allebei als je dit gebruikt
En waarom echo met enkele haakjes? Want officieël moet het met dubbele haakjes? En je haalt niks buiten de PHP... ook lekker bagger.

Ik dacht dat jij zo goed PHP kon Het is niet slecht maar er zijn wel aandachtspuntjes ^^
Verder nice gedaan.

Omg, grote bumb

sandr
aka Chuck Norris
Geplaatst op: 17 May 2008, 09:55

Joris schreef:

Ik dacht dat jij zo goed PHP kon Het is niet slecht maar er zijn wel aandachtspuntjes ^^
Verder nice gedaan.

jij denkt ook dat jij goed php kan
en je bumpt nu een oude blog

Joris
moderator
Geplaatst op: 17 May 2008, 08:40

lol, deze tut zit verschikkelijk vol met bugs....

Waarom gebruik je ook

$_SERVER['REQUEST_METHOD'] ????!!

Want als ik een inlogsysteem (rechts) op mijn site heb en een contactformulier (in het midden), dan submit hij ze op allebei als je dit gebruikt
En waarom echo met enkele haakjes? Want officieël moet het met dubbele haakjes? En je haalt niks buiten de PHP... ook lekker bagger.

Ik dacht dat jij zo goed PHP kon Het is niet slecht maar er zijn wel aandachtspuntjes ^^
Verder nice gedaan.

[Laatst bewerkt door Joris op zaterdag 17 mei 2008, om 08:41]
📫

Nieuw privébericht

🔥

Registreren


Login