5. Formulieren

In PHP wordt veel gebruik gemaakt van formulieren.
Je hebt immers geregeld gegevens van de gebruiker nodig en die input gebeurt altijd in een formulier.

5.1. De verzending

Het formulier zelf bestaat meestal uit HTML-code, maar de verzendknop zal de gegevens doorsturen naar een PHP-script op de server.
De openingsregel van het formulier wordt dan zoiets als:
<form method="post" action="verwerk.php">

Er zijn twee mogelijke 'methods':

5.2. Superglobals

Alle gegevens die de gebruiker in een formulier invult, zijn automatisch beschikbaar in het PHP-script dat ze moet verwerken via algemene variabelen, de superglobals $_GET en $_POST of – onafhankelijk van de gebruikte 'method' – $_REQUEST.
$_REQUEST kan de inhoud van zowel $_GET, $_POST als $_COOKIE bevatten.

Een andere veelgebruikte superglobal is $_SERVER.
Die passen we o.a. toe om een formulier naar zichzelf te posten, zodat de invoer gecontroleerd kan worden:
<form name="proef" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

Gebruik je een input type="file" in je formulier, dan heb je superglobal $_FILES nodig.
En daar komt wat meer bij kijken.

In het formulier moet je de juiste enctype meegeven, evenals de maximum bestandsgrootte in bytes:
<form enctype="multipart/form-data" action="..." method="POST">
  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  Bestand: <input type="file" name="mijnBestand" />
  <input type="submit" value="Verzenden" />
</form>

Daarna kan je bv. de bestandsnaam in je PHP-script gebruiken: $_FILES['mijnBestand']['name']
en het bestand in een eigen map op de server zetten (var $target = pad + bestandsnaam): move_uploaded_file($_FILES['mijnBestand']['tmp_name'], $target);
Meer uitleg vind je op PHP.net

5.3. Validatie

De validatie van een formulier gebeurt eigenlijk best in Javascript, d.w.z. in een client side script.
PHP wordt immers uitgevoerd op de server en voor elke controle krijg je dan heen-en-weer verkeer server/browser plus de gebruiker krijgt telkens opnieuw een leeg formulier voorgeschoteld. Alleen is server side validatie wel veiliger dan client side.

Nog enkele opmerkingen

5.4. Oefeningen

Oefening 1 form1

Oefening 2 form2

output in bericht2.php: "op [weekdag] eten we "
en dan afhankelijk van de gekozen dag (werk met een associatieve array):

Oefening 3 form3

Oefening 4 form4

Oefening 5 voorbeeld