Van één naar oneindig
In PHP kunnen we die ene parameter nu opvangen via $_GET[‘p’]. Wat krijgen we dan te zien? Als we teruggaan naar de voorbeeld URL (de handige versie), zien we dit: home/lang=nl/id=5.
Met een beetje PHP kennis, kunnen we nu heel handig de explode() functie gebruiken op deze string, de / scheidt namelijk alle parameters die we hebben. Dan hebben we de parameters dus al los. We doen het volgende:
Code (php)
$aParameters ziet er nu zo uit: array(“home”, “lang=nl”, “id=5”). Ik hoop dat je hem al aan ziet komen. In de parameters zit nog steeds dat =’je, waardoor niet alle parameters direct al waardes zijn van een parameter. We doorlopen ieder element van de array $aParameters, kijken of daar een = in zit en laten daar ook even explode() op los, i.c.m. met list() hebben we dat varkentje zo gewassen.
Code (php)
We hebben nu in $key en $value de naam en de waarde van de parameter zitten. Die stoppen we opnieuw in $_GET, zodat het lijkt alsof ze uit de URL komen – en je, bij verandering van je URLs in deze nette, geen wijzigingen qua variabelen hoeft door te voeren.
Code (php)
$_GET wordt ondertussen weer gevuld met de nodige parameters uit de URL. Maar wat gebeurt er nu met de parameters waar geen = in zitten, en die dus al direct een waarde zijn? Dat doen we ook heel simpel. Alleen vergt dit wel weer wat wijzigingen mocht je je huidige website om willen bouwen naar deze nette URLs.
We doen het volgende: de eerste naamloze waarde die we hebben (dus zonder een = in de parameter) kennen we toe aan $_GET[‘p’]. Die hebben we verder toch niet meer nodig, en meestal bevat de eerste naamloze waarde toch wel de naam van de pagina. We maken daarbij gebruik van een teller. Zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if(!empty($_GET) && isset($_GET['p'])) {
$aParameters = explode("/", $_GET['p']);
$iTeller = 0;
foreach($aParameters as $sParameter) {
if(preg_match("_=_", $sParameter)) {
list($key, $value) = explode("=", $sParameter);
$_GET[$key] = $value;
} else {
if($iTeller > 0) {
$_GET['param'.$iTeller] = $sParameter;
} else {
$_GET['p'] = $sParameter;
}
$iTeller++;
}
}
}
?>
if(!empty($_GET) && isset($_GET['p'])) {
$aParameters = explode("/", $_GET['p']);
$iTeller = 0;
foreach($aParameters as $sParameter) {
if(preg_match("_=_", $sParameter)) {
list($key, $value) = explode("=", $sParameter);
$_GET[$key] = $value;
} else {
if($iTeller > 0) {
$_GET['param'.$iTeller] = $sParameter;
} else {
$_GET['p'] = $sParameter;
}
$iTeller++;
}
}
}
?>
We noemen iedere parameter zonder = na de eerste: param$iTeller, beginnend met $iTeller vanaf 1. De eerste parameter na $_GET[‘p’] wordt dus $_GET[‘param1’]. Als we dat met een voorbeeldje doen, komt $_GET er zo uit te zien, nadat hij behandelt is door dit script:
Voorbeeld URL: http://www.jouwdomein.nl/nieuws/phphulp/id=5
Uitkomst: $_GET = array( ‘p’ => ‘nieuws’, ‘param1’ => ‘phphulp’, ‘id’ => ‘5’);
Je kunt zo oneindig veel parameters hebben, en toch worden ze allemaal netjes in $_GET gestopt. Je kunt deze code in een apart bestandje zetten en includen, maar je kunt het ook bovenaan in je index.php zetten (als je verder toch alles via $_GET include - zal eigenlijk ook wel moeten).
« vorige pagina | volgende pagina »