| Rubrika Php / mysql
Automatické generovanie formulárov z MySQL
Každý kodér sa nevyhnutne musí stretávať s problematikou generovania formulárov. Vstupné formuláre na napĺňanie tabuliek datami sa vyskytujú kdekoľvek. Otravné vypisovanie inputov, textareí a selectov sa však dá riešiť aj inak. Vhodne napísaná trieda to dokáže vyriešiť za vás. Nie je mojím cieľom poskytnúť celú triedu, ale len poradiť, čo môže byť jej základom.
Načítanie dátových typov z tabuľky
V prvom rade je dôležité načítať si z tabuľky, ktorej chceme vygenerovať vstupný formulár, všetky stĺpce.
$q="SELECT * FROM tabulka LIMIT 1"; $result=$b->sqlQuery($q); $i=0; while ($i < mysql_num_fields($result)) { $meta = mysql_fetch_field($result, $i); if(!in_array($meta->name,$this->excludeColumns)) { $fields['name'][] = $meta->name; $fields['type'][] = $meta->type; } $i++; }
Vyberieme si jeden ľubovoľný záznam z tabuľky, ktorú chceme
spracovať. Je možné vybrať buď všetky stĺpce (*) alebo len tie, ktoré
potrebujeme. Ja vyberám všetky a v premennej exludeColumns si
nadefinujem tie, ktoré spracovať naopak nechcem. Pre mňa je to jednoduchšie,
väčšia náročnosť aplikácie nie je v tomto prípade podstatná.
Samotné vygenerovanie formuláru
Vygenerovanie formuláru je potom už veľmi jednoduché.
for ($i=0;$i<sizeof($fields['name']);$i++) { if ($this->specials[$i] == 'select') { /*nejaky HTML vystup*/ } else { //input text if ($meta->type == 'string') { $h .= '<p><b>'.$inputName.'</b><br/> <input class="class_input" value="'.$rows[$meta->name].'" type="text" name="'.$meta->name.'" /></p>'; } // textarea if ($meta->type == 'blob') { $h .= '<p><b>'.$inputName.'</b><br/> <textarea class="class_textarea" name="'.$meta->name.'" />'.$rows[$meta->name].'</textarea></p>'; } // short input text if ($meta->type == 'int') { $h .= '<p><b>'.$inputName.'</b><br/> <input class="class_input" value="'.$rows[$meta->name].'" type="text" style="width: 60px" name="'.$meta->name.'" /></p>'; } } }
Z kódu je jasné o čo ide.. Pokiaľ je $meta->type
(výstup daný funkciou mysql_fetch_field) typu string, zobrazím štandardné
textové pole. Ak je blob, viem, že ide o väčší objem dát, tak zobrazím
textareu. Pokiaľ je to integer, tak zobrazím buď krátky input text, alebo na
základe ďalších podmienok nezobrazujem nič (napríklad, pokiaľ ide o ID
záznamu, unix timestamp a podobné integery, ktoré je nežiadúce editovať
cez formulár. Pokiaľ neviete čo znamená podmienka if
($this->specials[$i] == ‚select‘), čítajte ďalej.
Čo so select boxami a inými prvkami?
Keďže formuláre okrem input textov a textareí obsahujú aj iné prvky,
musí to trieda nejako riešiť. Možností je viacero. V niektorých
prípadoch sa hodí použiť v tabuľke dátový typ ENUM, ktorý nie je
problém PHPčkom spracovať do podoby selectu. O tom však niekedy inokedy.
Pokiaľ chcem niektorý stĺpec z tabuľky vo formuláre prezentovať inak,
využívam na to premennú $this->specials. Je to vlastne pole,
kde definujem poradie prvkov, ktoré sa majú spracovať špecificky. Vyzerá to
asi takto.
$specials[2] = 'select';
Uvedený zápis znamená, že prvok v poradí tretí (číslujeme od nuly) bude zobrazený ako select. Do for cyklu zobrazeného vyššie teda môžem nejakým spôsobom implementovať podmienku:
if ($this->specials[$i] == 'select') { /*nejaky HTML vystup*/ }
Tento select môže byť spracovaný akokoľvek, či už do neho natiahnem data z nejakej inej relačnej tabuľky alebo z ENUMu. Rovnakým spôsobom môžem spracovať ľubovoľné výstupy. V triede sú nadefinované základné a najviac využívané prvky, pričom nie je problém nový druh výstupu pridať.
Toto riešenie isto nie je ideálne, ale rozhodne uľahčí a urýchli prácu s generovaním formulárov. Taktiež nie je problém napojiť vygenerovaný formulár na triedu, ktorá opäť relatívne automatizovane spracuje údaje a vloží ich do tabuľky. Odpadá tym zdĺhavé vypisovanie SQL Insertov.
Tomáš Mašek
naspäť
prispieť do diskusie [0]
Vyhľadávanie
Viac z rubriky
Ako ochrániť includované PHP súbory?
Automatický prevod texu na hyperlink
Cachovanie do HTML súboru
Cachovanie s pomocou funkcií serialize/unserialize
Čiernobiele obrázky v PHP
Dynamická tvorba URL
Fulltext ako názov stĺpca v tabuľke
Getcwd – Ako ľahko získať absolútnu cestu
Import z Excelu do MySQL databázy
Maximálny timeout vykonávania SQL skriptu
Microtime – rýchlosť načítania stránky
Odstránenie diakritiky v PHP pomocou iconv()
Overovanie a kontrola formulárov v PHP
Parsovanie XML súboru v PHP
PHP a zachytenie nedoručených mailov
PHP funkcia implode
Porovnávanie a dátovy typ DATE
Práca so súbormi pri zapnutom safe_mode
Prihlasovanie uživateľa prostredníctvom $_SESSION
Real-time kontrola e-mailovej adresy AJAX-om
Spracovanie dátového typu ENUM do HTML selectu
Strpos a offset – nájdenie výskytu znaku v reťazci
Tip: Generovanie PDF súborov
Tip: jednoduché šifrovanie a dešifrovanie v PHP
Tip: správne includovanie súborov
Ukladanie jazykových verzií statických textov
Veľmi jednoduchý návod na pekné URI
Vkladanie obrázkov do databázy
Výber záznamov začínajúcich číslom
Vyčistenie viacrozmerného poľa
Vyhľadávanie, pekné URI a diakritika
Vypísanie abecedy v PHP
Využívanie unikátnych kľúčov v MySQL databáze
Zaradenie jednej položky do viacerých kategórií
Zistenie hodnoty ďalšieho ID – autoincrement
Zložené MySQL dotazy – LEFT JOIN
Zvýrazňovanie syntaxe kódu – GeSHi
Pridať komentár



