## Multipass scripts

Het is mogelijk om de code van het formulier te combineren met het PHP-script voor de afhandeling van het formulier. In plaats van twee aparte bestanden heb je dan slechts één bestand. Dat betekent dat we het formulier als onderdeel integreren in het PHP-script. In het aangepaste script is een extra voorwaardelijk statement ingebouwd om te bepalen wat er moet gebeuren:

1. Als het script wordt uitgevoerd terwijl er géén keuze is gemaakt (in feite geen waarde aan de variabele is toegekend) moet alleen het formulier worden getoond.
2. Als het script wordt uitgevoerd als er wel een waarde aan de variabele is toegekend, wordt het formulier afgehandeld.

We illustreren het gebruik van een zogenaamd multipass script, dat is een script dat zichzelf aanroept om te worden uitgevoerd, aan de hand van een al eerder uitgewerkte opdracht voor de afhandeling van een formulier. Het gaat om de opdracht waarbij gecontroleerd wordt wat de hoofdstad van de provincie Limburg is. In het formulier worden radiobuttons gebruikt:
De HTML-code voor het formulier is:

<!DOCTYPE html>
<html lang="nl">
<head>
<title>aan de slag 32a</title>
<meta charset="utf-8">
</head>
<body>
<form name="form1" method="post" action="aandeslag_32b.php">
Wat is de hoofdstad van de provincie Limburg?<br><br>
<input type="radio" name="hoofdstad" value="Weert">Weert<br>
<input type="radio" name="hoofdstad" value="Maastricht">Maastricht<br>
<input type="radio" name="hoofdstad" value="Heerlen">Heerlen<br><br>
<input type="submit" value="Verstuur">
</body>
</html>

In de HTML-code wordt voor de afhandeling van het formulier verwezen naar aandeslag_32b.php.
De code van dit bestand is:
<?php
$antwoord = $_POST["hoofdstad"];
echo "Je antwoord op de vraag was: <b>$antwoord</b><br>";
if($antwoord == 'Maastricht') {
echo "Goed geantwoord!";
}
else {
echo "Dat is helaas niet goed!";
}
?>
Kiezen we voor Maastricht en klikken we op de knop verstuur dan is het resultaat:

We laten nu zien hoe de twee bestanden gecombineerd kunnen worden.
Het resultaat is één bestand:

<!DOCTYPE html>
<html lang="nl">
<head>
<title>multipass</title>
<meta charset="utf-8">
</head>
<body>
<?php
if(!empty($_POST)) {
$antwoord = $_POST["hoofdstad"];
echo "Je antwoord op de vraag was:
<b>$antwoord</b><br>";
if($antwoord == 'Maastricht') {
echo "Goed geantwoord!";
}
else {
echo "Dat is helaas niet goed!";
}
}
else {
?>
<form name="form1" method="post"
action="multipass.php">
Wat is de hoofdstad van de provincie
Limburg?<br><br>
<input type="radio" name="hoofdstad"
value="Weert">Weert<br>
<input type="radio" name="hoofdstad"
value="Maastricht">Maastricht<br>
<input type="radio" name="hoofdstad"
value="Heerlen">Heerlen<br><br>
<input type="submit" value="Verstuur">
</form>
<?php
}
?>
</body>
</html>

Het is bestand wordt opgeslagen als multipass.php.
Als je het script voor de eerste keer opent, is er nog geen optie geselecteerd uit het formulier. Dat houdt dus automatisch in dat er nog geen waarde is gepost. Het formuliergedeelte zal daarom worden afgebeeld op het scherm om je in staat te stellen een keuze te maken. Als je op de knop Verstuur klikt, roept het script zichzelf aan. In dat geval wordt er wel een waarde gepost. Vervolgens wordt gecontroleerd of de geselecteerde stad de hoofdstad van de provincie Limburg is of niet en volgt er een melding op het scherm.
Bij de action in de form-tag hadden we ook de volgende code kunnen invullen:
<form method="post" action=""<?php echo $_SERVER["PHP_SELF"]; ?>">

PHP_SELF verwijst naar de bestandsnaam van de pagina zelf. Dus naar multipass.php. Tijdens het uitvoeren van de pagina zal $_SERVER["PHP_SELF"] vervangen worden door de paginanaam. Het resultaat is dat ook in dit voorbeeld de pagina zichzelf aanroept in plaats van een andere PHP-pagina.
In de online editor die we voor Enigma gebruiken, werkt de code <?php echo $_SERVER["PHP_SELF"]; ?>" niet.