Vormi töötlemine ühes PHP failis
Eelmises õppetükis oli meie vorm asetatud
ühel lehel ja saadetud teisele.
Tegelikult pole see vajalik. Kui jätta
atribuut action tühjaks või eemaldada see
sootuks, saadetakse vorm sellele
samale lehele.
Kuidas see töötab: esimesel lehele sisenemisel täidame vormi andmetega ja vajutame nuppu. Pärast seda värskendub leht uuesti ja selle kood käivitatakse uuesti, kuid nüüd juba vormi andmetega.
Vaatame näidet. Olgu meil ühes failis vorm ja selle töötlemine:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
Esimesel lehele sisenemisel funktsioon var_dump
väljastab tühja massiivi. Pärast vormi saatmist
väljastab see juba vormi andmed. See tähendab, et esimene
kord on $_GET tühi, ja teine kord
- sisaldab vormi andmeid.
See võib põhjustada probleeme. Olgu näiteks me sisestame vormi numbreid ja tahame ekraanile kuvada nende arvude summat:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
Sel juhul esimesel lehele sisenemisel
näeme PHP veateateid, mis on seotud sellega, et
massiiv $_GET on tühi, aga me pöördume
selle elementide poole.
Siinkohal tuleb öelda, et teil ei pruugi veateateid brauseris ilmuda. Sel juhul kontrollige, kas PHP veateadete kuvamine on sisse lülitatud, ja veenduge, et te sisestute lehele esimest korda ja aadressireal pole vormi andmeid.
Parandame probleemi. Selleks lisame tingimuse, milles kontrollime, et vorm on saadetud.
Näiteks saab kontrollida $_GET
mittetühjususe suhtes. Kui $_GET pole tühi -
siis on vorm saadetud ja saab teostada
summeerimise. Vastasel juhul on meil veel
esimene lehele sisenemine ja summeerimist ei teostata.
Nii, siin on parandatud kood:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
Küsige kasutajalt perekonnanimi, eesnimi ja isanimi. Pärast vormi saatmist kuvage ekraanile sisestatud andmed.