ARCHIV |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Perl (85) - CGI - generování dokumentu modulem CGIDnes postupně projdeme nejdůležitější funkce, jež nabízí modul CGI a podrobněji si rozebereme jejich možné parametry. Již víme, jak pomocí modulu CGI vytvořit jednoduchý HTML dokument. Uvedli jsme si základní použití fukcí, které si dnes rozebereme důkladněji. Hlavička dokumentuHlavička rozhoduje o tom, jak se bude dále ubírat generování dokumentu. Buď se vygeneruje dokument, nebo, v případě přesměrování, se zavolá nějaká jiná stránka. Poznámka - Obyčejně prohlížeč hlavičky nezobrazuje. Pokud bychom je chtěli kontrolovat, lze spouštět skript s textovým výstupem z příkazového řádku nebo využít například lynx.
$ lynx -mime_header http://localhost/cgi-bin/skript.cgi
Určení typu dokumentuHlavička standardně obsahuje několik informací, z nichž nejdůležitější je datový typ dokumentu. Často se zde setkáme s informacemi o nastavení jazyka, kódování, datu vypršení platnosti stránky apod. Nejjednodušší volání funkce header je bez parametrů. V takovém případě se do výsledné stránky vygeneruje řetězec Content-Type: text/html. header však navíc volitelně přijímá hash s určenou strukturou. Ta je dána seznamem následujících klíčů.
Pomocí header je ale možné vytvořit libovolnou hlavičku. I přesto, že uvedeme klíč, jejž funkce header nerozpoznává, se vytvoří hlavička. Jejím jménem je automaticky klíč (bez úvodní pomlčky a s nahrazenými podtržítky) a hodnotou předaná hodnota prvku. PřesměrováníPokud nechceme generovat dokument, ale pouze přesměrovat jinam, použijeme funkci redirect, která funguje podobně jako header. Předáváme ji hash s hodnotami uvedenými v tabulce.
Hlavička HTMLZatímco hlavičky dokumentu v předcházejícím oddílu mohly platit obecně, dále budeme předpokládat, že naše CGI skripty generují HTML dokumenty. HTML potřebuje také svoji vlastní hlavičku. Ta obsahuje vše od určení DTD souboru pomocí <!DOCTYPE> až po element <BODY>. Dále následuje obsah dokumentu a na závěr je třeba vytisknout HTML patu, která zahrnuje elementy </BODY> a <HTML>. Hlavičku generuje na základě předaných parametrů funkce start_html. Parametrem funkce start_html je hash, jehož rozpoznávané prvky jsou uvedené v tabulce.
Uvedeme-li prvek, který není funkcí start_html rozpoznán, je z něj vytvořen parametr elementu <BODY>. Jako příklad HTML hlavičky si uveďme následující kód.
Ten vytvoří HTML hlavičku tak, jak ji vidíme v dalším výpisu.
HTML obsahModul CGI obsahuje značné množství funkcí. Bylo by zbytečné zde uvádět kompletní přehled, neboť pro většinu elementů, které budeme potřebovat, s největší pravděpodobností platí, že jsou implementovány jako funkce se stejnými názvy jako elementy. Později si představíme pouze práci s formuláři, neboť ta je pro náš záměr klíčová. V tomto okamžiku si ukážeme pouze stručný úsek textu ze zdrojového kódu.
K němu snad jediný komentář. Výsledkem je řetězec na jediném řádku. To není u jazyka HTML podstatné, protože nebere bílá místa navíc v potaz. Máte-li zájem o přehledný výsledný HTML kód, je třeba na místech zalomení používat \n. Znak \n se promítne jako nový řádek do zdrojového kódu, ale nezmění výslednou podobu HTML dokumentu. Pro nový řádek v HTML se použije funkce br. AutoloadingPokud by vám zde i přes velké množství nějaký element scházel (například tehdy, máte-li svůj vlastní DTD soubor), je zde možnost autoloadingu. Lze tak volat metodu s prakticky libovolným názvem. K tomu stačí zavést do programu modul s přepínačem -autoload.
use CGI qw(-autoload);
Pokud použijeme autoloading, pak musí mít každá funkce závorky i v případě, že jí nepředáváme žádný parametr. Generování formulářůFormuláře jsou základním HTML prvkem pro uživatelský vstup a následně tedy kritériem dynamičnosti. Z tohoto důvodu jim nyní budeme věnovat větší prostor. HTML podporuje několik formulářových prvků, kterými uživatel ovlivňuje vstup. Jsou to tyto prvky.
Pro všechny tyto prvky existují v modulu CGI příslušné funkce, které je generují. Nicméně používat CGI pro generování formuláře, pokud se na základě nějakých vstupních dat jeho struktura nemění, není teoreticky vůbec nutné. Nutné je CGI pouze pro zpracování získaných hodnot. Chcete-li formuláře vytvářet staticky, můžete klidně následující část přeskočit. Všechny prvky jednoho formuláře jsou uvnitř elementu FORM. Tento element určuje mimo jiné metodu odesílání dat a umístění, kam se budou data spolu s požadavkem posílat. Základní struktura každého formuláře tak bude vypadat takto.
Uvnitř budou jednotlivé prvky formuláře, které jsou vytvářeny konkrétními funkcemi. Každá z nich přijímá jako hodnotu minimálně jméno a implicitní hodnotu - tedy klíče -name (který je jako jediný vždy povinný) a -value v předávaném hashi. Právě podle -name každý formulářový prvek vrací hodnotu zadanou uživatelem. Pokud jako -name použijeme slovo password, pak funkce param na základě identifikátoru password vrátí heslo zadané uživatelem. TlačítkoV HTML je několik typů tlačítek. My se budeme zabývat pouze tím nejdůležitějším - tlačítkem pro odeslání dat. K jeho vytvoření slouží funkce submit.
print submit(-name=>"akce", -value=>"Odešli data!");
Zadání textu a heslaFunkce textfield resp. password_field vytvářejí prvky pro zadání jednořádkového textu resp. hesla. Dále je k dispozici funkce textarea pro textové pole.
SeznamyFunkce popup_menu vytváří rozbalovací seznam.
Zaškrtávací poleMáme 2 funkce, které vytváří zaškrtávací pole. Pro skupinu polí se stejným jménem zde je checkbox_group a samostatné pole použijeme checkbox. Zde je ukázka jednoduchého checkboxu. Je-li položka zaškrtnuta, automaticky se vrátí hodnota on.
print checkbox(-name=>"checkbox_name", -checked=>1, -label=>"I agre");
Skupinu zaškrtávacích políček se stejným jménem lze formátovat do daného počtu sloupců nebo řádků. Pomocí -colheaders nebo -rowheaders lze navíc dát jednotlivým sloupcům titulek.
PřepínačPřepínací pole se vytváří pomocí funkce radio_group. Funguje podobně jako skupina checkboxů s tím rozdílem, že nelze označit libovolný počet polí. Syntaxe je také totožná. Skrytá hodnotaVelice často užívaný prvek hidden slouží pro předávání nějaké proměnné hodnoty, kterou však nezadává uživatel. Jeho typickým užitím je například uchování id uživatele, který mění údaje ve svém profilu. Sám uživatel o id nic neví a přesto bychom bez něj nevěděli, koho údaje změnit.
print hidden(-name=>"user_id", -default=>215);
Upload souboruNa závěr uvedeme, jak lze získávat od uživatele soubory. K tomu je určena funkce filefield, jejíž volání může vypadat například takto.
print filefield(-name=>"jméno_souboru");
Zajímavější je obsluha takového formuláře. Na to použijeme funkci upload a získanou proměnnou dále používáme jako ovladač. Tento kód vytiskne obsah textového souboru na výstup.
Související články
Předchozí Celou kategorii (seriál) Další
Perl (1) - Dávka teorie na úvod
Perl (2) - Úvod do syntaxe Perl (3) - Proměnné Perl (4) - Čísla a řetězce Perl (5) - Podmínky Perl (6) - Pravdivostní výrazy Perl (7) - Vstup poprvé Perl (8) - Některé základní vestavěné funkce Perl (9) - Cykly Perl (10) - Další řídící struktury Perl (11) - Pole - úvod Perl (12) - Pole - základní operace Perl (13) - Hashe Perl (14) - Další nástroje pro seznamy Perl (15) - Výchozí proměnná, heredoc, symbolické odkazy Perl (16) - Regulární výrazy - začínáme Perl (17) - Regulární výrazy - kotvy Perl (18) - Regulární výrazy - množiny znaků Perl (19) - Regulární výrazy - opakování a kvantifikátory Perl (20) - Regulární výrazy - magické závorky Perl (21) - Regulární výrazy - nahrazování Perl (22) - Regulární výrazy - přepínače Perl (23) - Regulární výrazy - rozšířené vzory Perl (24) - Regulární výrazy - příklady Perl (25) - Regulární výrazy - závěr Perl (26) - Podprogramy Perl (27) - Prototypy Perl (28) - Rozsahy platnosti proměnných Perl (29) - Úvod k práci se soubory Perl (30) - Práce se soubory Perl (31) - Testování souborů Perl (32) - Jiné typy souborů Perl (33) - Formátování výstupu - printf Perl (34) - Formátování výstupu - formáty Perl (35) - Vestavěný debugger Perl (36) - Grafické debuggery Perl (37) - Začínáme s moduly Perl (38) - Rozhraní modulu Perl (39) - Pragma Perl (40) - Dodatky k modulům Perl (41) - CPAN Perl (42) - Argumenty příkazového řádku Perl (43) - Přepínače Perl (44) - Dlouhé přepínače Perl (45) - Odkazy Perl (46) - Užití odkazů a anonymní data Perl (47) - Složitější datové struktury Perl (48) - Libovolně složité datové struktury Perl (49) - Tabulky symbolů a typegloby Perl (50) - Uzávěry a iterátory Perl (51) - Signály Perl (52) - Externí příkazy Perl (53) - Režim nakažení Perl (54) - Fork Perl (55) - Eval Perl (56) - Volby příkazu perl Perl (57) - Jednořádkové skripty Perl (58) - OOP - úvod Perl (59) - OOP - typické použití Perl (60) - OOP - dědičnost Perl (61) - OOP - přínos a užití dědičnosti Perl (62) - OOP - přetěžování Perl (63) - OOP - závěr Perl (64) - Projekt - čtečka sportovních výsledků Perl (65) - Projekt - získání dat Perl (66) - Projekt - výběr zápasů a podrobnosti Perl (67) - Projekt - dokončujeme modul Perl (68) - Projekt - zobrazení zápasů Perl (69) - Projekt - online přenos Perl (70) - Plain Old Documentation Perl (71) - Navazování proměnných Perl (72) - Navazování složitějších datových typů Perl (73) - DBM Perl (74) - Sockety Perl (75) - Obsluha více klientů Perl (76) - Síťová hra v kostky Perl (77) - Služby internetu Perl (78) - Databáze - úvod Perl (79) - Databáze - manipulace s daty Perl (80) - Databáze - závěrečné poznámky Perl (81) - CGI - příprava webového serveru Perl (82) - CGI - první skripty Perl (83) - CGI - získávání dat od uživatele Perl (84) - CGI - usnadnění tvorby skriptů pomocí modulu CGI Perl (86) - CGI - cookies Perl (87) - CGI - příklad aplikace Perl (88) - CGI - závěr Perl (89) - Mason - snadné psaní webů Perl (90) - Mason - speciální bloky Perl (91) - Mason - handlery Perl (92) - Mason - závěr Perl (93) - Catalyst - MVC framework pro Perl Perl (94) - Catalyst - základy pro psaní aplikace Perl (95) - Catalyst - šablony Perl (96) - Catalyst - spolupráce s databází Perl (97) - Curses - tvorba textových uživatelských rozhraní Perl (98) - Curses - pozicování a okna Perl (99) - Curses - měření rychlosti psaní Perl (100) - Curses - použití hotových widgetů Perl (101) - Curses - jednoduchý textový editor Perl (102) - Rozšiřování Perlu pomocí XS Perl (103) - Rozšiřování Perlu pomocí SWIG Perl (104) - Testování rychlosti Perl (105) - Testování programových jednotek Perl (106) - Debugování pomocí komentářů Perl (107) - Moose - moderní objektový systém Perl (108) - Moose - základní vlastnosti Perl (109) - Moose - role Perl (110) - Moose - meta API Perl (111) - Pokročilá práce se seznamy Perl (112) - Práce s PDF Perl (113) - Práce s archivy Perl (114) - Tk - úvod Perl (115) - Tk - umísťování widgetů Perl (116) - Tk - základní widgety Perl (117) - Tk - některé pokročilejší widgety Perl (118) - Tk - čas a události Perl (119) - Tk - CD man Perl (120) - Wx - základní práce s widgety Perl (121) - Wx - události Perl (122) - Gtk2 - úvod Perl (123) - Gtk2 - základní práce s obrázky Perl (124) - Gtk2 - události a čas Perl (125) - Gtk2 - vlastní widgety Perl (126) - Gtk2 - textové okno a práce s pozicemi Perl (127) - Gtk2 - hierarchické seznamy Perl (128) - Gtk2 - dialogy Perl (129) - Gtk2 - skládání widgetů Perl (130) - Gtk2 - menu a toolbary Perl (131) - Gtk2 - transparentní okna, tray ikona, výběr souborů Perl (132) - Gtk2 - drag&drop, druid Perl (133) - Gtk2 - úpravy vzhledu aplikací pomocí rc Perl (134) - Gtk2 - Glade Interface Designer Perl (135) - XML - čtení a zápis Perl (136) - XML - DOM a SAX přístupy Perl (137) - Vlákna Perl (138) - Memoizace - cachování podprogramů Perl (139) - Profilling - efektivní odhalování pomalých míst v programu Perl (140) - Profilling - píšeme si vlastní profiler / debugger Perl (141) - Formátování kódu, deparsování, perltidy Perl (142) - Způsoby konfigurování Perl (143) - Struktura datových typů, správa paměti Perl (144) - POE - událostmi řízené programování Perl (145) - POE - aplikace typu klient-server Perl (146) - Perl 6 - jazyk budoucnosti Perl (147) - Perl 6 - regulární výrazy, nové operátory Perl (148) - Perl Culture Perl (149) - Závěr Pozvánka na Český Perl Workshop Perl 5.22.0 a vše okolo Perl 5.24.0 a vše okolo Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||||||||||||||||||||||||||||||||||||||||||||||||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |