English
version 2.2.1

  PClib - PHP component library



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); //vypis vyplnene hodnoty<br>
}<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