Lomake

Perinteinen esimerkki lomakkeesta on ns. palautelomake, mutta niitä voidaan käyttää moneen muuhunkin tarkoitukseen. Esim. käyttäjä voi valita sivustolla käytettävän kielen lomakkeen avulla. Myös erilaisia navigointiratkaisuja voidaan tehdä lomakkeiden avulla. Lomakkeen kanssa käytetään usein muita ohjelmointikieliä (esim. php, javascript) lomakkeelle syötetyn tiedon oikeellisuuden tarkistamiseen ja tallentamiseen. Lomake alkaa aina <form> komennolla ja päättyy </form> komentoon.

Form

Form komennon lisäksi annetaan yleensä myös method ja name määritteet sekä usein myös action määrite. Method määrittää tavan jolla lomakkeen tieto lähetetään eteenpäin. Se voi saada arvokseen joko GET tai POST. GET lähettää tiedot URL osoitteen mukana ja on tarkoitettu lähinnä lyhyiden tietojen välitykseen, esim. kieli=fin (jyti.net/index.php?kieli=fin). POST lähettää tiedot HTTP:n yhteydessä ja ei näy suoraan käyttäjälle. Sitä käytetään yleensä pidempien ja esim. tietokantaan tallennettavien tietojen yhteydessä. Name määritteellä annetaan lomakkeelle nimi. Tätä tarvitaan, jos sivulla on useampi lomake tai esim. javascript koodissa halutaan viitata tiettyyn lomakkeeseen. Esim. name=palautelomake. Action määritteellä annetaan sen sivun osoite (URL) joka vastaanottaa tiedot (esim. php kielellä koodattu sivu). Koko komento voisi siis olla esim:

<form action="tallenna_tiedot.php" method="post" name="palautelomake"> Tähän lomakekentät </form>

Lomakekentät (yleisimmät)

Tekstikenttä
<input name="Nimi" type="text" id="Nimi" size="40" maxlength="50" value="Anna nimesi">

Nimi antaa kentälle nimen joka viedään esim. tietokantaan syötteen parina "Nimi=Jyrki Timonen". ID on yksilöintitieto esim. javascript-koodia varten. Size on näytettävä koko, maxlenght maksimipituus, joka kenttään voidaan syöttää. Value on oletussyöte, joka näkyy kentässä, se on tarkoitus korvata.

Salasanakenttä
<input name="Salasana" type="password" id="Salasana" size="40" maxlength="50">

Kuten edellä, mutta ei näytä kirjoitettuja merkkejä.

Tekstialue
<textarea name="Palaute" cols="40" rows="3" id="Palaute"></textarea>

Pidemmän tekstin kirjoitusta varten. Rows määrittää näytettävien rivien määrän, Cols merkkien määrän. Osaa lisätä rivejä automaattisesti ja samalla ikkunaan tulee vierityspalkit.

Päivämääräkenttä
<input type="date" name="Pvm" id="Pvm">

Katso Crome-selaimella, esimerkki ominaisuudesta jota kaikki selaimet eivät vielä tue.

Pudotusvalikko
<select name="Kieli" id="Kieli" multiple>
<option value="FI">Suomi</option>
<option value="SE">Ruotsi</option>
<option value="GB">Englanti</option>
</select>

Value arvo (esim. FI lähetetään eteenpäin, Suomi näytetään käyttäjälle. Usein näihin lisätään ensimmäiseksi <option value="EI">Valitse kieli</option>, jolloin nähdään onko käyttäjä todella valinnut kielen vai onko oletus jäänyt päälle. Lisämääre multiple (select -komennolle) näyttää koko listan auki ja siitä voidaan valita useampi vaihtoehto Ctrl-pohjassa.

Valitse sukupuoli:
Mies
Nainen

Radiopainikkeet

<input type="radio" name="s-puoli" id="s-puoli" value="mies"> Mies<br>
<input type="radio" name="s-puoli" id="s-puoli" value="nainen"> Nainen

Kaikki kentät joilla on sama nimi kuuluvat ryhmään, josta voidaan valita vain yksi vaihtoehto. Value on arvo, joka lähetetään nimi arvon kanssa, esim. s-puoli=mies

Haluan opiskella:

Ruotsi
Englanti
Saksa

Checkbox

<input type="checkbox" name="Kieli" id="Kieli" value="ruotsi"> Ruotsi<br>
<input type="checkbox" name="Kieli" id="Kieli" value="englanti"> Englanti<br>
<input type="checkbox" name="Kieli" id="Kieli" value="saksa"> Saksa<br>

Kuten radiopainikkeet, mutta voidaan valita useampi kuin yksi vaihtoehto.

Tiedoston lisääminen

<input type="file" name="tiedosto" id="tiedosto">

Tämän lisäksi pitää <form> -komennon yhteyteen lisätä enctype="multipart/form-data" -määritys.

Lähetyspainikkeet

<input type="submit" name="laheta" id="laheta" value="Lähetä">
<input type="reset" name="tyhjenna" id="tyhjenna" value="Tyhjennä">

Submit -painike lähettää lomakkeen, Reset tyyppinen tyhjentää kenttien tiedot. Value määrittää painikkeen tekstin. Nämä kaksi painiketta tässä eivät toimi.

Yllä olevien lisäksi voidaan lomakkeelle lisätä piilokenttiä. Esim. <input type="hidden" name="sivusto" value="jyti.net"> lisäisi lomakkeelta lähetettäviin tietoihin sivusto=jyti.net -tiedon. Sen lisäksi haluttu tekstikenttä voidaan määrittää readonly -tyyppiseksi. Silloin siinä olevaa tekstiä (value) ei käyttäjä voi vaihtaa tai korvata toisella. HTML5 toi mukanaan paljon lomaketoimintoja, joita kaikki selaimet eivät vielä tue. Yllä on mainittu päivämääräkenttä. Näihin voit tutustua esim. tästä.

Alla vielä toimiva lomake ja sen koodi. Mukana on myös vähän php-koodia, jotta lomakeen lähettämä tieto voidaan esitää.

Nimi:

Sukupuoli: Mies Nainen
Äidinkieli:

Palaute:

<form name="palaute" method="post" action="lomake_esim.php">
<p>Nimi:
<input name="Nimet" id="Nimet" type="text" size="30" maxlength="50">
</p>
<input type="hidden" name="Viesti" value="Tämä viesti tulee jyti.netistä">
<p>Sukupuoli:
<input type="radio" name="Sukupuoli" id="Sukupuoli" value="Mies"> Mies
<input type="radio" name="Sukupuoli" id="Sukupuoli" value="Nainen"> Nainen <br>
Äidinkieli:
<select name="Aidinkieli" id="Aidinkieli">
<option value="Ei_valittu">Valitse kieli</option>
<option value="FI">Suomi</option>
<option value="SE">Ruotsi</option>
<option value="GB">Englanti</option>
</select>
</p>
<p>Palaute:<br>
<textarea name="Palautteeni" cols="40" rows="5" id="Palautteeni"></textarea>
</p>
<p>
<input type="submit" name="Submit" value="Lähetä">

<input type="reset" name="Reset" value="Reset">
</p>
</form>

Vastaanottavan php -tiedoston koodi on seuraava (jos kiinnostaa):

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Lomakkeen palautesivu</title>
</head>
<body>
<h3>Lähetit seuraavat tiedot: </h3>
<p>Ensin piiloviesti: <?php echo $_POST["Viesti"]; ?></p>
Nimeni on <?php echo $_POST["Nimet"]; ?> <br>
Olen sukupuoleltani <?php echo $_POST["Sukupuoli"]; ?> <br>
Äidinkieleni on <?php echo $_POST["Aidinkieli"]; ?><br>
Palautteeni on: <br>
<?php echo $_POST["Palautteeni"]; ?>
</body>
</html>

Tämä koodi ei tee muuta kuin ottaa vastaan tiedot ja tulostaa ne ruudulle, mutta yhtä hyvin se voisi lähettää ne tietokantaan tai sähköpostiin.