Vlastnosti Dokumentace Obrázky Klienti Kontakt

Adminer Pro - Dokumentace

Autor: Jakub Vrána, vznik: březen 2003

Úvod

Adminer slouží pro generování administračních rozhraní aplikací v jazyce PHP na základě komentovaného skriptu pro vytvoření MySQL databáze dané aplikace. Vygenerované rozhraní pracuje s databázi aplikace na vyšší úrovni než např. phpMyAdmin a uživatelům by mělo zajišťovat stejnou pohodlnost práce, na kterou jsou zvyklí v ručně vytvořených administračních rozhraních.

Vygenerované rozhraní lze snadno graficky přizpůsobit konkrétním potřebám každé aplikace. Lze měnit i funkčnost vygenerovaných skriptů (např. pro implementaci funkcí, které Adminer nepodporuje), při případném další generování tato přidaná funkčnost však zmizí.

Vlastnosti administračního rozhraní

Administrační rozhraní může mít libovolný vzhled s možností jakéhokoliv rozmístění navigačních prvků.

Aplikace dovoluje vytvořit tabulku s uživatelskými jmény a hesly. Tito uživatelé si pak mohou své záznamy administrovat po přihlášení.

Tabulky mohou být vzájemně provázané. S provázáním lze pracovat dvěmi způsoby - buď jsou u každého záznamu závislé tabulky zobrazeny hodnoty nadřazené tabulky a při editaci lze vybírat příslušnou hodnotu pouze z položek nadřazené tabulky nebo se závislé tabulky zobrazují a editují přímo na stránce s nadřazeným záznamem pomocí plovoucího rámu.

U každé tabulky lze nastavit, zda lze položky v ní prohlížet, přidávat, editovat a mazat (což je vhodné pro tabulky, do které se data zadávají externě).

Výpis dlouhých tabulek lze rozdělit na stránky s definovaným počtem záznamů. Lze určit, jak se mají záznamy řadit, při více nastavených řazeních lze v administračním rozhraním vybrat, které se má použít. Administrační rozhraní také umožňuje ruční řazení záznamů (zadáním pozice, na které chceme, aby se záznam zobrazoval). Nad libovolným sloupcem lze vytvořit vyhledávání s operátory <, =, obsahuje apod.

Libovolné sloupce mohou být nastaveny tak, že při splnění definované podmínky budou označeny jako neplatné případně se v administračním rozhraní nebudou zobrazovat vůbec. Je vhodné tuto vlastnost použít také v prezentaci.

U každého sloupce lze nastavit, zda se má vypisovat při prohlížení a zda ho lze editovat. Libovolný sloupec lze označit jako povinný pro zadávání a lze nastavit jeho výchozí hodnota. Lze také nastavit, zda musí být hodnoty sloupce unikátní (např. e-maily).

Administrační rozhraní podporuje práci s těmito datovými typy: řetězec nastavitelné délky, datum, čas, datum a čas, čísla různých délek, pravdivostní hodnota, výčet, množina, heslo, libovolně dlouhý text, soubory, obrázky. U těchto datových typů se data zobrazují a zadávají v uživatelsky přívětivé podobě. Kromě kontroly platnosti zadané hodnoty v závislosti na typu sloupce lze nastavit i další podmínky pro zadávanou hodnotu (např. číslo < 5). Lze nastavit, zda se výčet bude zadávat pomocí listboxu nebo pomocí přepínačů, množina potom pomocí vícenásobného listboxu nebo pomocí zaškrtávacích políček.

Kromě kontroly zadávané hodnoty podle typu a podle definované podmínky lze kontrolovat i tyto speciální hodnoty: URL, e-mail, v budoucnu také telefon, PSČ, IP adresa, HTML barva, regulární výraz.

Při editaci obrázků lze uvést šířku, výšku nebo oba rozměry, které se následně zobrazují jako doporučené. Lze také nastavit, že na zadané rozměry se budou obrázky budou převzorkovávat a originál bude dostupný po kliknutí. U obrázků lze nastavit, zda se má při výpisu zobrazovat pouze jejich název s obrázkem dostupným na kliknutí nebo rovnou jejich grafická podoba.

Pro editaci textových polí lze využít vizuální HTML editor s podporou zarovnávání, tučného písma a kurzívy, nastavování velikosti písma, vkládání tabulek, obrázků a odkazů. Editor lze přepnout i na práci přímo s HTML kódem. Obrázky se spravují pomocí administračního rozhraní.

Administrační rozhraní také umožňuje hromadné rozesílání korespondence na e-maily v tabulkách a to buď v textu s diakritikou nebo v HTML s obrázky. V administračním rozhraní lze také editovat vzory rozesílaných zpráv (odesílatel, předmět a tělo zprávy).

Struktura souborů

Aplikace je pro přehlednost rozdělena do několika souborů. Jednotlivé soubory však mají význam jedině při vložení do hlavního souboru index.php, samostatně nejsou spustitelné. Parametrem při spuštění je název souboru, ve kterém je uložen popis databáze.

Význam jednotlivých souborů je popsán v souboru descript.ion.

Vygenerované administrační rozhraní se ukládá do aktuálního adresáře, skript se tedy doporučuje spouštět z adresáře, ve kterém má být rozhraní uloženo - např:

php /adminer/index.php db.sql

Zpracování souboru s popisem databázových tabulek

Skript rozpoznává dále popsané SQL konstrukce. Na jejich pořadí a na velikosti písmen nezáleží. Nezáleží ani na počtu bílých znaků (tabulátory a mezery), pouze za uvozením komentáře -- musí následovat alespoň jeden bílý znak, stejně jako je to vyžadováno v MySQL. Neznámé konstrukce se ignorují a v případě, že není nastavena direktiva WARNINGS, se ani nevypisují chybové hlášky. Aplikace nerozpoznává komentáře /* */, což je užitečné v případě, kdy chceme určitou část skriptu zpracovat Adminerem, ale nechceme, aby ji zpracovalo MySQL. Většina konstrukcí je ale rozpoznávána pouze na začátku řádku, proto by /* mělo být na samostatném řádku.

-- adminer: DIREKTIVA1, DIREKTIVA2 hodnota

Pomocí tohoto komentáře lze upravit chování Admineru. Popis možných direktiv je uveden v další kapitole.

USE db;

Daná databáze se použije ve funkci mysql_select_db. Pokud konstrukce ve skriptu není, funkce mysql_select_db se nevolá. Okolo názvu databáze jsou povolené zpětné apostrofy.

GRANT ... TO user[@server] [IDENTIFIED BY 'password'];

Přihlašovací údaje se použijí ve funkci mysql_pconnect. Pokud konstrukce ve skriptu není, volá se mysql_pconnect bez parametrů. Okolo jména uživatele a názvu serveru mohou být apostrofy, kolem hesla apostrofy být musí.

REVOKE privileges ON table ...

Umožňuje z administračního rozhraní odstranit některé možnosti práce s tabulkou. Rozpoznávaná práva jsou SELECT, INSERT, UPDATE a DELETE, ostatní práva se ignorují. Při odebrání práva SELECT nelze provádět žádné operace.

SET CHARACTER SET charset;

Tento příkaz zajistí nastavení znakové sady pro komunikaci s databází po připojení k ní. Zároveň určuje kódování SQL skriptu a vygenerovaného administračního rozhraní.

-- ---

Tento speciální komentář způsobí v souboru menu.inc.php vložení prázdného řádku na místo, kde je uveden. Pokud je za třemi pomlčkami další text, zobrazí se jako nadpis sekce.

CREATE TRIGGER ... BEFORE|AFTER INSERT|UPDATE|DELETE ON table FOR EACH ROW statement;

Při provedení INSERT, UPDATE nebo DELETE spustí definovaný příkaz. Příkaz může být jen jeden a smí obsahovat odkazy NEW. na nové hodnoty sloupců nebo odkazy OLD. na staré hodnoty.

CREATE TABLE name ([ -- description]

Rozpoznávaná definice prvního řádku popisu tabulky. Popis se používá v nadpisech v administračním rozhraní a při odkazech na tuto tabulku. Jestliže popis chybí, použije se název tabulky. Pokud existuje část COMMENT u zakončení definice tabulky, použije se pro popis ta.

V komentáři u tabulky mohou být uvedeny následující modifikátory:

{LIMIT limit}Při výpisu tabulky bude na jedné stránce zobrazen maximálně zadaný počet řádků.
{DEFAULT}Tabulka bude výchozí při HTTP dotazu na adresář. Jinak se zobrazí stránka s odkazem na odhlášení.
{CLONABLE}Záznamy bude možné klonovat, tedy z existujících vytvořit nové.
{EDITABLE}Všechny položky tabulky budou upravitelné najednou. Místo formulářů pro úpravu jednotlivých položek se vytvoří TEXTAREA obsahující všechna data tabulky na jednotlivých řádcích se sloupci oddělenými středníkem. Hodí se na úpravu jednoduchých tabulek bez vazeb na další tabulky a bez sloupců typu text. Data nemohou obsahovat středník.
{SEARCH_ONLY}Data se zobrazí až po vyhledávání.
{WHISPERER}Pro zadávání hodnot odkazujících se na tuto tabulku bude použit našeptávač.

U spojovacích tabulek mohou být tyto příznaky:

{SEARCH[ op]}Podle spojovací tabulky bude možné vyhledávat.
{MULTIPLE_CHECKBOX[ size]}Obrací chování direktivy MULTIPLE_CHECKBOX, pomocí parametru lze určit velikost výběrového seznamu.

Řádky uvnitř tabulky

Na řádcích následujících po začátku tabulky se rozpoznávají následující konstrukce:

identifier type[(length)] ...,[ -- description]

Pokud sloupec nemá uveden popis, tak se ignoruje. Pokud není nastavena maximální délka hodnot ve sloupci, použijí se standardní hodnoty (date - 10, datetime - 16, int - 10). U některých typů délka význam nemá (např. bool).

Popis může být také uveden jako součást definice sloupce pomocí COMMENT 'description'. Speciální znaky a konstrukce ale musí být uvedeny za znaky --.

Popis může začínat znakem &, což zajistí, že se tento sloupec nebude vypisovat při prohlížení tabulky, ale pouze v editaci.

Popis dále může začínat znakem *. Tento sloupec se pak bude zobrazovat jako hodnota u propojených tabulek. Jestliže je takto označeno více sloupců, budou se zobrazovat zřetězené mezerou.

Popis může začínat také znakem $, který označuje proměnné. Tabulku, která obsahuje proměnné, nelze zobrazit přímo, ale jenom s uvedením hodnot jejích proměnných. Obvykle se proto proměnné používají u sloupců, které jsou odkazem na jinou tabulku a pro které se odkazy vytvoří u odkazované tabulky.

Pokud popis končí řetězcem v hranatých závorkách, považuje se tento řetězec za jednotku, která se následně zobrazuje vždy vpravo od hodnoty sloupce.

Součástí popisu může být hodnota ve složených závorkách:

{SHA1}Hodnota sloupce se při ukládání do databáze převede funkcí SHA1 a v editaci se zobrazuje jako pole password.
{MD5}Hodnota sloupce se při ukládání do databáze převede funkcí MD5 a v editaci se zobrazuje jako pole password.
{HMAC_MD5}Obdobné chování jako {MD5} s tím rozdílem, že se na řetězec aplikuje funkce HMAC_MD5 s klíčem nastaveným na název databáze, čímž je dosaženo větší bezpečnosti (uživatelé používající stejné heslo na různých systémech nebudou ohroženi při zcizení uloženého řetězce).
{LOGIN}Pokud má některý sloupec v databázi uveden tuto hodnotu, bere se jeho tabulka jako tabulka přihlašovacích údajů a je vygenerováno také administrační rozhraní v adresáři ../tabulka/, které umožňuje editaci dat příslušejících přihlášenému uživateli.
{PIC path}Označuje sloupce, ve kterých jsou uložené obrázky. Cesta označuje předponu při ukládání souboru z adresáře ../. Za touto předponou následuje při ukládání na server hodnota primárního klíče tabulky a přípona, která se zjišťuje z původního názvu souboru. Ve sloupci je uložen původní název souboru, používá se z něj však pouze koncovka. Např. při {PIC data/obrazek} se obrázky ukládají např. jako ../data/obrazek81.jpg, kde 81 je hodnota primárního klíče tohoto řádku.
Za cestou mohou být uvedeny doporučené rozměry obrázku, které se následně zobrazují v administračním rozhraní. Může být uvedena šířka, výška nebo oba údaje ve formátu {PIC data/obrazek [130][x80]}, kde 130 je šířka a 80 je výška.
Za rozměry obrázku může být uvedeno upřesnění, co zadané rozměry znamenají. Jestliže není uvedeno nic, zadané rozměry se zobrazí jako doporučené. Jestliže je uvedeno ZOOM, uloží se kromě nahraného obrázku také zmenšená verze odpovídající zadaným rozměrům. Jestliže je uvedeno MAX, jsou uvedené rozměry chápány jako maximální a větší obrázky se na tyto rozměry zmenší. Např. {PIC data/obrazek 130 ZOOM}. Zmenšovány jsou soubory GIF, PNG a JPG, které se uloží pod názvem např. ../data/obrazek81_s.jpg. Soubory GIF jsou ve starších verzích PHP při zmenšení převedeny na formát PNG.
Pokud je příznak uveden u sloupce typu BLOB, cesta se neuvádí a rozměry se ignorují.
{SHOWPIC path}Chová se stejně jako předchozí indikátor, obrázek ale při výpisu bude rovnou zobrazen (jinak se vypíše pouze odkaz pro jeho zobrazení).
{FILE path}Označuje sloupce, ve kterých jsou uložené jiné soubory.
{FILE_WIDTH col}Určuje sloupec, do kterého se uloží šířka obrázku z daného sloupce.
{FILE_HEIGHT col}Určuje sloupec, do kterého se uloží výška obrázku z daného sloupce.
{FILE_TYPE col}Určuje sloupec, do kterého se uloží typ souboru z daného sloupce.
{NOW}Při vytvoření řádku se sloupci přiřadí hodnota NOW().
{SEARCH[ op]}Podle sloupce bude možné vyhledávat. Jestliže není uveden operátor, použije se =. Jako operátor je možné použít např. <= nebo LIKE. Při uvedení hodnoty MON bude možné vyhledávat podle měsíce a roku. Opakovaným uvedením této direktivy lze jeden sloupec prohledávat více operátory.
{DISABLING[ exp]}Sloupec bude použit jako deaktivační. To znamená, že řádky s uvedenou hodnotou sloupce nebudou v různých situacích vypisovány. Např. u tabulky se sloupcem {LOGIN} se budou akceptovat pouze uživatelé, kteří splňují podmínky u všech sloupců DISABLING. Ve výběrovém seznamu budou rovněž vypisovány pouze platné řádky. Např. {DISABLING != 1} zakáže všechny řádky, které nemají hodnotu daného sloupce nastavenou na 1. Pokud výraz není uveden, provede se interpretace logické hodnoty databází.
{HIDING[ exp]}Řádky se sloupcem vyhovujícím dané podmínce nebudou ve výpisech zobrazovány. Jedinou výjimku tvoří vyhledávání, kdy jsou zobrazeny všechny odpovídající položky - speciálně vyhledávání bez omezujících podmínek zobrazí všechny řádky.
{HTML[ path]}Hodnota sloupce se bude chápat jako HTML text a při vypisování tedy nebudou nahrazovány speciální HTML znaky. Jestliže je definována direktiva HTML_EDIT, bude při editaci textových polí zobrazen HTML editor. Pokud je u sloupce některé tabulky uveden indikátor {HTML_PIC}, bude možné vkládat i obrázky. Obrázky bude možné vkládat i v případě uvedení cesty, v tom případě se uloží do souboru. Cesta k obrázkům a k odkazům se ukládá absolutně počínaje kořenovým adresářem serveru.
{URL}Označuje pole, jejichž hodnotou má být externí odkaz. Z vyplněných hodnot je při vypisování vytvořen odkaz. Hodnota by měla začínat řetězcem http:// nebo https://, což je rozhraním kontrolováno. Pokud je zadaný řetězec delší než 30 znaků, bude při výpisu oříznut a doplněn třemi tečkami.
{LINK[ 'col'[ 'pre'[ 'po']]]}Označuje pole, jejichž hodnotou je obecný odkaz. Může se jednat o interní i externí odkaz, který smí obsahovat písmena, čísla, a /-:._. Z vyplněných hodnot je při vypisování vytvořen odkaz s volitelnou předponou a příponou. Výchozí předpona je ../, výchozí přípona je prázdná. Při uvedení sloupce se z něj při vytváření nového záznamu odkaz odvodí převodem na malá písmena, odstraněním diakritiky a nahrazením nealfanumerických posloupností pomlčkou.
{EMAIL}Označuje pole, jejichž hodnotou má být e-mail. Z vyplněných hodnot je při vypisování vytvořen odkaz, při zadávání je provedena základní kontrola formátu adresy. Pokud je zadaný řetězec delší než 30 znaků, bude při výpisu oříznut a doplněn třemi tečkami.
{BULK}Sloupec označující e-mail, který bude použit pro hromadnou korespondenci. Tímto příznakem smí být označen jediný sloupec v tabulce. Pokud je místo tohoto indikátoru uveden indikátor {BULK_HTML}, bude možné při hromadné korespondenci vytvářet HTML e-maily. Pokud je u sloupce některé tabulky uveden indikátor {HTML_PIC}, bude možné vkládat i obrázky. Formulář pro rozeslání zpráv se uloží jako table-2.php a do výpisu dat se na něj vloží odkaz. Pokud je u některých sloupců tabulky uvedeno {BULK_DISABLING[ exp]}, nebudou zprávy odeslány na adresy vyhovující podmínce.
{SUBJECT}V případě, že je u nějakého sloupce uveden tento indikátor, považuje se jeho tabulka za tabulku se vzory e-mailů. Další sloupce v tabulce vzorů e-mailů mohou obsahovat indikátory {FROM} a {MESSAGE}, které nastaví adresu odesílatele a zprávu na hodnotu odpovídajícího sloupce.
{HTML_PIC}Tabulka, která obsahuje sloupec s tímto příznakem, bude použita pro ukládání obrázků vkládaných do HTML polí. Nepovinný indikátor {HTML_ALT} u jiného sloupce této tabulky bude použit pro ukládání textových popisů obrázku. Jedná se o zastaralý příznak.
{FILE_DATA}Tabulka, která obsahuje sloupec s tímto příznakem, bude použita pro ukládání všech souborů včetně obrázků vkládaných do HTML polí. Sloupec by měl mít typ z rodiny blob. Tato tabulka by dále měla obsahovat sloupec s příznakem {FILE_NAME}, do kterého se ukládá název souboru, a {FILE_TYPE}, do kterého se ukládá Content-Type. Tabulka může obsahovat i sloupce {FILE_WIDTH} a {FILE_HEIGHT}, do kterých se ukládá výška a šířka případných obrázků.
{TEL}Telefonní číslo. Indikátor je pouze rozpoznáván.
{PSC}Poštovní směrovací číslo. Umožňuje zadat pět číslic s volitelnou mezerou po prvních třech číslicích. Při ukládání se mezera odstraní, při vypisování naopak vloží. Typ pro ukládání může být např. mediumint nebo varchar(5).
{ACCOUNT}České číslo účtu: volitelné až šestimístné předčíslí s pomlčkou, až desetimístné číslo účtu, lomítko a čtyřmístný kód banky.
{IP}IP adresa. Indikátor je pouze rozpoznáván.
{COLOR}HTML barva. Indikátor je pouze rozpoznáván.
{REGEXP}Regulární výraz. Indikátor je pouze rozpoznáván.
{RANK[ sloupce]}Sloupec pro ruční řazení dat. Administrační rozhraní zajistí, že všechny řádky v tabulce se stejnou hodnotou tabulkových proměnných budou mít nastavenou jednoznačnou hodnotu tohoto sloupce. Když uživatel změní hodnotu v tomto sloupci, změní se také hodnota tohoto sloupce u ostatních řádků, aby bylo zajištěno správné řazení při výpisu. Administrační rozhraní navíc zajišťuje spojité zaplnění tohoto sloupce (bez mezer mezi hodnotami). Jestliže se má podle tohoto sloupce řadit, je potřeba ho uvést jako první index stejně jako v jiných případech. Nad tímto sloupcem nelze vytvořit unikátní index, protože při přeuspořádávání se dočasně nastaví stejná hodnota u více řádků.
Při uvedení nepovinných sloupců oddělených mezerami se bude pořadí nastavovat pouze v rámci těchto sloupců (obdobně jako v případě tabulkových proměnných).
{JOIN[ 'lep']}Pro sloupce s tímto příznakem nebude při výpisu vytvářen samostatný sloupec tabulky, ale místo toho se připojí k hodnotě předchozího sloupce, volitelně oddělené hodnotou lep.
{UNEDITABLE}Sloupec nebude možné editovat.
{UNCHANGEABLE}Sloupec nebude možné upravovat. Při vkládání nové položky ho však bude možné zadat.
{MULTIPLE_CHECKBOX}Obrací chování direktivy MULTIPLE_CHECKBOX.
{LANG_IDF}Sloupec, do kterého bude ukládán identifikátor překládaného textu. Pokud v databázi není takto označen žádný sloupec, bude funkce lang vracet hodnoty ze statického pole, jinak se budou překlady načítat ze sloupce označeného {LANG_TRANS} z řádku s hodnotou sloupce {LANG_LANG} odpovídající proměnné $LANG (nastavuje administrační rozhraní). Nad sloupci ({LANG_IDF}, {LANG_LANG}) by měl být vytvořen unikátní index.
{LATITUDE[ api_key]}Pokud je v tabulce přítomen takto označený sloupec, vygeneruje se Google Mapa s možností zadat pozici. Do tohoto sloupce se ukládá zeměpisná šířka, do sloupce s příznakem {LONGITUDE} se ukládá zeměpisná délka. Toto označení může mít v každé tabulce jen jeden sloupec, uvést api_key stačí jen jednou v celém skriptu.
{TEXY[ col]}Sloupec bude akceptovat vstup formátovaný pomocí Texy!. Při uvedení parametru se do daného sloupce uloží převedená HTML verze.
{LFT}, {RGT}, {DEPTH}Sloupce s tímto příznakem budou použity pro traverzování kolem stromu. V editaci se u uzlu {LFT} zobrazí výběr vztahu (předchůdce nebo potomek), u uzlu {RGT} potom výběr příbuzného (hierarchický seznam všech uzlů kromě podstromu editovaného prvku). Sloupec {DEPTH} se v editaci nezobrazuje, protože jeho hodnota vyplývá ze zvoleného vztahu.
{GROUP funkce}Při seskupení řádků tabulky bude na sloupec aplikována daná agregační funkce (avg, count, distinct, max, min nebo sum).

Ve složených závorkách může být uvedeno i více hodnot, oddělují se od sebe čárkou a na jejich pořadí nezáleží.

Pokud je v popisu ještě jednou sekvence -- , pak se zbytek popisu ignoruje. To je vhodné pro vytváření skutečných komentářů k databázi, které se ale v administračním rozhraní nemají zobrazovat.

Rozpoznávané typy

DATEAdministrační rozhraní zobrazuje hodnoty ve formátu d.m.yyyy
TIMEAdministrační rozhraní zobrazuje hodnoty ve formátu h:mm:ss
DATETIMEAdministrační rozhraní zobrazuje hodnoty ve formátu d.m.yyyy h:mm
TIMESTAMPSlouží pro uložení datu a času modifikace záznamu, nelze změnit
YEARSlouží pro uložení roku 1901 až 2155.
INTPři zadávání je kontrolována celočíselnost. Dále jsou podporovány i typy tinyint, smallint, mediumint a bigint. Pokud je uvedeno unsigned, je kontrolována také nezápornost.
DECIMALPři zadávání je kontrolována číselnost a počet desetinných míst
FLOATPři zadávání je kontrolována číselnost
BOOLPři editaci se zobrazuje jako checkbox
ENUMPři editaci se zobrazuje jako <select>
SETPři editaci se zobrazuje jako <select multiple>
TEXTPři editaci se zobrazuje jako <textarea>. Podporovány jsou i typy tinytext, mediumtext a longtext, liší se od sebe počtem řádků a sloupců zobrazených při editaci.
BLOBSlouží pro ukládání souborů přímo do tabulky. Podporovány jsou i typy tinyblob, mediumblob a longblob, liší se od sebe maximální velikostí ukládaného souboru. Tento typ je u sloupců bez příznaku {FILE_DATA} zastaralý.

Všechny další datové typy, které mají uvedenou délku, se berou jako textové položky.

NOT NULL

Zadání sloupců s modifikátorem NOT NULL je v administračním rozhraní povinné. Kontrola je prováděna JavaScriptem při zadávání dat. S výjimkou číselných, datumových a vazebních sloupců však administrační rozhraní NULL hodnoty do databáze neukládá ani u ostatních sloupců, vždy se ukládají alespoň prázdné hodnoty.

NULL

Při explicitním uvedení modifikátoru NULL administrační rozhraní u sloupce vytvoří zaškrtávací políčko, kterým bude možné zadat prázdnou hodnotu.

DEFAULT 'value'

Jestliže je vytvářen nový záznam, použije se uvedená hodnota jako přednastavená.

REFERENCES table[(column)]

Příznak REFERENCES je pro generování administračního rozhraní nesmírně důležitý. Popisuje totiž vazby mezi tabulkami a tím zachycuje, jak mají být tabulky zobrazeny. U sloupce REFERENCES hraje velkou roli to, zda figuruje jako proměnná (popis je uvozen znakem $) nebo jako obyčejný sloupec.

Jestliže sloupec REFERENCES figuruje jako proměnná, nezobrazuje se tento sloupec při výpisu a není možné ho upravovat. Tabulka se také nezobrazuje mezi hlavními tabulkami na titulní stránce, ale odkaz na ni se zobrazuje pouze u řádků tabulek, na které se odkazuje.

Jestliže sloupec REFERENCES není proměnná, chápe se tento sloupec jako obyčejná hodnota, která je však propojena s jinou tabulkou. Při editaci se to projeví zobrazením výběrového seznamu s hodnotami z odkazované tabulky, při výpisu potom vypsáním odpovídající hodnoty z odkazované tabulky.

Příznak REFERENCES smí být uveden pouze u jednotlivých sloupců, přestože norma dovoluje jeho uvedení i pro celou tabulku a s využitím více sloupců odkazující tabulky. Pokud vede odkaz na primární klíč tabulky, tak jsou při výpisu vytvořeny odkazy na editaci zobrazeného záznamu.

ON DELETE CASCADE, ON DELETE SET NULL, ON DELETE RESTRICT

Příznak ON DELETE CASCADE způsobí, že při odstraňování řádku v odkazované tabulce bude smazán také řádek se stejnou hodnotou v této tabulce. Smazání závislých záznamů proběhne až po úspěšném smazání hlavního záznamu. Je podporováno pouze jednoúrovňové kaskádové mazání (při kaskádovém mazání závislých záznamů se již nemažou záznamy, které závisí na nich). Příznak ON DELETE SET NULL funguje podobně, ale místo smazání řádku nastaví sloupci prázdnou hodnotu. Při použití příznaku ON DELETE RESTRICT bude smazání položky zakázáno, pokud se na ni odkazují další položky.

CHECK (expression)

U sloupce nebo u tabulky může být uveden příznak CHECK, který zajistí, že hodnota sloupce bude při zadávání omezena danou hodnotou. Příkladem může být CHECK (znamka <= 5). Více příznaků CHECK je povoleno, stejně jako uvedení více podmínek oddělených AND v jednom CHECK. Není podporován operátor OR, hodnota navíc může být omezena pouze konstantou. MySQL podporuje pouze tabulkové CHECK a ještě navíc s uvedením klíčového slova CONSTRAINT - tedy např. CONSTRAINT znamka CHECK (znamka <= 5).

INDEX | UNIQUE | PRIMARY KEY (columns)

Použití primárního indexu Adminer dovoluje pouze s jednotlivým sloupcem. Primární index se v administračním rozhraní používá pro jednoznačnou identifikaci dat v tabulce. Jestliže tento index není uveden, tabulka bude považována za jednořádkovou tabulku - data do ní nebude možné přidávat ani je z ní mazat. Jednořádkové jsou obvykle tabulky s parametry aplikace.

První neprimární index se používá pro řazení hodnot při výpisu dat z tabulky. Pokus o vícenásobné uložení unikátního klíče je administračním rozhraním sledován. Za názvem každého sloupce v indexu může být uvedeno klíčové slovo DESC, které zajistí, že data budou podle tohoto sloupce tříděna sestupně. Např. INDEX (znamka, vytvoreno DESC).

Jestliže je potřeba v databázi vytvořit jiný index, než v jakém pořadí chceme data vypisovat v administračním rozhraní, můžeme do komentáře indexu napsat speciální verzi pro Adminer. Např. tedy UNIQUE (jazyk, idf), -- (idf, jazyk). Pokud do komentáře uvedeme pouze prázdné závorky, bude index Adminer ignorovat.

Index může mít uveden příznak {GROUP[ sloupce]}, který zajistí, že podle jeho sloupců bude možné řádky v tabulce seskupit.

FULLTEXT (columns)

Pro uvedené sloupce bude vytvořeno fulltextové vyhledávání ve variantě IN BOOLEAN MODE.

-- ---

Tento speciální komentář způsobí v editaci vložení oddělovače za položku, po které je uveden. Pokud je za třemi pomlčkami další text, zobrazí se jako nadpis sekce.

)[ COMMENT='description'];

Ukončení definice tabulky. Závorka musí být první nebílý znak v řádku. Komentář se použije jako popis tabulky.

Vícenásobný výběr

Pokud je první sloupec v tabulce označen jako proměnná, druhý sloupec nemá popis a oba mají referenci na nějakou tabulku, chápe se tato tabulka jako spojovací. Při editaci tabulky odkazované prvním sloupcem je potom zobrazen vícenásobný výběr s hodnotami podle tabulky odkazované druhým sloupcem. Jako popis tohoto pole se použije název spojovací tabulky, zaškrtnuté jsou hodnoty podle spojovací tabulky. Při aktualizaci záznamu se nejprve smažou všechny staré hodnoty a následně se nastaví hodnoty nové. Při výpisu se zobrazuje počet položek - jejich hodnota se zobrazí po najetí myši. Pokud je nastavena pouze jedna hodnota, rovnou se vypíše, pokud není nastavena žádná, nevypíše se nic.

Tabulka může mít na rozdíl od všech ostatních tabulek primární klíč přes dva sloupce. Pokud tabulka obsahuje další sloupce, je možné jejich hodnoty vyplnit přímo z editace nadřazené tabulky. Tabulka také může mít uveden modifikátor {SEARCH}, který umožní prohledávání přes tuto tabulku.

Přizpůsobení chování Admineru

Chování programu je možné ovlivnit nastavením direktiv v komentáři -- adminer:

LOGIN_USERLogin požadovaný pro vstup do administračního rozhraní. Jestliže není uveden, není přihlašovací jméno a heslo pro vstup do administračního rozhraní vyžadováno.
LOGIN_PASSWORDSHA1 hesla vyžadovaného pro vstup do administračního rozhraní. Pokud není nastaveno, vyžaduje se heslo stejné s loginem.
APP_NAMENázev aplikace použitý v záhlaví domácí stránky.
SYNTAX_CHECKPo vygenerování každého souboru bude provedena jeho syntaktická kontrola příkazem php -l. Jako hodnotu je možné použít cestu souboru php.
LANGTextové řetězce budou vytvořeny v zadaném jazyce. Povolená hodnota je cs (čeština) nebo sk (slovenština), jinak budou řetězce anglicky. Pokud se direktiva použije s prázdnou hodnotou, tak bude výpis textových řetězců obalen funkcí lang, která zajišťuje překlad textů do nastaveného jazyka administračního rozhraní.
WARNINGSBěhem generování budou zobrazována různá varování.
HTML_EDITPro HTML texty bude použit HTML editor. Při uvedení hodnoty fck bude použit FCKeditor.
FILE_NAMESK ukládaným souborům se kromě primárního klíče přidruženého záznamu do názvu vloží i původní název souboru (což může být užitečné pro vyhledávače). Hodnota 2 způsobí, že se v názvech souborů primární klíč nebude používat.
MULTIPLE_CHECKBOXU sloupců typu set a u spojovacích tabulek nebude zobrazen seznam hodnot značkou <select mutliple>, ale budou použity značky <input type="checkbox">.
MASTER_CLIENTZ hlavního editačního rozhraní bude možné editovat také tabulky svázané s tabulkou se sloupcem {LOGIN}. Jinak bude možné tyto tabulky editovat pouze z administračního rozhraní vytvořeného pro tabulku se sloupcem {LOGIN}.
APP_DESIGNSoubory pro generování se hledají nejprve v adresáři s názvem hodnoty této konstanty. Jestliže generovaný soubor v tomto adresáři existuje, je použit pro část generovaného souboru, která se vypisuje. Jinými slovy řečeno, soubory v tomto adresáři obsahují pouze design, dynamická část je vždy stejná. Příkladem hodnoty, na kterou může být konstanta nastavena, je "design". Kromě toho mohou být v podadresáři copy tohoto adresáře soubory, které se zkopírují a případně přepíší vygenerované soubory.
SEPARATE_INCLUDESoubory *.inc.php budou umístěny do tohoto adresáře. Jinak budou umístěny spolu s ostatními soubory. Obdobně se chovají konstanty SEPARATE_CSS, SEPARATE_JS a SEPARATE_IMG.
HOME_LINKSNa všech stránkách s výpisem tabulky bude odkaz na domácí stránku. Pokud design aplikace obsahuje tento odkaz na jiném místě, je vhodné tuto konstantu nenastavovat.
DATE_INPUTUrčuje, jakým způsobem bude zadáváno datum a čas. Hodnota SELECT zajistí zadávání pomocí výběrových polí, hodnota CALENDAR pomocí textového pole s kalendářem, jakákoliv jiná hodnota pomocí běžného textového pole.
REF_LINKSUrčuje, zda budou vytvořeny odkazy na závislé tabulky.
CSRF_DEFENSEUrčuje, zda budou editační formuláře chráněny proti útoku Cross-Site Request Forgery. V tom případě se do editačních formulářů přidá náhodný token autorizující editaci nebo smazání daného záznamu a tato operace bude provedena pouze v případě, že tento token dorazí. Použitý mechanismus dovoluje otevření více editačních oken třeba i se stejným záznamem, informace o platných tokenech se uchovává v session proměnné.

Dozpracování vygenerovaných souborů

V adresáři určeném konstantou APP_DESIGN může být soubor postprocess.php, ve kterém mohou být definované funkce postprocess_table($file, $table_name), postprocess_edit($file, $table_name), postprocess_bulk($file, $table_name) a postprocess_files($file, $filename). Jestliže soubor existuje a tyto funkce jsou definované, zavolají se bezprostředně před uložením každého souboru table.php, table-1.php resp. table-2.php s obsahem zapisovaného souboru a do souborů se zapíše hodnota, kterou tyto funkce vrátí.

Funkce se hodí především na změnu designu nebo funkčnosti, kterou Adminer jiným způsobem neumožňuje.

Vytvořená struktura

Po zpracování databázového skriptu je vytvořena následující struktura. Z této struktury se následně generuje administrační rozhraní.

$tables = array(
	$table_name => array(
		'desc' => "Popis tabulky",
		'columns' => $columns,
		'variables' => $columns,
		'default_columns' => array("Sloupec označený *", ...),
		'primary' => "Primární klíč",
		'indexes' => array("Sloupce v 1. indexu", ...),
		'referenced' => array($table_name => array($its_col => $my_col, ...), ...),
		'search' => array($column_name => $operator, ...),
		'disabling' => array($column_name => "$column_name $expression", ...),
		'check' => array($column_name => array("$expression", ...), ...),
		...
	),
	...
);

Kromě uvedených hodnot mohou být pod dalšími klíči uvedené různé příznaky (např. název sloupce {LOGIN} nebo příznak oddělovače za tabulkou). Popis proměnné $columns následuje:

$columns => array(
	$column_name => array(
		'type' => "Databázový typ",
		'length' => "Šířka sloupce",
		'desc' => "Popis",
		'ref_table' => $table_name,
		'ref_column' => $column_name,
		...
	)
	...
);

Stejně jako u tabulek, mohou být jako další klíče uvedeny příznaky sloupců (např. NOT NULL nebo DEFAULT).

Struktura vygenerovaných souborů

index.phpDomácí stránka
default.cssStyl používaný na všech stránkách
scripts.jsJavaScript funkce používané na všech stránkách
config.inc.phpKonfigurační údaje specifické pro konkrétní aplikaci
auth.inc.phpPřihlášení k systému. Vzhledem k posílání HTTP hlaviček musí být na samém začátku všech stránek.
connect.inc.phpPřipojení k databázi
functions.inc.phpFunkce potřebné pro vygenerované rozhraní
lib.inc.phpVložení všech potřebných knihoven kromě hlavičky
design.inc.phpDefinice vzhledu prezentace včetně formálních hlaviček HTML
menu.inc.phpHlavní nabídka aplikace
var.inc.phpGeneruje se prázdný, umožňuje vložit např. proměnné používané v aplikaci
.htaccessNastavení parametrů PHP
table.phpVýpis hodnot pro každou tabulku
table-1.phpEditace a aktualizace dat pro každou tabulku

Popis funkčnosti vygenerovaného rozhraní

V souboru menu.inc.php je uveden seznam všech tabulek, které nevyžadují pro své zobrazení žádné parametry neboli tabulek první úrovně. Pomocí příslušných odkazů lze zobrazit obsah tabulky.

Na stránce s výpisem tabulky se zobrazují sloupce, u kterých není nastaveno, aby se nezobrazovaly. Jestliže je u tabulky povolena editace, je možné ji vyvolat odkazem u hlavního sloupce tabulky. Jestliže se na tabulku odkazují další tabulky, je možné jejich obsah pro příslušný řádek vyvolat odkazem u daného řádku tabulky. Pod tabulkou je odkaz pro vložení nové položky.

Jestliže je povoleno vyhledávání, je dále zobrazen vyhledávací formulář.

Na konci stránky je odkaz pro návrat na domácí stránku a v případě, že se na zobrazenou tabulku odkazují jiné tabulky, pak také odkaz na tyto tabulky.

Editace probíhá na speciální stránce, kde se po odeslání formuláře také provede aktualizace. Jestliže je aktualizace úspěšná, proběhne přesměrování na stránku s výpisem dat, kde je zobrazena informace o výsledku provedené operace. Jestliže je aktualizace neúspěšná, je o tom uživatel informován a formulář se zobrazí znovu s daty, která dříve vyplnil. Formulář pro editaci a přidávání je totožný, odchylky se řeší přímo ve vygenerované stránce.

Přehled použitých stylů je uveden v souboru default.css.

Bezpečnost

Na každé stránce je ověřována přítomnost přihlašovacích údajů. Jestliže přihlašovací údaje chybí, je zobrazen formulář pro jejich zadání. Po jeho vyplnění se přihlašovací údaje uloží do session proměnné, takže na dalších stránkách jsou již k dispozici. Přihlášení lze tedy realizovat na jakékoliv stránce administračního rozhraní, přičemž po přihlášení je zobrazena dotazovaná stránka. Tento systém také umožňuje pohodlnou práci v případě, kdy dojde k automatickému odhlášení po určité době nečinnosti způsobenému vypršením session proměnné (ovlivňuje konfigurace PHP).

Závěr

Adminer se dá použít pro širokou škálu aplikací a snadným způsobem umožňuje vytvořené rozhraní dané aplikaci graficky přizpůsobit. Vytváří jednotný a přehledný kód, do kterého lze snadno doplňovat další funkčnost.