Jedním z běžných problémů, se kterým se potkávám, je zobrazený dat v tabulkové formě. Například z databáze. Každý řáádek tabulky reprezentuje jeden řádek v databázové tabulce.
V kódu zobrazíme tabulku podle vzoru:
<form> <table> <caption></caption> <thead> <tr>…</tr> </thead> <tfoot> <tr>…</tr> </tfoot> <tbody> <tr>…</tr> </tbody> </table> </form>
Část textu tabulky bude zakoódována přímo v programu, ale části, zejména ta s daty v tělě, budeme určitě vytvářet programově. Myšlenka práce s tabulkou je taková, že v tabulce rozmístníme vstupní pole a tlačítka, podlo toho co chcem uživateli nabídnout za akce. Většinou to dělám tak, že poslední, úplně pravý, sloupec vyhradím pro příkazy a dávám do něj tlačítka pro jednotlivé akce které se týkají řádku tabulky. Na konec tabulky, ve vzoru je to část <tfoot>
, vložím pole pro zadávání hodnoty a v poslední buňce, která je vlastně ve sloupečku pro příkazy dám tlačítko „Zapsat“. Tolik tedy na úvod a nyní se začneme zabývat jednotlivými částmi.
První věc je samotný formulář. Jak je vidět na ukázce, tabulka je ve formuláři celá, a všechny prvky které budeme dávat do tabulky budou tedy v jednom formuláři. Formulář může obsahovat ve svém otevíracím tagu několik atributů. Zmíním zde jen url
a method
. Attribut url
obsahuje adresu na kterou se data z formuláře odešlou při stisknutí odesílacího, nebo některého z více odesílacích tlačítek. Pokud nebude vyplněn, odešlou se data na tu samou stránku ve které je formulář. Z našeho pohledu to znamená že data z formuláře bude zpracovávat ta samá .kl1
stránka. Atribut method
pak určuje jakým způsobem se budou data odesílat. V mém případě jsem použil tuto kombinaci:
<form method="post"> … </form>
Tedy data fe formuláři se pošlou ke zpracování té samé stránce (.kl1
), která formulář zobrazuje a k odeslání se použije metoda POST.
Dále do formuláře/tabulky rozmístníme jednotlivá pole. Uvedu jako příklad pole v posledním řádku tabulky pro zadání hodnot k vytvoření nového řádku.
<tfoot><tr> <td><input type="text" id="dny" size="3" maxlength="3" /></td> <td><input type="text" id="limit" size="3" maxlength="3" /></td> <td><button name="tlacitko" value="new">Zapsat</button></td> </tr></tfoot>
V této ukázce jsou dve políčka pro zadání hodnoty a ve sloupci s příkazy je tlačítko jenž má nápis „Zapsat“. Políčka jsou vytvářena html tagem <input type="text">
a můžeme a zajisté vaužijeme také ostatních variant tagu input které nám HTML nabízí. Můžeme také použít tag select pro vytvoření komboboxu s výběrem hondot. Zvláštností je odesílací tlačítko které generuji, v tomto případě možná zbytečne, tagem <button>
. Běžne se používá kód
<td><input type="submit" value="Zapsat" /></td>
V tomto případě si mohu vybrat, který způsob použiji. V příkazových tlačítcích jenž jsou na každém řádku ovšem jde použít jen varianta s tagem <button>
.
A co že je tedy v těch řádcích, tam generuji html kód jako tento:
<td> <button name="remove" value="klíč-řádku">Odstranit</button> <button name="edit" value="klíč-řádku">Upravit</button> </td>
Klíč-řádku je hodnota, která jednoznačně identifikuje data na řádku. Může to být například id
pole z databáze, nebo jen číslo řádku tabulky. Atribut name
pak identifikuje operaci kterou s daným řádkem chceme provést. Tím máme popsána vstupní pole formuláře a tlačítka, a zbývá nám zajistit zpracování dat z odeslaného formuláře.
if (request_get_arg(request, "new")) { … Uživatel stiskl tlačítko „Zapsat“ na poslendím řádku tabulky. … Vybereme tedy z request poledny
alimit
a zapíšeme například do databáze. } else if (key=request_get_arg(request, "remove")) { … Uživatel stisk tlačítko odstranit na řádku s daty jehož identifikace je vkey
. … Odstraníme tento řádek z databáze. } else if (key=request_get_arg(request, "edit")) { … Uživatel stisk tlačítko „edit“ na řádku s daty jehož identifikace je vkey
. … Zajistíme tedy zobrazení formuláře s daty jednoho řádku. }