Filters in PHP 5

  1. Inleiding
  2. Wat is externe data?
  3. Filters en constanten
  4. Functies voor het toepassen van filters
  5. Filteren van GET en POST waarden
  6. Flags en options
  7. Callback filter
  8. Slotwoord en referenties
  9. Reacties op deze tutorial

Filteren van GET en POST waarden

Op dit moment hebben we twee van de vier functies die je kunt gebruiken in combinatie met filters behandeld. De overgebleven functies, filter_input() en filter_input_array(), kun je gebruiken om input van bijvoorbeeld een gebruiker te filteren.

Deze manier van controleren van informatie is uitermate geschikt voor bijvoorbeeld het verwerken van een formulier. Natuurlijk kunnen we met filter_var() wel een variabele uit de $_POST array controleren, maar PHP heeft daar ook een andere functie voor.

De filter_input() functie
Binnen deze functie maken we gebruik van de voorgedefinieerde constanten INPUT_POST en INPUT_GET om waarden uit respectievelijk de $_POST en $_GET array te benaderen.

Voorbeeld 8: Een waarde uit de $_GET array controleren
Code
1
2
3
4
<?php
// URL: http://www.mijnsite.nl/index.php?pagina=4
$pagina filter_input(INPUT_GET'pagina'FILTER_VALIDATE_INT);
?>

Met dit scriptje controleren we of de variabele $_GET['pagina'] een integer is. Allereerst zien we het gebruik van de filter_input() functie. De constante INPUT_GET geeft aan dat we informatie uit de $_GET array willen hebben. De tweede parameter geeft de betreffende key uit de $_GET array aan. De derde parameter tenslotte bevat de toe te passen filter.

Nu is deze controle natuurlijk nog niet helemaal voltooid. We hebben nu alleen een variabele $pagina met daarin het resultaat van de filter functie. Dit kan als volgt verder verwerkt worden:

Voorbeeld 8: Een waarde uit de $_GET array controleren (2)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// URL: http://www.mijnsite.nl/index.php?pagina=4
$pagina filter_input(INPUT_GET'pagina'FILTER_VALIDATE_INT);

if(
is_null($pagina))
{
    echo 
'Er is geen pagina opgegeven';
}
elseif(
$pagina === FALSE)
{
    echo 
'De opgegeven pagina is geen integer';
}
else
{
    echo 
'De opgevraagde pagina is: '.$pagina;
}
// Output: De opgevraagde pagina is 4
?>


De functie filter_input_array()
Naast het controleren van een enkele GET of POST variabele, kunnen we ook de hele $_GET of $_POST array in een keer filteren. Deze functie werkt bijna hetzelfde als de filter_var_array() functie, alleen geef je nu in plaats van een array met variabelen de constante INPUT_POST of INPUT_GET op.

Voorbeeld 9: Filteren van de hele $_POST array
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/* Velden uit een POST formulier:
- leeftijd
- string
- email 
*/

$filters = array(
    
'leeftijd' => FILTER_VALIDATE_INT,
    
'string' => FILTER_SANITIZE_SPECIAL_CHARS,
    
'email' => FILTER_VALIDATE_EMAIL,
    
'bestaat_niet' => FILTER_VALIDATE_INT );

$resultaten filter_input_array(INPUT_POST$filters);
?>

De array $resultaten bevat nu alle gefilterde resultaten.

Natuurlijk zijn er vele manieren om zoiets aan te pakken. Het voordeel echter van deze manier van filteren is dat je zeker weet dat een filter altijd maar 3 mogelijke uitkomsten heeft: de gefilterde correcte waarde, FALSE of NULL. De resultaat array zou je nu met een foreach loop dus kunnen uitlezen en kunnen testen op deze condities.

Voorbeeld 10: Verwerken van gefilterde gegevens uit een $_POST array
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
/* Velden uit een POST formulier:
- leeftijd
- string
- email 
*/

$filters = array(
    
'leeftijd' => FILTER_VALIDATE_INT,
    
'string' => FILTER_SANITIZE_SPECIAL_CHARS,
    
'email' => FILTER_VALIDATE_EMAIL,
    
'bestaat_niet' => FILTER_VALIDATE_INT );

$resultaten filter_input_array(INPUT_POST$filters);

foreach(
$resultaten as $veld => $resultaat)
{
    if(
is_null($resultaat))
    {
        echo 
'Je bent vergeten om '.$veld.' in te vullen.';
    }
    elseif(
$resultaat === FALSE)
    {
        echo 
'Je hebt geen geldige waarde ingevuld voor: '.$veld;
    }
    else
    {
        echo 
'Voor '.$veld.' heb je '.$resultaat.' ingevuld.';
    }
}
?>

Vorige Volgende