Formulier

Altijd al eens willen weten hoe een formulier werkt op een site? Of heb je een idee maar weet je nog niet hoe je dat moet uitvoeren? Dan ben je aan het juiste adres. Een dynamische site start met de mogelijkheid dat je bezoeker iets kan invullen op je site. Dat is altijd een soort formulier. En PHP biedt je een vrij simpele manier om met formulieren om te gaan. Het start met het gebruik van Superglobals. Daarvan heeft PHP enkele gedefinieerd. Voor nu volstaan we met twee, namelijk $_GET en $_POST. De gedachte is dat PHP de gegevens van je formulier in een array stopt. Vervolgens kun je deze gegevens uit de array gebruiken.

// formulier.php
<form method="GET" action="naam.php">
<input type="text" name="naam">
<button type="submit">Verzenden</button>
</form>

// naam.php
<?php
echo $_GET['naam'];
?>

Dit scriptje laat heel snel zien wat de gedachte is achter het verwerken van een formulier. Op de eerste pagina heb je een klein formulier waarop je bezoeker de naam kan invullen. Vervolgens drukt bezoeker op de knop “submit” en verstuurt hij het naar de server. Op de pagina naam.php haal je met de Superglobal $_GET de variabel naam op uit de array. En zoals je hebt kunnen leren onder array is dit een associative array, vandaar dat je [‘naam’] ziet staan.

Veiligheid

Let op dat geen enkele bezoeker te vertrouwen is. Iedere mogelijkheid op je site om iets in te vullen is ook een gelegenheid voor kwaadwillende bezoekers om je site te hacken. Lukt het om een script te lanceren in je formulier dan kan een bezoeker je site overnemen. Daarom moet je altijd de ingevulde informatie opschonen. Dat betekent onder andere dat je < en > tags omzet naar html code. Maar ook op de server kant van je site moet je diverse controles uitvoeren voordat je iets met de informatie gaat doen. Laat je nooit verleiden tot controles aan de kant van de browser van de bezoeker (via bijvoorbeeld javascript), want deze methodes zijn zeer simpel te ontwijken. Op dit moment voert een uitgebreide tutorial te ver. We besteden hier apart aandacht aan.

Bij $_GET geef je sneller informatie prijs aan bezoekers. De informatie gaat namelijk via de url mee naar de pagina waarop je de info verwerkt. Voor een geoefend hacker is het dan een peulenschil om te zoeken naar achterdeurtjes om je site te hacken. Onze voorkeur gaat daarom uit naar de Superglobal $_POST.

// formulier.php
<form method="post" action="naam.php">
<input type="text" name="naam">
<button type="submit">Verzenden</button>
</form>

// naam.php
<?php
echo $_POST['naam'];
?>

Hetzelfde formulier maar nu met de method Post in plaats van Get. Groot verschil is dat Post de informatie in de body stopt van de HTTP request. Dit is minder makkelijk te onderscheppen en kan niet door iedereen ingekeken worden. Daarmee werp je alvast een kleine drempel op tegen hackers. In de praktijk zal je de afweging moeten maken welke method het beste past in jouw situatie.

De code in de voorbeelden is erg simpel. In vervolg hierop ga je leren hoe je een goed formulier bouwt met de nodige controles.