Behandling av skjema i én PHP-fil
I forrige leksjon var skjemaet vårt plassert
på én side, og ble sendt til en annen.
Egentlig er dette ikke nødvendig. Hvis du lar
attributtet action stå tomt eller fjerner det
helt, vil skjemaet bli sendt til denne
samme siden.
Hvordan dette vil fungere: ved første besøk på siden fyller vi ut skjemaet med data og trykker på knappen. Etter dette vil siden bli oppdatert og koden vil kjøres på nytt, men nå med skjemadata.
La oss se på et eksempel. Anta at vi har et skjema og dets behandling 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øk på siden vil funksjonen var_dump
vise en tom matrise. Etter at skjemaet er sendt inn
vil den vise skjemadata. Det vil si at første
gang vil $_GET være tom, og andre gang
- vil den inneholde skjemadata.
Dette kan føre til problemer. Anta for eksempel at vi skal skrive inn tall i skjemaet og vil vise summen av disse tallene på skjermen:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
I dette tilfellet vil vi ved første besøk på siden
se PHP-feil, fordi
matrisen $_GET er tom, og vi prøver å få tilgang
til dens elementer.
Her bør det sies at du kanskje ikke får feil i nettleseren. I så fall sjekk at visning av PHP-feil er slått på, og forsikre deg om at det er første gang du besøker siden og at det ikke er noen skjemadata i adresselinjen.
La oss fikse problemet. For å gjøre dette legger vi til en betingelse der vi sjekker om skjemaet ble sendt inn.
For eksempel kan vi sjekke om $_GET
ikke er tom. Hvis $_GET ikke er tom -
betyr det at skjemaet ble sendt inn og vi kan utføre
addisjon. Ellers er det fortsatt
første besøk på siden og addisjon vil ikke bli utført.
Så, her er den korrigerte koden:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
Spør brukeren om etternavn, fornavn og patronym (mellomnavn). Etter at skjemaet er sendt inn, vis de innfylte dataene på skjermen.