Lomakkeiden käsittelytekniikat
Luennolla käydään läpi lomakkeiden käsittelytekniikoita ja WWW-ohjelmointia.
Lomakkeen toiminta
Kerrataan ensin lomake-elementtejä esimerkkilomakkeen avulla.
- Selainohjelma pyytää palvelimelta lomakesivun.
- Palvelin toimittaa sivun selaimelle.
- Käyttäjä täyttää ja hyväksyy lomakkeen. Selain lähettää lomakkeen tiedot WWW-palvelimella suoritettavalle ohjelmalle.
- Lomakkeelta tuleva data käsitellään ohjelman tekijän haluamalla tavalla.
Ohjelma voi tehdä esimerkiksi seuraavia toimenpiteitä:
- Erikoismerkkien käsittely (esim. ääkköset, rivinvaihdot).
- Tarkistukset syötteelle (esim. onko jokin kenttä oikean muotoinen, onko kaikkiin kohtiin vastattu).
- Tiedot lähetetään edelleen sähköpostitse.
- Tallennetaan tietokantaan.
- Tallennetaan suoraan osaksi jotain WWW-sivua.
- Lomakkeen tietojen jatkokäsittelyyn voidaan käyttää monenlaisia erilaisia ohjelmistoja.
- Ohjelma palauttaa käyttäjälle tietoja:
- Varmistuksen tietojen lähetyksen onnistumisesta.
- Tiedon, jos syötteessä oli jotakin virheitä.
- Tilauksen tai palautteen sisällön.
Lomakkeen tietojen lähettäminen vastaanottajalle
Seuraavassa käydään läpi erilaisia tapoja lähettää lomakkeen tiedot vastaanottajalle.
Tietojen lähettäminen suoraan sähköpostiin
Lomakkeen tiedot voidaan lähettää suoraan sähköpostiin seuraavan määrityksen avulla.
<form action="mailto:antti.j.ekonoja@jyu.fi" method="post"> ... </form>
Tätä mailto-tapaa ei pidä koskaan käyttää!
- Edellyttää käyttäjältä toimivaa ja oikeilla asetuksilla säädettyä sähköpostiohjelmaa.
- Lähetettävän tiedon muotoon ei voida vaikuttaa.
Tietojen lähettäminen ohjelmalle
Palvelimella suoritettavalla ohjelmalla mahdollistetaan tietojen jatkokäsittely mahdollisimman luotettavasti.
<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="post"> ... </form>
Lähettämisessä käytettävät tavat
Lomakkeen tietojen lähettämiseen on kaksi erilaista metodia (post ja get), joilla kummallakin on oma käyttökohteensa. Metodien välinen ero huomioidaan lomakkeen tiedot vastaanottavassa ohjelmassa.
post-metodi
<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="post"> ... </form>
- Käytetään silloin, kun ei haluta tietoja URL:n joukkoon tai kun lähetettävä tietomäärä on suuri.
- Käytetään, jos lomakkeen tiedoilla pyritään muuttamaan / lisäämään / poistamaan jonkin tietovaraston tietoja.
get-metodi
<form action="http://palvelin/cgi-bin/kasittelija.cgi" method="get"> ... </form>
- Lähettää lomakkeen sisällön URL:n mukana.
http://palvelin/ohjelma.cgi?nimi=Antti+Ekonoja&email=antti.j.ekonoja@jyu.fi
- Lomakkeen tiedot siis näkyvät osoitteen perässä selainikkunassa.
- Käytetään, jos lomakkeella on tarkoitus tehdä haku tai muu toiminto, joka ei vaikuta järjestelmän tilaan.
- Mahdollistaa kirjanmerkkien tekemisen, esim. Googlen haut.
- Mahdollistaa viittaamisen samaan sivuun uudestaan.
- Ei kannata käyttää suurien tietomäärien siirtämiseen:
- URL:eista tulee pitkiä ja kömpelöitä.
- HTTP-standardi ei aseta rajoituksia osoitekentän pituudelle (kts. RFC2616 luku 3.2.1), mutta jotkin vanhat selaimet/välityspalvelimet eivät välttämättä ymmärrä yli 255 merkin pituisia osoitteita.
enctype-attribuutti
- application/x-www-form-urlencoded
- Oletusarvo lomaketiedon lähetysmuodoksi, ei tarvitse erikseen merkitä.
- Tiedot kerätään yhteen merkkijonoon.
- Lomakekentät lähetetään muodossa name=value.
- Erilaiset tiedot erotetaan toisistaan &-merkillä.
- Erikoismerkit (välilyönnit, skandinaaviset merkit, erikoismerkit) koodataan URL-enkoodauksella (%XY-merkinnällä).
- Saatu merkkisarja täytyy parsia koneellisesti.
- multipart/form-data
- Kukin lomaketieto pidetään erillään.
- Erilliset lomaketiedot paketoidaan yhdeksi moniosaiseksi paketiksi.
- Tiedostojen lähettämisessä käytettävä tyyppi.
- Tarvitaan käytännössä vain silloin, kun lomakkeella lähetetään tiedostoja. Muutoin
enctype
voidaan jättää kokonaan pois. - Esim.
<form action="http://palvelin.com/cgi-bin/otanvastaantiedostoja.cgi" method="post" enctype="multipart/form-data"> <fieldset> <legend>Liitetiedosto</legend> <p><input type="file" name="siirrettava_tiedosto" /></p> </fieldset> <p><input type="submit" name="laheta" value="Lähetä" /></p> </form>
Hakulomake
Sivustohaun toteuttaminen vaatii melko hyvää ohjelmointitaitoa. Voimme kuitenkin käyttää hakukoneiden tarjoamia rajapintoja hakulomakkeen tekemiseksi. Tarvitsemme hakupalvelun, joka antaa rajoittaa haun omille sivuillemme. Lähtökohtana voimme tutkia, mitä parametreja osoiteriviltä löytyy tai millainen lomake hakukoneen Advanced search -sivulta löytyy. Näiden tietojen perusteella voimme tehdä oman hakulomakkeen ja laittaa sen käsittelijän osoittamaan hakukoneen ohjelmaan.
Google search basics: More search help
-sivulta löydämme, että jos hakutermissä on site:
, niin tällä voi rajoittaa hakua
WWW-osoitteen mukaan.
Googlen webbikäyttöliittymän ja haun kielikoodit -sivulta
löydämme myös, että parametri q
on hakutermi. Parametrilla as_q
voidaan lisätä myös muita hakutermejä.
Referenssidokumentteja tutkimalla löydämme myös parametrit ie
(hakutermien merkistökoodaus),
oe
(hakutulosten merkistökoodaus) ja hl
(Googlen käyttöliittymän kieli).
Näiden perusteella teemme lomakkeen, joka rajoittuu kurssisivustolle:
<form action="http://www.google.com/search" method="get"> <fieldset> <legend>Haku</legend> <input type="hidden" name="ie" value="iso-8859-1" /> <input type="hidden" name="oe" value="iso-8859-1" /> <input type="hidden" name="hl" value="fi" /> <input type="hidden" name="as_q" value="site:appro.mit.jyu.fi/www" /> <p><label for="hakusana">Hae kurssisivuilta</label> <input type="text" size="20" id="hakusana" name="q" value="" /></p> <p><input type="submit" value="Hae" /></p> </fieldset> </form>
Omille sivuille tehtävissä hauissa käy joskus niin, että Google ei löydä yhtään hakutulosta millään hakusanalla. Tähän syynä on se, että Google ei ole vielä indeksoinut sivuasi tietokantaansa. Automaattinen indeksointi vaatii sen, että joltain jo indeksoidulta sivulta on linkki sivullesi. Google tekee indeksoinnin yleensä noin kerran viikossa, eli ihan heti uudet sivut eivät Googlen avulla löydy mitenkään.
Käyttäjien kommentit