PHP ja oliot
- Lomakkeen luominen
- Lomakkeen tietojen käsittely
- Oikeellisuustarkistukset
- Lomakeoliot taulukossa
- Lomake-elementtiryhmät
Näissä demoissa tutustutaan PHP:n olioihin.
Lomakkeen luominen
- Aloita uusi php-ohjelma, joka tuottaa yksinkertaisen xhtml-dokumentin
- Varmista, että php:n virheilmoitukset näytetään selaimessa lisäämällä
.htaccess-tiedostoon rivi:
php_value display_errors on
- Kopioi samaan kansioon formcontrol.php-tiedosto. Vaihda tiedoston nimi formcontrol.php:ksi
- Ota formcontrol.php käyttöön omassa php-ohjelmassasi:
require 'formcontrol.php';Opastus formcontrol.php:n sisältämiin luokkiin ja metodeihin löytyy luentosivulta.
- Luo uusi lomake johon lisäät ensin tekstikentän jolla kysytään
henkilön etunimeä. Käytetään CText-luokkaa:
// annetaan kentän nimeksi etunimi, arvoksi tyhjä ja labeliksi etunimi $etunimi = new Ctext("etunimi", "", "etunimi"); // tulostetaan lomakekenttä print $etunimi; - Varmista ohjelmasi toiminta selaimella.
- Lisää samaan tapaan tekstikentät sukunimen, osoitteen ja syntymävuoden
kysymiseen. CText-luokalle voi antaa neljäntenä parametrina
tekstikentän pituuden.
$sukunimi = new Ctext("sukunimi", "", "sukunimi"); $osoite = new Ctext("osoite", "", "osoite", 40); - Lisää seuraavaksi radiobuttonit joilla voidaan valita sukupuoli.
Nyt voit käyttää CRadio-luokkaa:
// kentän nimi on sukupuoli, arvo mies tai nainen ja otsikko 0 $mies = new CRadio("sukupuoli", "mies", "mies"); $nainen = new CRadio("sukupuoli", "nainen", "nainen"); -
Muista valita jompikumpi radiopainikkeista valmiiksi valituksi:
$nainen->set_checked(); - Samaan tapaan käytetään valintaruutuja. Lisää harrastusten valinta:
$hiihto = new CCheckbox("harrastus", "hiihto", "hiihto"); $juoksu = new CCheckbox("harrastus", "juoksu", "juoksu"); $pyoraily = new CCheckbox("harrastus", "pyoraily", "pyoraily"); $uinti = new CCheckbox("harrastus", "uinti", "uinti"); - Määrää jokainen luomasi lomakeolio tulostumaan ja testaa lomaketta selaimella.
Lomakkeen tietojen käsittely
- Jokainen luomasi lomakeolio osaa säilyttää lomakkeelle syötetyn arvonsa.
Lomakeoliota täytyy vain erikseen komentaa ottamaan käyttäjän
mahdollisesti syöttämät arvot:
$etunimi->set_from_request(); $sukunimi->set_from_request(); $osoite->set_from_request(); $mies->set_from_request(); $nainen->set_from_request(); $hiihto->set_from_request(); $juoksu->set_from_request(); $pyoraily->set_from_request(); $uinti->set_from_request(); -
Kenttien arvot saa selville get_value-metodilla. Tulosta kaikkien
kenttien arvot lomakkeen perään:
Jos valintaruutu tai radiobutton ei ole valittuna niin get_value-metodi ei myöskään palauta arvoa.print $etunimi->get_value(); print $mies->get_value(); print $nainen->get_value();
Oikeellisuustarkistukset
- Lomakeolioiden sisällön oikeellisuustarkistuksia varten
voi (pitää) itse tehdä haluamansa funktiot. Olio vain määrätään
käyttämään haluttua tarkitusfunktiota. Lisää
etunimi- ja sukunimi-kentille tarkistus, joka varmistaa että
kentät on täytetty:
// laitetaan virheilmoitukset päälle $etunimi->set_display_errors(true); // määrätään käytettäväksi tyhja-nimistä funktiota $etunimi->set_validate_func("tyhja"); // varsinainen tarkistusfunktio function tyhja($olio) { if ( !$olio->get_value() ) { return "Arvo puuttuu"; } return ""; }Mahdollinen virheilmoitus näkyy olion tulostumisen yhteydessä. Kokeile selaimella.
- Määrää osoite-olio käyttämään samaa tarkistusta kuin etunimi- ja sukunimi-kentät
- Kirjoita kaikille harrastusolioille yhteinen tarkistusfunktio, joka varmistaa, että harrastuksen arvo on jokin sallituista. Tee vastaava funktio myös sukupuolen valinnalle.
-
Virhetarkistuksen lisääminen aiheuttaa turhia virheilmoituksia jos
lomaketta ei ole vielä kertaakaan lähetetty. Tätä varten voit lisätä lomakkeelle
yhden piilokentän:
Nyt voit tarkistaa onko piilokentälle asetettu arvo. Jos arvo löytyy niin virhetarkistuksetkin voi asettaa päälle muussa tapauksessa ei.<input type="hidden" name="submitted" value="1" />
Lomakeoliot taulukossa
Yleensä ei ole järkevää luoda erillistä muuttujaa jokaisesta lomakekentästä vaan käyttää taulukoita. Muuta ohjelmasi toimimaan taulukoilla:
-
Luo tekstikentät taulukkoon ja tulosta ne silmukassa
$teksti[] = new Ctext("etunimi", "", "etunimi"); $teksti[] = new Ctext("sukunimi", "", "sukunimi"); $teksti[] = new Ctext("osoite", "", "osoite", 40); - Tarkista piilokentän avulla onko lomake jo lähetetty ja jos on
niin tee tarkistukset:
if ( isset($_REQUEST['submitted']) ) { foreach ($teksti as $olio ) { $olio->set_from_request(); $olio->set_display_errors(true); $olio->set_validate_func("tyhja"); } } - Lopuksi tulosta oliot näkyville:
foreach ($teksti as $olio ) { print $olio; } - Luo vastaavalla tavalla sukupuoli- ja harrastus-valintoihin liittyvät oliot omiin taulukoihinsa
- Tulosta sivun lopuksi olioiden arvot. Kätevintä on sijoittaa kaikki lomakeoliot yhteen taulukkoon josta ne on helppoa tulostaa yhdessä silmukassa.
Lomake-elementtiryhmät
Hyvin usein lomake-elementtejä pitää käsitellä ryhminä.
- Lisätään lomakkeelle valikko josta voi valita lempihedelmiään:
$optiot = array("Banaani" => "bansku", "Omena" => "omppu", "Appelsiini" => "appl", "Kiwi" => "kiwi"); // viimeinen parametri kertoo oletusvalinnan järjestysnron $selectmult = new CSelectMultipleGroup("hedelmat",$optiot,"Valitse hedelmiä:", 2); -
Hedelmiä saattaa valita useampia joten kentän arvo(t) palautetaan taulukkona
mikä pitää huomioida tulostuksessa:
if ( is_array($arvo) ) { foreach($arvo as $apu) { print $apu; } } else { print $arvo; } - Sijoita kaikki lomakeoliosi samaan taulukkoon. tulosta sivun lopuksi kaikkien olioiden arvot tästä taulukosta.
- Tarviiko tälle hedelmäryhmälle rakentaa erillinen tarkistusfunktio?
- Muuta harrastukset ja sukupuoli käyttämään ryhmäolioita CRadioGroup ja CCheckboxGroup
$sukupuolet = array("mies" => "mies", "nainen" => "nainen"); $group = new CRadioGroup("sukupuoli",$sukupuolet, 1); $lajit = array("hiihto" => "hiihto", "juoksu" => "juoksu", "pyoraily" => "pyoraily", "uinti" => "uinti"); // valitaan oletuksena toinen ja kolmas laji (juoksu ja pyöräily) $group = new CCheckboxGroup("harrastus",$lajit,array(1,2)); - Lisää ohjelmasi loppuun tarkistus onko kaikki kentät täytetty oikein. Tarkista is_valid-metodilla onko kullakin oliolla kunnollinen arvo. Jos kaikki on ok niin tulosta teksti Hienoa, sait lomakkeen täytettyä oikein!.
- Muuta hedelmäolioiden arvoiksi hedelmien hinta. Jos lomake on täytetty oikein niin laske yhteen paljonko hedelmiin on mennyt rahaa. Käy silmukassa kaikki oliot läpi ja kun vastaan tulee "hedelmät"-niminen olio niin laske summa sen sisältämistä arvoista.
- Laske myös keskiarvo yhden hedelmän hinnalle
- Kuvitellaan että hedelmäkentän hinta tarkoittaa kilohintaa. Lisää lomakkeelle tekstikentät joihin käyttäjä voi syöttää syömiensä hedelmien määrät. Laske lopuksi aidot kulut kilohintojen ja määrien perusteella. Laske kulut vain valittujen hedelmien mukaan ja jätä huomiotta jos määriä on syötetty myös sellaisille hedelmille joita ei ole valittu.

