22. 01. 2009
Rychlokurz - Třída Form
Dnes se podíváme na třídu form. Je potomkem třídy tpl a proto formulář vypíšeme naprosto obdobně jako klasickou šablonu. Vytvoříme formulář pro editaci a přidávání zaměstnanců.
<br>
$zamform = new form ("zamform.tpl");<br>
$zamform->out();<br>
V případě, že budeme chtít editovat zaměstnance, kterého už v databázi máme, potřebujeme aby hodnoty z databáze byly předvyplněné v políčkách formuláře. Toho dosáhneme nastavením nám důvěrně známého pole values.
<br>
$q = mysql_query("SELECT * FROM ZAMESTNANCI WHERE ID='1'");<br>
$zamestnanec = mysql_fetch_assoc($q);<br>
<br>
$zamform = new form ("zamform.tpl");<br>
$zamform->values = $zamestnanec;<br>
$zamform->out();<br>
Nemusíte si lámat hlavu s nastavováním SELECTů a parametrem checked u <input type="checkbox"> - vše se vybere a zaškrtne automaticky, na základě hodnot z databázového dotazu.
To je všechno hezké, ale jak vypadá šablona "zamform.tpl"? Například takto:
<br>
< ?elements<br>
class form name "zamform" action "zamform.php"<br>
input JMENO lb "Jméno:" required<br>
input PRIJMENI lb "Příjmení:" size "50" required<br>
input DATNAR date "%d. %m. %Y"<br>
select FUNKCE lb "Pracovní zařazení:" query "select INDEX,NAZEV from FUNKCE" default "1"<br>
button submit lb "Uložit"<br>
? ><br>
První řádek udává jméno formuláře a url, kam bude odeslán (action). Následující řádky, jak všichni tušíme, definují input tagy formuláře. Kromě atributů známých i z html - např. "size" tu máme lb - určuje popisek pole, required - udává povinné pole, date - předepisuje formát pro zadání datumu, default - určuje hodnotu pole, jestliže není žádná explicitně nastavená.
Tag <SELECT> si načte položky z databázové tabulky FUNKCE.
Prvek button vytvoří odesílací tlačítko s popiskem "Uložit".
Možná se divíte, kam se poděla HTML část šablony. Ano můžete si ji vytvořit podle libosti zcela stejně jako u obyčejné šablony. Parametry {JMENO}, {PRIJMENI} atd. pak budou nahrazeny příslušnými poli formuláře.
Pokud žádné HTML nenadefinujete, použije se defaultní layout formuláře (každé pole bude na zvláštním řádku). To je užitečné například tehdy, pokud zprovozňujete funkcionalitu aplikace a design hodláte doladit až později. Mimochodem s defaultním layoutem se umí vypsat i grid a obyčejná šablona.
(Jestliže vyvíjíte aplikaci s jednotným vzhledem, není těžké modifikovat metody pro výpis defaultního layoutu a zadávat pak HTML do šablon jen ve zcela výjmečných případech. PClib se snaží zjednodušit přizpůsobení vzhledu i vhodným přiřazením CSS-tříd generovaným elementům HTML)
Určitě už jste všichni zvědaví jak bude vypadat uložení formuláře do databáze. Jak vidíme z prvního řádku šablony, po stisknutí tlačítka se formulář odešle do skriptu zamform.php. Tam můžeme mít:
<br>
$zamform = new form ("zamform.tpl");<br>
if ($zamform->submitted) {<br>
print_r($zamform->values); }<br>
Pokud je formulář odeslaný, nastaví se jeho atribut "submitted". Zároveň se všechny hodnoty vyplněné uživatelem do formuláře načtou do asociativního pole "values". Pole bude obsahovat např.:
"JMENO" => "Franta",
"PRIJMENI" => "Vocas",
"DATNAR" => "10.1.75",
"FUNKCE" => "2"
Můžeme zkontrolovat, jestli uživatel vyplnil povinná pole popř. zadal správné datum:
<br>
if (!$zamform->validate()) die("Chybně vyplněný formulář!");<br>
Můžeme přidat nového zaměstnance do databázové tabulky ZAMESTNANCI:
<br>
$id = $zamform->insert('ZAMESTNANCI');<br>
Funkce vrací hodnotu mysql_insert_id(). Datum bude před uložením zkonvertováno na korektní databázový formát. Tabulka musí obsahovat sloupce odpovídající názvům polí formuláře. Každá řádka tabulky tedy obsahuje jeden formulář. (Pozor - pole values nasmí obsahovat klíč, který není názvem sloupce tabulky)
Před vložením do databáze můžeme ještě přidat/modifikovat hodnoty formuláře. Například vložíme čas odeslání formuláře do sloupce DATZADANI.
<br>
$zamform->values['DATZADANI'] = date("Y-m-d H:i:s");<br>
$zamform->insert('ZAMESTNANCI');<br>
Nebo můžeme aktualizovat již existující záznam v tabulce:
<br>
$where_podminka = "ID='4'";<br>
$zamform->update('ZAMESTNANCI', $where_podminka);<br>
Další až zas někdy příště. Nezmínili jsme ještě spoustu věcí, např. automatické ukládání/aktualizování/mazání příloh spolu s formulářem, automatické řešení kolizí jmen těchto souborů, další podmínky validace, možnost validace javascriptem, vytváření dalších elementů formuláře, výpis chybových hlášení generovaných validátorem - atd.
« zpět |