Hantering av formulär i en och samma PHP-fil
I föregående lektion placerades vårt formulär
på en sida och skickades till en annan.
Det är faktiskt inte nödvändigt. Om du lämnar
attributet action tomt eller tar bort det
helt, kommer formuläret att skickas till
samma sida.
Så här kommer det att fungera: vid första besöket på sidan fyller vi i formuläret med data och klickar på knappen. Därefter uppdateras sidan och dess kod kommer att köras igen, men nu med formulärdatan.
Låt oss titta på ett exempel. Låt oss säga att vi har ett formulär och dess hantering i en fil:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
Vid första besöket på sidan kommer funktionen var_dump
att skriva ut en tom array. Efter att formuläret skickats
kommer den att skriva ut formulärdatan. Det betyder att första
gången kommer $_GET att vara tom, och andra gången
- kommer den att innehålla formulärdatan.
Detta kan leda till problem. Låt oss säga att vi ska mata in siffror i formuläret och vill visa summan av dessa siffror på skärmen:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
I det här fallet kommer vi vid första besöket på sidan
att se PHP-fel relaterade till att
arrayen $_GET är tom, medan vi försöker komma åt
dess element.
Här bör sägas att du kanske inte ser några fel i webbläsaren. I så fall kontrollera att utskrift av PHP-fel är aktiverat, och se till att det är ditt första besök på sidan och att det inte finns någon formulärdata i adressfältet.
Låt oss åtgärda problemet. För att göra detta lägger vi till ett villkor där vi kontrollerar om formuläret har skickats.
Till exempel kan man kontrollera om $_GET
inte är tom. Om $_GET inte är tom -
betyder det att formuläret har skickats och vi kan utföra
additionen. Annars är det fortfarande
vårt första besök på sidan och additionen utförs
inte. Så, här är den korrigerade koden:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
Fråga användaren efter efternamn, förnamn och patronymikon (mellannamn). Efter att formuläret skickats, skriv ut de inmatade uppgifterna på skärmen.