Formhåndtering i en enkelt PHP-fil
I den forrige lektion var vores form placeret
på én side, men blev sendt til en anden.
Det er faktisk ikke nødvendigt. Hvis du efterlader
attributten action tom eller fjerner den
helt, vil formularen blive sendt til den
samme side.
Hvordan det vil fungere: ved første besøg på siden udfylder vi formularen med data og klikker på knappen. Herefter vil siden blive genindlæst og dens kode køres igen, men nu med formdata.
Lad os se på et eksempel. Antag, at vi har en form og dens håndtering i én fil:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
Ved første besøg på siden vil funktionen var_dump
vise et tomt array. Men efter afsendelse af formularen
vil den vise formdataene. Det betyder, at første
gang vil $_GET være tom, og anden gang
- vil den indeholde formdata.
Dette kan føre til problemer. Antag for eksempel, at vi indtaster tal i formularen og ønsker at vise summen af disse tal på skærmen:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
I dette tilfælde vil vi ved første besøg på siden
se PHP-fejl, fordi
arrayet $_GET er tomt, og vi forsøger at tilgå
dets elementer.
Her skal det siges, at du muligvis ikke får vist fejl i browseren. I så fald skal du kontrollere, at visning af PHP-fejl er slået til, og sikre dig, at det er dit første besøg på siden, og at der ikke er formdata i adresselinjen.
Lad os løse problemet. For at gøre dette tilføjer vi en betingelse, hvor vi kontrollerer, om formularen er blevet afsendt.
For eksempel kan man kontrollere om $_GET
er tom. Hvis $_GET ikke er tom -
er formularen afsendt, og vi kan udføre
summeringen. Ellers er det stadig
vores første besøg på siden, og summeringen vil ikke blive udført.
Sådan, her er den rettede kode:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
Spørg brugeren om efternavn, fornavn og mellemnavn. Efter afsendelse af formularen, vis de indtastede data på skærmen.