Superglobals

PHP kent enkele vooraf gedefinieerde variabelen, de zogenaamde superglobals. Deze variabelen zijn arrays die afhankelijk van de situatie allerlei waarden kunnen bevatten. Deze superglobals zijn overal en in elk script beschikbaar. Dit wil echter niet zeggen dat ze ook altijd gevuld zijn, dat hangt van de situatie af.

De superglobals waarin ik in deze tutorial aandacht zal besteden zijn:

$_GET
$_POST
$_FILES
$_SERVER
$_COOKIE
$_REQUEST

Naast deze lijst zijn er nog twee variabelen: $_ENV en $GLOBALS. Deze gebruik je echter (bijna) nooit, dus daar zal ik hier verder ook geen aandacht aan besteden.

Als we naar het lijstje kijken zien we dat we twee van deze variabelen al gebruikt hebben. $_SERVER en $_POST kwamen namelijk al eerder in het verwerkingsscript van ons formulier tegen. Nu zal ik de uitleg achter de werking van deze variabelen geven.

$_GET
Iedereen heeft wel eens een url van een website gezien die er bijvoorbeeld zo uit zag: http://www.eensite.nl/index.php?show=bericht&id=10. Wellicht dat je je ook ooit al eens afgevraagd hebt wat die ? en & in de url nou precies doen en dat je al een vermoeden had dat dit variabelen zijn. Dan zat je helemaal op het juiste spoor. Deze zogenaamde GET variabelen zijn variabelen die aan de url meegegeven kunnen worden en die we later in ons script kunnen gebruiken. In bovenstaand voorbeeld heb je dus beschikking over de GET variabelen 'show' en 'id'.

In ons script zijn deze variabelen te vinden in de superglobal $_GET. Deze variabele is een array waarin alle variabelen uit de url opgeslagen zijn. Met het volgende scriptje in onze index.php zal ik laten zien hoe dit werkt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if(isset($_GET['naam'], $_GET['leeftijd']))
{

    echo 'Hoi '.$_GET['naam'].', jij bent '.$_GET['leeftijd'].' jaar.';
}

else
{
    echo 'Een van de benodigde GET variabelen bestaat niet';
}

?>

Als we het script nu aan zouden roepen met de volgende url: index.php?naam=Kees&leeftijd=42, zou dat de volgende output geven:
Quote:
Hoi Kees, jij bent 40 jaar.

Allereerst controleren we met isset() of de twee GET variabelen wel bestaan. Dit moeten we altijd doen met variabelen die uit de url komen, het wordt namelijk lastig werken met variabelen die niet bestaan. Vervolgens gebruiken we de variabelen om wat informatie op het scherm te zetten.

Om te laten zien dat de controle of de variabelen bestaan werkt, roepen we de pagina nu als volgt aan: index.php?naam=Kees. Dit is de output die we nu krijgen:
Quote:
Een van de benodigde GET variabelen bestaat niet

$_POST
De werking van deze variabele hebben we in het vorige hoofdstuk al kunnen aanschouwen. Kort gezegd bevat deze variabele de waarden die met behulp van een formulier gepost zijn. Een formulier met als method 'post' is tevens ook de enige manier om deze variabele te vullen.

In het vorige hoofdstuk staat een uitgebreid voorbeeld van de werking van deze superglobal, dus ik ga hier niet nog eens een voorbeeld geven. Wij gaan snel door met de volgende superglobal.

$_FILES
Zoals je wellicht wel weet is het met een combinatie van HTML en PHP ook mogelijk om bestanden naar de webserver te uploaden. Denk bijvoorbeeld aan het toevoegen van een bijlage aan je webmail of het toevoegen van een filmpje op youtube.

Om bestanden te kunnen uploaden heb je in je formulier een veld van het type 'file' nodig. Bovendien moet je ervoor zorgen dan je ook het 'enctype' attribuut aan de <form> tag meegeeft met de waarde 'multipart/form-data'.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    echo '<pre>'.print_r($_FILES, true).'</pre>';
}

?>


<form action="#" method="post" enctype="multipart/form-data">
<p>
    <label for="userfile">Bestand:</label>
    <input type="file" name="userfile" id="userfile" />
</p>
<p>
    <input type="submit" value="Uploaden" />
</p>
</form>

Hier zien we een voorbeeld van een formuliertje om een bestand te uploaden. Als action heb ik dit keer een # ingevuld, dan worden de waarden uit het formulier naar dezelfde pagina gestuurd. Verder zien we dat de method weer op 'post' staat en dat we nu een enctype meegegeven hebben.

Omdat het formulier de waarden naar dezelfde pagina verstuurd, zien we ook dat de verwerking van het formulier in dit scriptje staat. In dit geval bestaat het uit niet meer dan het weergeven de de inhoud van $_FILES op het scherm.

Een voorbeeld van output na uploaden van een bestand zou de volgende kunnen zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [userfile] => Array
        (
            [name] => sprinkhaan.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\phpD23E.tmp
            [error] => 0
            [size] => 45194
        )
)

We zien dat $_FILES een multidimensionale associatieve array is. De eerste sleutel bevat de naam van het input veld waarin we de bestandsnaam kozen. De waarde die bij deze sleutel hoort is weer een array met gegevens over het bestand dat geupload is. Een kort overzichtje:

name - De bestandsnaam van het geuploade bestand
type - Het MIME type van het bestand. Dit geeft aan wat voor soort bestand het is
tmp_name - Elk geupload bestand komt in de tmp map onder een tijdelijke naam te staan
error - Normaal gesproken 0, een andere waarde als het uploaden niet lukt
size - De bestandsgrootte in bytes

Nu heb ik het telkens over het bestand dat geupload is, maar in werkelijkheid is dat nog niet het geval. Het is door de HTML code van jouw computer naar een tijdelijke locatie verhuist. Nu zul je met PHP het uploaden van het bestand af moeten ronden.

Dit hoort echter niet tot de onderwerpen die ik in deze tutorial behandel. Wil je hier meer over lezen, dan vind je hier een duidelijk en veilig voorbeeld.

$_SERVER
Ook van deze superglobal hebben we in het vorige hoofdstuk gebruik gemaakt. In deze variabele is informatie over de server en de manier waarop met de server gecommuniceerd is, opgeslagen. Laten we eens kijken wat we er allemaal in vinden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<pre>'.print_r($_SERVER, true).'</pre>';
?>
Code (php)
PHP script in nieuw venster Selecteer het PHP 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
Array
(
    [HTTP_HOST] => localhost
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
    [HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_LANGUAGE] => en-gb,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip,deflate
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
    [HTTP_KEEP_ALIVE] => 300
    [HTTP_CONNECTION] => keep-alive
    [HTTP_COOKIE] => mtrack=119762117M1932826833; PHPSESSID=g5fiq9d9udq9vanpvuosb0dsn4
    [PATH] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\QuickTime\QTSystem\;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
    [SystemRoot] => C:\WINDOWS
    [COMSPEC] => C:\WINDOWS\system32\cmd.exe
    [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    [WINDIR] => C:\WINDOWS
    [SERVER_SIGNATURE] =>
    [SERVER_SOFTWARE] => Apache/2.2.6 (Win32) PHP/5.2.5
    [SERVER_NAME] => localhost
    [SERVER_ADDR] => 127.0.0.1
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 127.0.0.1
    [DOCUMENT_ROOT] => C:/wamp/www/
    [SERVER_ADMIN] => webmaster@localhost
    [SCRIPT_FILENAME] => C:/wamp/www/index.php
    [REMOTE_PORT] => 4819
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] =>
    [REQUEST_URI] => /index.php
    [SCRIPT_NAME] => /index.php
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1199267859
)

Ik zal niet elke waarde uit deze array bespreken, enkel de variabelen die je regelmatig gebruikt zal ik kort toelichten.

HTTP_HOST - Geeft de hostnaam weer. Dus bijvoorbeeld 'localhost' of 'phphulp.jorendewit.nl'
REMOTE_ADDR - Het ip adres van de bezoeker van het script
DOCUMENT_ROOT - Geeft het pad waarin het script zich bevind, relatief vanaf de root van de server
REQUEST_METHOD - Geeft de manier waarop de pagina is aangeroepen. Meestal GET of POST.
REQUEST_URI - De url waarmee het script aangeroepen is, inclusief GET variabelen
SCRIPT_NAME - De bestandsnaam van het uitgevoerde script

De variabelen uit deze array gebruik je in de meeste gevallen om bijvoorbeeld te controleren of een formulier gepost is, te controleren hoe het script aangeroepen is, of om gegevens over de bezoeker te achterhalen. Meestal kun je variabelen uit deze array wel combineren tot een gewenst resultaat.

$_SESSION
We hebben nu de werking van onder andere de $_GET en $_POST superglobal gezien, en hoe we daarmee variabelen van buitenaf in een script kunnen krijgen. Maar wellicht dat je je wel eens afgevraagd hebt of er niet een manier is om variabelen beschikbaar te maken op een pagina zonder dat je deze via een formulier verstuurd of in de url zet.

Dat is nou precies waar je binnen PHP een sessievariabele voor kunt gebruiken. Deze kun je aanmaken op pagina1 en vervolgens op pagina2 weer uitlezen. De voorwaarde is dat je elke pagina waarop je sessievariabelen wilt gebruiken, begint met session_start(). Sessievariabelen worden tijdelijk opgeslagen op de server en zijn te gebruiken met de superglobal $_SESSION.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// Elke pagina waar we sessies gebruiken, beginnen met met session_start()
session_start();

// Declareren van sessievariabelen
$sNaam = 'Kees';
$_SESSION['naam'] = $sNaam;
$_SESSION['leeftijd'] = 42;
?>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// Elke pagina waar we sessies gebruiken, beginnen met met session_start()
session_start();

// Uitlezen van de sessievariabele
echo 'Hoi '.$_SESSION['naam'].' jij bent '.$_SESSION['leeftijd'].' jaar';
?>
Quote:
Hoi Kees jij bent 42 jaar

Een sessievariabele zal beschikbaar zijn, zolang de sessie nog actief is. Hoe lang dat is, is afhankelijk van de instellingen van de server. Het zou bijvoorbeeld 1 dag kunnen zijn, maar het is ook mogelijk dat de sessie bij het afsluiten van de browser al gesloten wordt.

In het volgende hoofdstuk zal ik dieper ingaan op het gebruik van sessievariabelen en zullen we een eerste loginscriptje schrijven.

$_COOKIE
Naast het gebruik van sessievariabelen om gegevens op meerdere paginas te kunnen gebruiken, kent PHP ook het gebruik van cookies voor dit doeleinde. Het verschil met sessievariabelen is dat cookies op de PC van de bezoeker opgeslagen worden. Ze kunnen dus handmatig verwijderd en gewijzigd worden en derhalve is het niet veilig om er gevoelige informatie in te zetten.

Cookies aanmaken
Het aanmaken van een cookie doen we met de functie setcookie().
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// De naam die we in een cookie op willen slaan.
$sNaam = 'Kees';

// Het aanmaken van de cookie met setcookie()
setcookie('cookieNaam', $sNaam, time()+3600);
?>

De eerste parameter van de setcookie() functie is de naam van de cookie. Daaraan kunnen we hem straks herkennen. Daarna volgt de inhoud van de cookie, in dit geval de naam, en tenslotte geven we het tijdstip waarop de cookie moet verlopen, op. Een cookie is net als een sessie namelijk maar een bepaalde tijd geldig, in dit geval dus een uur.

Uitlezen van de cookie
Voor het uitlezen van de cookie kunnen de de superglobal $_COOKIE gebruiken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'Welkom terug '.$_COOKIE['cookieNaam'];
?>
Quote:
Welkom terug Kees

Cookies gebruik je in de meeste gevallen om specifieke instellingen van een gebruiker langere tijd te bewaren. Bijvoorbeeld het automatisch inloggen als een gebruiker op een website terugkeert, wordt door middel van cookies gedaan.

$_REQUEST
De laatste superglobal die ik wil bespreken is $_REQUEST. Deze superglobal bevat een combinatie van de $_GET. $_POST en $_COOKIE arrays. In plaats van een voorbeeld te geven, wil ik het gebruik van deze juist variabele afraden.

Deze variabele heeft totaal geen meerwaarde boven de losse superglobals en kan alleen maar voor verwarring zorgen. Met deze superglobal weet je namelijk niet meer niet meer of een waarde nu uit de GET, POST of COOKIE array afkomstig is. Naast onduidelijkheid kan dit ook een potentieel veiligheidslek met zich meebrengen. Gewoon niet gebruiken dus.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Mijn eerste PHP script
  3. Variabelen
  4. Statements
  5. Loops
  6. Arrays
  7. Functies
  8. Formulieren
  9. Superglobals
  10. Sessies nader bekeken: een eerste loginscript
  11. Netjes scripten
  12. Debuggen: het oplossen van PHP fouten
  13. Slotwoord en referenties

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.