Lomakkeen käsittely yhdessä PHP-tiedostossa
Edellisessä oppitunnissa lomakkeemme sijaitsi
yhdellä sivulla, mutta lähetettiin toiselle.
Itse asiassa tämä ei ole välttämätöntä. Jos jätät
attribuutin action tyhjäksi tai poistat sen
kokonaan, lomake lähetetään samalle
sivulle.
Miten tämä toimii: ensimmäisellä käynnillä sivulla täytämme lomakkeen tiedoilla ja painamme nappia. Tämän jälkeen sivu päivittyy ja sen koodi suoritetaan uudelleen, mutta nyt lomakkeen tietojen kanssa.
Katsotaanpa esimerkkiä. Oletetaan, että meillä on yhdessä tiedostossa lomake ja sen käsittely:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
Ensimmäisellä käynnillä sivulla funktio var_dump
tulostaa tyhjän taulukon. Mutta lomakkeen lähetyksen jälkeen
se tulostaa lomakkeen tiedot. Eli ensimmäinen
kerta $_GET on tyhjä, ja toinen kerta
- sisältää lomakkeen tiedot.
Tämä voi johtaa ongelmiin. Oletetaan, että esimerkiksi, syötämme lomakkeeseen numeroita ja haluamme tulostaa näiden numeroiden summan näytölle:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
Tässä tapauksessa ensimmäisellä käynnillä sivulla
näemme PHP-virheitä, johtuen siitä, että
taulukko $_GET on tyhjä, ja me yritämme päästä
siihen.
Tässä on syytä sanoa, että sinulla ei ehkä virheitä näy selaimessa. Tässä tapauksessa tarkista, että PHP-virheiden näyttö on päällä, ja varmista, että tämä on ensimmäinen käynti sivulla ja osoiterivillä ei ole lomakkeen tietoja.
Korjataanpa ongelma. Tätä varten lisäämme ehdon, jossa tarkistamme, että lomake on lähetetty.
Esimerkiksi voidaan tarkistaa $_GET
tyhjyyden varalta. Jos $_GET ei ole tyhjä -
niin lomake on lähetetty ja voidaan suorittaa
summaus. Muussa tapauksessa meillä on vielä
ensimmäinen käynti sivulla ja summaus ei suoriteta.
Joten, tässä on korjattu koodi:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
Kysy käyttäjältä sukunimi, etunimi ja patronyymi. Lomakkeen lähetyksen jälkeen tulosta näytölle syötetyt tiedot.