Formok
Egy form (magyarul űrlap) segítségével kérhetünk be adatokat a honlapot látogatóktól. Itt egy példa, a magyarázat később jön. Töltse ki a mezőket, aztán kattintson az „Elküld” gombra!
<form action="parser.php" method="post">
<div>
<label for="lastname">Vezetéknév: </label>
<input type="text" name="lastname" id="lastname">
<br>
<label for="firstname">Keresztnév: </label>
<input type="text" name="firstname" id="firstname">
<br>
<label for="email">E-mail: </label>
<input type="text" name="email" id="email">
<br>
<input type="submit" value="Elküld">
</div>
</form>
A formunk még nem túl szép, de hamarosan megtanuljuk formázni stíluslapokkal!
Amikor a fentihez hasonló formot szeretnénk beágyazni a dokumentumba, az egészet a <form>...</form>
címkék közé kell tenni.
Mivel Strict dokumentumtípusban írjuk művünket, ezért a <form>...</form>
címkék közé nem szabad azonnal a label
és az input
elemeket írni! A form tartalmát a <div>...</div>
vagy <p>...</p>
címkék közé írjuk, és így a W3C validátora el fogja fogadni az oldalunkat!
Miután kitöltöttük a fenti formot, de még nem nyomtuk meg az „Elküld” gombot, akkor a bevitt adatok még csak a saját gépünkön léteznek, hiszen a formot tartalmazó honlap is a saját gépünkön található, mert a böngésző letöltötte a szerverről. A gombot megnyomva a böngésző feltölti a megadott adatokat a szerver felé, amit egy erre képes program fog értelmezni. Az eredményt láthatja: visszakaptuk a szervertől a megadott adatokat.
A <form>
címkének van egy kötelező attribútuma, amit mindenképpen meg kell adnunk, ez pedig az action
. Értéke annak a programnak az elérési útvonala lesz a szerveren, amelyik képes a bevitt adatok feldolgozására. Ezt azért szükséges megadni, hogy a böngésző tudja, hova kell elküldeni az adatokat, hiszen „csak úgy” nem küldheti el a szervernek, hogy az kezdjen vele valamit.
Az adatok elküldésének két módja van. Ezt szintén érdemes beállítani a formunkban, amit a method
attribútummal tudunk megadni. Értéke kétféle lehet:
- GET
- Kisebb méretű adatok, például néhány szó elküldéséhez használható csak. Titkos adatok, például jelszó elküldésére ne használjuk, mert az elküldés után megjelenő honlap URL-jében megjelenik az összes megadott adat!
- POST
- Az adatok mérete itt nincs limitálva, és titkos adatokat is csak a POST-tal küldhetünk el. Általában ezt szoktuk használni a GET hátrányai miatt, mi is POST-ot fogunk használni példáinkban.
Ezután nézzük, hogyan néz ki egy form alapja:
<form action="parser.php" method="post">
</form>
A parser.php az ezzel a honlappal azonos könyvtárban lévő, szerveroldalon lefutó program, ami kezelni fogja a formon bevitt adatokat. Ha használunk hírlevélküldő programot, és a formban elkérjük a látogató e-mail címét, akkor az action
értékének a hírlevélküldő program leírásában megadottnak kell lennie. Például: action="http://hirlevelkuldoprogram.hu/?md=register"
, ami azt jelenti, hogy az általunk használt hírlevélküldő program részére adjuk át a bevitt adatokat.
Beviteli mező
Egysoros beviteli mezőt így szúrhatunk be, a fenti példánál maradva:
<form action="parser.php" method="post">
...
<input type="text" id="lastname" name="lastname">
...
</form>
Az egysoros beviteli mező fontosabb attribútumai:
type="text"
- Ez mondja meg a böngészőnek, hogy ez egy egysoros szöveges beviteli mező.
name="lastname"
- A
name
attribútum azért kell, mert a szerveroldali parancsfájl, aminek elküldi a böngésző az adatokat és amit azaction="parser.php"
attribútummal adtunk meg, ez alapján fogja megtalálni a megfelelő értékeket. A parser.php parancsfájl ugyanis<név>=<érték>
párokként kapja meg a beírt adatokat, ahol a név aname
attribútum értéke minden egyes formelemhez, az érték pedig a felhasználó által beírt adat.
Ha mondjuk a vezetéknévhez (ez alastname
nevű mező) az írjuk be, hogy Kovács, a keresztnévhez azt, hogy Béla, végül az e-mail címhez azt, hogy [email protected], majd elküldjük a beírt adatott a szervernek, akkor a parser.php így kapja meg az bevitt adatot:lastname=Kovács&firstname=Bé[email protected]
. Arra figyeljünk, hogy a név csak az angol ábécé kisbetűit, és számokat tartalmazzon, és számmal NE kezdődjön a név! id="lastname"
- Ez a
label
elem miatt kell, ami a beviteli mező előtti feliratot definiálja:Ugyanis a<label for="lastname">Vezetéknév: </label>
<input type="text" name="lastname" id="lastname">label
for
attribútumának a hozzá tartozó formelemid
azonosítójának az értékét kell adni. Ezzel összekötöttük a beviteli mező feliratát magával a beviteli mezővel. Ez két dolog miatt is fontos. Az első, hogy így a hangos képernyőfelolvasók tudni fogják, hogy melyik formelemhez melyik felirat tartozik; a másik, hogy így ha a „Vezetéknév” feliratra kattintunk egérrel, akkor ugyanazt a hatást érjük el, mintha a beviteli mezőre kattintottunk volna. size="4"
- Mennyi karakter szélességű legyen a mező. Ez nem korlátoztta a beírható karakterek számát, csak a látható szélességet állítja be!
maxlength="4"
- Beírható karakterek számának korlátozása. Például ha irányítószámot kérünk be, érdemes a beviteli mező
size
ésmaxlength
attribútumait 4-re állítani, mert így 4 karakter szélességű lesz a mező, és maximum 4 karaktert fogad csak el. value="Kezdeti szöveg a mezőben"
- Alapértelmezettként ez a szöveg lesz a beviteli mező tartalma, amit azonban meg lehet változtatni.
Elküldő gomb
Az elküldő gombot ezzel tudjuk beszúrni:
<input type="submit" id="submitbutton" value="Elküld">
Fontosabb attribútumai:
type="submit"
- Ennek hatására lesz ez egy elküldő gomb. Amikor rányomunk, a begépelt adatokat a böngésző feltölti a szervernek, az
action
attribútumban megadott program felé. value="Elküld"
- A gomb feliratát állítja be.
Grafikus elküldő gombot is létre tudunk hozni, ekkor egy általunk megadott kép fog megjelenni mint gomb. Így kell használni:
<input type="image" src="ff.png" alt="Elküld">
A type
értéke legyen image
, ezzel már meg is mondtuk, hogy ez egy olyan elküldő gomb, aminek kép a megjelenése. Az src
a képfájl elérési útvonlát és nevét, az alt
pedig azt a szöveget tartalmazza, ami akkor fog megjelenni, ha a kép akármilyen okból nem jelenne meg (az alt
itt ugyanazt a célt szolgálja, mint az img
címkében).
Jelszóbevitel
Bejelentkezéskor szükségünk van jelszóbevitelre alkalmas szövegmezőre. Ez annyiban más, mint a fenti szövegmező, hogy a beírt karakterek helyett csak csillagok vagy kis körök jelennek meg.
Többsoros beviteli mező
Többsoros beviteli mezőt a textarea
elem hoz létre. A cols
attribútum értéke mondja meg hány oszlopa, a rows
értéke pedig hogy hány sora legyen látható a szövegmezőnek, ezeket az attribútumokat kötelező megadni! A <textarea>...</textarea>
címkék közé be is írhatjuk, milyen szöveg jelenjen meg alapértelmezettként a szövegmezőben.
Többsoros beviteli mező létrehozása.
Rádiógombok
Rádiógombot akkor alkalmazunk, amikor több lehetőség közül kell egyet kiválasztunk. A type
értékének most "radio"
-t kell megadni. Megjelenik egy új attribútum, a value
, ez legyen ugyanaz, mint a rádiógomb előtti felirat, tehát most „Fiú” vagy „Lány”. Ez azért kell, mert a szervernek a kiválasztott opció value
attribútumának értékét fogja elküldeni a form. Fontos: a két rádiógomb name
attribútuma legyen azonos, mert csak így lehet pontosan egyet választani közülük. Viszont a két id
attribútumnak különböznie kell, mert az id
-ből azonos nevű csak egy lehet egy dokumentumon belül. A label
címkét az input
címke mögé írtuk, hogy a rádióbombok után jelenjen meg a felirat.
Rádiógombok használata előre kiválasztott értékkel.
Jelölőnégyzetek
Jelölőnégyzeteket akkor alkalmazunk, amikor több lehetőség közül kell egyet vagy többet kiválasztanunk.
Jelölőnégyzetek előre kiválasztott elemmel.
Listák
Legördülő lista elemcsoportokkal.
Legördülő lista előre kiválaszott elemmel, ami nem az első elem.
Lista, amiben egyszerre több elem látható.
Fájlfeltöltés
Létezik olyan űrlapmező is, amellyel a felhasználó egy teljes fájlt (pl. képet) tud feltölteni a szerver felé. Ez egy szöveges beviteli mező, ami mellett van egy „Tallózás...” feliratú gomb, amire ha rákattintunk, akkor bejön egy fájl kiválasztó dialógus, amiben ki tudjuk keresni a feltölteni kívánt fájlt.
Ahhoz, hogy működjön a fájlfeltötés, még az alábbi tennivalóink vannak:
- A
form
címkének állítsuk be az alábbi attribútumot:enctype="multipart/form-data"
- A form elküldési módja legyen POST:
method="post"
Az űrlap formázása stíluslappal
Most, hogy megismertük az összes űrlapmezőt, ideje szebbé tennünk a formunk kinézetét!
Form rendezése stíluslappal, táblázat nélkül.
Most nézzük meg a fieldset
és a legend
elemeket, amikkel csoportokba tudjuk gyűjteni az összetartozó űrlapmezőket.
Összetartozó űrlapmezők csoportba gyűjtése.
A legend
elem feliratát aztán tetszőlegesen formázhatjuk. A fieldset
tulajdonképpen csak egy keret (border
), ezért a border
tulajdonsággal tudjuk eltüntetni, vagy módosítani a fieldset
elemet.
A legend
és a fieldset
elem formázása.
A :focus
álosztállyal meg tudjuk változtatni azoknak az űrlapmezőknek a színét, amelyiknél éppen van a fókusz, azaz amelyik fogadja a billentyűzetleütéseket. Az Internet Explorer nem kezeli a :focus
álosztályt.
A formelemeket díszíthetjük sítuslappal, azonban minden böngésző máshogy tudja a CSS-t alkalmazni a formelemekre. A most következő két példa ilyen díszítéseket mutat be. Azonban ha élesben alkalmazunk stíluslapot formelemekre, akkor minél több böngészővel tesztelnünk kell művünket, nehogy egyes böngészőkön használhatatlan legyen a formunk!
Form elrendezése táblázattal
A formokat általában táblázat segítségével szokták elrendezni. A fejezetben javasoltam ehelyett egy másik megoldás, amikor csak CSS-sel rendezzük el a formot. Ez áttekinthetőbb kódot eredményez.
Azonban ha egy olyan elrendezést kívánunk megvalósítani, amivel sehogyan sem boldogulunk stíluslapokkal, akkor használhatunk táblázatot is ebben az esetben. Ilyenkor a table
címkének ne adjuk meg a summary
attribútumát, mert nem adattábla, hanem elrendezéshez használt táblázat.
<form method="post" action="order.php">
<table>
<tr>
<td><label for="lname">Vezetéknév:</label></td>
<td><input type="text" id="lname" name="lastname"></td>
</tr>
<tr>
<td><label for="fname">Keresztnév:</label></td>
<td><input type="text" id="fname" name="firstname"></td>
</tr>
<tr>
<td><label for="mail">E-mail cím:</label></td>
<td><input type="text" id="mail" name="email"></td>
</tr>
<tr>
<td><label for="mailagain">E-mail cím újra:</label></td>
<td><input type="text" id="mailagain" name="emailagain"></td>
</tr>
<tr>
<td><label for="phone">Telefonszám:</label></td>
<td><input type="text" id="phone" name="phone"></td>
</tr>
<tr>
<td><label>Érdeklődési terület:</label></td>
<td><label>
<input type="checkbox" id="option1" name="option1" value="Honlapkészítés">
Honlapkészítés</label>
<br>
<label>
<input type="checkbox" id="option2" name="option2" value="Online marketing">
Online marketing</label>
<br>
<label>
<input type="checkbox" id="option3" name="option3" value="Webdesign">
Webdesign</label>
<br>
<label>
<input type="checkbox" id="option4" name="option4" value="Webhosting">
Webhosting</label></td>
</tr>
<tr>
<td><label for="country">Ország:</label></td>
<td><select id="country" name="country">
<option value="HU">Magyarország</option>
<option value="AT">Ausztria</option>
<option value="BE">Belgium</option>
<option value="BG">Bulgária</option>
<option value="GR">Görögország</option>
<option value="CZ">Csehország</option>
</select></td>
</tr>
<tr>
<td><label for="postal_code">Irányítószám:</label></td>
<td><input type="text" id="postal_code" name="postal_code"></td>
</tr>
<tr>
<td><label for="city">Város:</label></td>
<td><input type="text" id="city" name="city"></td>
</tr>
<tr>
<td><label for="address">Utca, házszám:</label></td>
<td><input type="text" id="address" name="address"></td>
</tr>
<tr>
<td><label>Átvétel módja:</label></td>
<td><label>
<input type="radio" name="delivery" value="Postai utánvéttel" checked="checked">
Postai utánvéttel</label>
<br>
<label>
<input type="radio" name="delivery" value="Elektronikus letöltés">
Elektronikus letöltés</label>
</td>
</tr>
</table>
<p style="text-align:center">
<input type="submit" value="Rendelés">
</p>
</form>
Ajánlott linkek
W3C specifikációja: http://www.w3.org/TR/html4/interact/forms.html
Akadálymentesített form: http://www.webstandards.org/learn/tutorials/accessible-forms