Lomakkeiden käsittelytekniikat - Luento 6
- Luentotaltiointi
- Kertaus
- Lomakkeen toiminta
- Lomakkeen tietojen lähettäminen vastaanottajalle
- Lomakkeen käsittely CGI-ohjelmalla
- Ohjelmien tietoturva ja tiedosto-oikeudet
- Tekniikoita käsittelyyn ja tarkistuksiin
Luennolla käydään läpi lomakkeiden käsittelytekniikoita.
Kertaus
- Myös option-elementillä voidaan määritellä value
- Submit-nappuloita voi olla useita yhdellä lomakkeella
- Lomakkeen toiminta mobiiliympäristössä
Lomakkeen toiminta
- 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.
- Lomakkeella oleva 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 jonkin kenttä oikean muotoinen, onko kaikkiin kohtiin vastattu).
- Tiedot lähetetään edelleen sähköpostitse.
- Tallennetaan tietokannaksi.
- 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.
- 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:jmantyla@mit.jyu.fi" method="post"> ... </form>
Tavan käyttäminen ei kannata, ellei ole aivan pakko, koska tavassa piilee seuraavia ongelmia.
- Vaatii käyttäjältä selaimen konfigurointia!
- Ongelmia voi myös esiityä lähetettävän tiedon muodossa!
Tietojen lähettäminen ohjelmalle
Palvelimella suoritettavalla ohjelmalla mahdollistetaan tietojen jatkokäsittely mahdollisimman luotettavasti. Jos suinkin mahdollista, niin jonkinlaista ohjelmaa kannattaa käyttää tietojen vastaanottamisessa.
<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, joilla kummallakin on oma käyttökohteensa. Metodien välinen ero huomioidaan lomakkeen tiedot vastaanottavassa ohjelmassa. Lähetettävän tiedon muodon voi myös tarvittaessa päättää.
method
- post-metodi
- Käytetään silloin, kun ei haluta tietoja URL:n joukkoon tai kun lähetettävä tietomäärä on suuri.
- Yleensä "parempi" tapa!
- get-metodi
- Lähettää lomakkeen sisällön URL:n mukana.
http://palvelin/ohjelma.cgi?nimi=Jukka+M%E4ntyl%E4&email=jmantyla@cc.jyu.fi
- Lomakkeen tiedot siis näkyvät osoitteen perässä selainikkunassa.
- Käytetään esimerkiksi palveluissa, joihin voidaan viitata helposti myös toisilla lomakkeilla.
- Ei kannata käyttää suuremman tiedon siirtämiseen. (Kokorajoitus max. 256 merkkiä)
- Lähettää lomakkeen sisällön URL:n mukana.
enctype
- application/x-www-form-urlencoded
- 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 %XY-merkinnällä
- Pitkä referenssitaulukko osoitteessa http://www.w3schools.com/html/html_ref_urlencode.asp
- Lyhyempi Tietokone ja tietoverkot työvälineenä kevät 2004 luennolla 5.
- Saatu merkkisarja täytyy parsia koneellisesti
- Oletusarvo lomaketiedon lähetysmuodoksi, ei tarvitse erikseen merkitä.
- multipart/form-data
- Kukin lomaketieto pidetään erillään.
- Erilliset lomaketiedot paketoidaan yhdeksi moniosaiseksi paketiksi.
- Tiedostojen lähettämisessä käytettävä tyyppi.
Lomakkeen käsittely CGI-ohjelmalla
Tietojen lähettäminen sähköpostiin
Tarvittavat tiedostot:
- laheta.txt - cgi-ohjelma, joka käsittelee ja lähettää WWW-lomakkeelta saadut tiedot sähköpostiin.
- laheta.conf - konfigurointi-tiedosto, jolla ohjataan cgi-ohjelman toimintaa.
- lomake.html - esimerkki-lomake ohjelman testaukseen
CGI-ohjelma ja conf-tiedosto on siirrettävä samaan hakemistoon. laheta.txt:n nimi on muutettava muotoon laheta.cgi ja sille on annettava suoritusoikeus. Lomake voi olla eri hakemistossa.
conf-tiedosto
laheta.conf-tiedostossa määritellään mihin lomakkeen tieto lähetetään ja millainen sivu näytetään lomakkeen lähettämisen jälkeen. conf-tiedoston on oltava samassa hakemistossa laheta.cgi:n kanssa.
- email-elementin sisälle tulee sähköpostiosoite, johon lomakkeen tiedot lähetetään.
- h1, title ja p-elementteihin voi kirjoittaa tekstiä, jotka tulevat kyseisinä elementteinä lomakkeen käsittelyn jälkeiseen palautesivuun. Vaihtoehtoisesti url-elementteihin sisälle voi määritellä kokonaan oman palautesivun osoitteen.
- css-elementtiin voi määritellä palautesivulla käytettävän css-tiedoston.
Erityiskentät
- lahettajan_nimi-niminen (name-ominaisuus) kenttä tulee käsittelijän lähettämän sähköpostin lähettäjän nimeksi (engl. From)
- lomake_lahettaja-kenttä tulee käsittelijän lähettämän sähköpostin lähettäjän e-mail-osoitteeksi. Lomakkeen tiedot lähetetään kopiona myös lomakkeen täyttäjälle tässä kentässä olevaan osoitteeseen.
- Arvot voidaan määritellä seuraavien piilokenttien avulla.
<input type="hidden" name="lomake_lahettaja" value="email_osoite@palvelin.fi" /> <input type="hidden" name="lahettajan_nimi" value="Lähettäjän nimi" />
- Jos kysyt lomakkeella käyttäjältä sähköpostiosoitteen ja/tai nimen, niin voit käyttää edellisiä kenttiä piilottamattomina. Tällöin
sähköpostitse tulevassa viestissä näkyy lähettäjän sähköpostiosoite ja/tai lähettäjän nimi. Esimerkiksi:
<label for="nimi">Lomakkeen täyttäjän nimi:</label> <input type="text" id="nimi" name="lahettajan_nimi" value="Lähettäjän nimi" /> <label for="sposti">Lomakkeen täyttäjän sähköpostiosoite:</label> <input type="text" id="sposti" name="lomake_lahettaja" value="email_osoite@palvelin.fi" />
- Kenttää ei siis välttämättä tarvitse käyttää piilokenttänä!
Ostoskori
Ostoskorin käsittely
Tarvittavat tiedostot löytyvät osoitteesta (huom. keskeneräinen versio!):
http://appro.mit.jyu.fi/ostoskori/
Tallenna tiedostot esim. www-hakemiston cgi-bin-hakemistoon. Muuta ostoskori.txt -tiedoston nimeksi ostoskori.cgi
Ohjelma tunnistaa seuraavat muuttujat (name-attribuutti):
- poista - Aiheuttaa halutun tuotteen / tuotteiden poistamisen
- update - Päivittää tuotteiden lukumääriä
- lisaa - Lisää tuotteita
- tilaa - Lähettää tilauksen
Kyseisten muuttujien arvoilla (value) ei ole merkitystä kunhan jonkin arvo on määritelty. Vaaditun name-attribuutin voi määritellä esimerkiksi submit-painikkeeseen:
<input type="submit" name="lisaa" value="Lisää ostoskoriin!" />
Näiden lisäksi kaikki conf-tiedostossa määriteltyjä tuotteita vastaavat lomake-elementit (name) käsitellään tuotteina ja niiden arvot (value) tuotteiden lukumäärinä. Lisäys voidaan toteuttaa joko POST- tai GET-metodin kautta. Tällöin esimerkiksi linkistä voi tehdä viittauksen ostoskoriin ja muuttaa samassa yhteydessä ostoskorin sisältöä.
conf-tiedosto
Seuraavat tiedot määräävät miten ostoskori käsitellään tilattaessa:
- email - mihin tiedot lähetetään
- save - mihin tilaukset tallennetaan
- xhtml - tilauslomakkeen osoite
- tuote - tämän nimisiä (name) kenttiä voidaan lisätä ostoskoriin
- nimi - tuotteen nimi
- hinta - tuotteen hinta
Seuraavat otetaan ensisijaisesti ostoskori.conf-tiedostosta, mutta voidaan myös määritellä myös tilauslomakkeella name-value-parilla (esim. jos halutaan käyttäjän antaa tiedot).
- from - tilauslomakkeen lähettäjän sähköpostiosoite
- name - tilaajan nimi
- subject - sähköpostin aihe
Ohjelmien tietoturva ja tiedosto-oikeudet
Ohjelmia käytettäessä on varmistettava, ettei käyttäjä pääse tekemään ohjelmalla muuta kuin mitä sillä on tarkoitettu tehtävän.
- Jokainen käyttäjä voi tehdä oman lomakkeen, jolla kutsuu tekemääsi CGI-ohjelmaa!
- Tiedostojen ja hakemistojen oikeudet oikein!
- Ohjelman sisältävälle hakemistolle ainoastaan ajo-oikeus (x).
- Ohjelmalle on annettava luku- (r) ja ajo-oikeus (x) kaikille käyttäjille.
- Jos ohjelma kirjoittaa palvelimelle tiedostoon, niin tällöin komento chmod u+s ohjelma.cgi antaa mahdollisuuden ajaa ohjelmaa omistajan oikeuksilla. Tällöin on oltava varma siitä mitä ohjelma tekee!
- Oikeuksia voidaan supistaa myös WWW-palvelimen asetuksista. Esim. people.cc.jyu.fi:tä www:n kautta selaileva käyttäjä ei voi listata r-oikeudella varustettua hakemistoa eikä voi ajaa ohjelmia muiden käyttäjien oikeuksilla.
- Käyttäjän syöte tutkittava ainakin seuraavien erikoismerkkien varalta.
& ; ´ ` \ " * ? ~ < > ^ () [] {} $ \n \r
- Ymmärrä valmiiden ohjelmien toiminta ennen käyttöönottoa!
- Lomakkeelta tulevia asioita ei saa laittaa suoraan komentoriville!
- Kokoa skriptit yhden hakemiston alle.
- Älä pidä skriptien keskeneräisiä versioita näkyvillä.
- Käytä käännettäviä kieliä tulkittavien sijaan, jos mahdollista.
Tekniikoita käsittelyyn ja tarkistuksiin
Vuorovaikutteisuutta ja tiedon käsittelyä voidaan hoitaa eri tyyppisillä tekniikoilla, joilla kullakin on omat vahvuutensa. Tekniikat voidaan jakaa kahteen ryhmään: palvelinpuolen ja selainpuolen tekniikoihin. Vaihda esimerkeissä dokumentin lomake.html form-elementin action- attribuuttiin sopiva ohjelma.
Palvelinpuolen tekniikat
Palvelinpuolen tekniikat toteutetaan siten, että sivujen luonti ja käsittely hoidetaan palvelimessa ajettavalla ohjelmalla. Ohjelma käsittelee tietyllä tekniikalla tehtyä sivustoa suhteessa käyttäjän antamiin tietoihin ja palauttaa tavallisen XHTML-sivun. Palvelinpuolen tekniikoiden etuja ovat mahdollisuus tiedon tallentamiseen ja se, ettei selaimen tarvitse tukea muuta kuin standardia XHTML:ää.
CGI
CGI (Common Gateway Interface) määrittelee miten ja millaista tietoa voidaan välittää WWW-palvelimelta tietoa käsittelevälle ohjelmalle. Itse ohjelma toteutetaan jollain ohjelmointikielellä, kuten esimerkiksi Perl, Python, C ja C++. Näistä suosituin on tulkattava kieli Perl (ohjelmaa ei käännetä konekielelle vaan palvelimeen on asennettava Perl- tulkki).
Yksinkertainen CGI-esimerkki - Lomake
PHP
PHP (HyperText Preprocessor) on dynaamisten WWW-sovellusten tekemiseen tarkoitettu tekniikka. PHP toimii siten, että ohjelmakoodia upotetaan XHTML-sivun sekaan. Palvelimella oleva PHP-tulkki esiprosessoi muuttujien ja muualta haettavien tietojen perusteella koodit. Koodi voi lisätä sivuun lisää XHTML-elementtejä tai tehdä jonkun muun toimenpiteen (esimerkiksi tallentaa tietoa tietokantaan).
- php.net - tietolähde PHP:n maailmaan
- WWW-sovellukset-kurssi.
ASP
ASP on PHP:n kaltainen palvelimessa käsiteltävä ohjelmakoodin upotustekniikka, jota käytetään lähinnä Microsoftin palvelimissa (saatavilla myös Apacheen). Ohjelmointikielenä käytetään tavallisesti VBScriptiä.
ASP-esimerkki - Lomake - kokeile webserver1-palvelimella (eli V-asemalla)
Servletit ja JSP
Servletit ovat pieniä palvelimella ajettavia Java-kielellä tehtyjä ohjelmia, joilla voidaan luoda dynaamisesti sivuja ja tehdä muita palvelinkoneella suoritettavia toiminteita. JSP on PHP:n ja ASP:n kaltainen upotustekniikka, jossa koodi kirjoitetaan XHTML:n sekaan. JSP-tulkki kääntää sivut suoritettaviksi Servleteiksi.
Selainpuolen tekniikat
Selainpuolen tekniikoilla voidaan toteuttaa monipuolista vuorovaikutteisuutta ja toiminnallisuutta sivustolle. Esimerkiksi lomakkeen tarkistukset voidaan tehdä sopivilla selaintekniikoilla. Ongelmana on, että selainpuolen tekniikat joudutaan yleensä asentamaan erikseen, jolloin ei voi olla varma toimiiko sivusto kaikilla käyttäjillä. Lisätekniikat aiheuttavat myös lisäriskejä tietoturvan kannalta. Jotkut tekniikat vaativat myös nopeaa internetyhteyttä.
Java-appletit
Java-appletit ovat Java-ohjelmointikielellä toteutettuja WWW-sivuille sijoitettavia pieniä ohjelmia. Vaatii toimiakseen käyttöjärjestelmään asennetun Java Runtime Environment (JRE) -ympäristön. Opera- ja Mozilla- selaimissa se tulee mukana mikäli niin haluaa, mutta Microsoft on poistanut viimeisimmistä Internet Explorer -selaimistaan kokonaan tuen Java-appleteille.
- Hello World!
- Java
- Hyödyllinen Java-esimerkki (Samuli Ikonen)
- Complex javastuff
JavaScript
JavaScript on vain selaimissa toimiva skriptikieli, jolla voidaan toteuttaa pieniä www-selaimella toimivia toimintoja kuten tarkistaa lomakkeen syöttötietoja ennen niiden lähettämistä eteenpäin. Javascriptillä ei ole mitään tekemistä Javan kanssa. Vaatii toimiakseen selaimelta JavaScript-tuen.
- Pieni esimerkki
- Tapahtumankäsittely XHTML 1.1:ssä
- ECMAScript standardoitu versio JavaScriptistä
- JavaScript Guide
- JavaScript
- JavaScript Sample Code
- JavaScript Source
- Form Totals
ActiveX
ActiveX on sarja tekniikoita ohjelmakomponenttien liittämiseksi verkkoon. ActiveX-komponentteja voidaan ohjelmoida esimerkiksi Delphi-, Builder- tai Visual Basic -kehitysympäristöillä. Komponentteja ja lomakkeita voidaan ohjailla VBScript- tai JavaScript-kielillä. Internet Explorer tukee ActiveX-ominaisuuksia, Mozillaan erikseen asennettavissa, Opera ei tue.
- ActiveX-esimerkkejä
- Microsoft ActiveX
- JavaBeans ja ActiveX - Jarno Mynttinen
Flash
Flash-sovellukset ovat WWW-sivuille upotettuja vektorigrafiikalla toteutettuja multimediaesityksiä. Flash-esitykseen voidaan lisätä vuorovaikutteisia elementtejä, esim. kyselylomakkeita. Lomakkeen käsittely on tehtävä kuitenkin jollain muulla tekniikalla. Käytetään paljon esimerkiksi mainoksissa. Vaatii toimiakseen selaimeen asennetun Flash-laajennuksen. Lisää Flashin multimedia- ominaisuuksista luennolla 8.
Käyttäjien kommentit