ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
PHP (26) - Formuláře na sto způsobůUkažme si, jak v PHP zpracovávat takové prvky formulářů, jako jsou přepínače, zaškrtávací políčka nebo pole se seznamem. Zatím jsme tak nějak předpokládali, že naše formuláře budou
obsahovat textová pole. Většina z nich je skutečně má. Ale pojďme se
podívat, jak v PHP zacházet s formuláři, které mají zaškrtávací
políčka, přepínače nebo pole se seznamem. Také si poněkud vylepšíme
zadávání atributu action v tagu <FORM> při definici formuláře. Specifikace názvu skriptuUkázky, které jsme zatím předvedli měly v atributu action tagu
<form> v definici formuláře cestu ke
zpracovávajícímu skriptu zadanou "natvrdo". To bude dobře fungovat v
učebnicích, ale ne v reálném světě. Ve skutečnosti totiž poměrně často
nastává situace, kdy při práci potřebujeme skript přejmenovat nebo
přesunout, a tím pádem bychom museli vždy atribut action přepsat tak,
aby odrážel nové umístění skriptu. Při čemž lehce může dojít k chybě. (Úplný horor nastane při větší změně webu,
například při přesouvání adresářů). Aby se to nestalo, povězme si rovnou, že PHP umožňuje přístup k celé řadě tzv. předdefinovaných proměnných. O polích $_REQUEST, $_GET a $_POST jsme již mluvili, ale existují i jiná. Třeba pole $_SERVER, které webový server vytváří, aby Vám poskytl nějaké informace o sobě a prostředí. A právě jedním z užitečných prvků tohoto pole je prvek $_SERVER["PHP_SELF"], který vrací cestu a aktuálnímu PHP skriptu relativně ke kořenové složce webu (ne systému (!!!)). Takže, namísto toho, abychom napříště psali <form method="POST"
action="cesta/nazev_skriptu.php">
budeme raději psát do definice formuláře něco ve smyslu: <form method="POST"
action="<?echo $_SERVER["PHP_SELF"]?>">
což se pochopitelně bude týkat jen a pouze situace, kdy máme
definici formuláře a kód jej zpracovávající v jednom souboru. Formulář se zaškrtávacími políčkyU zaškrtávacích políček ve formulářích je situace trochu náročnější než u textových polí. Náročnější o to, že při definici formuláře může být políčko ve výchozím stavu buďto zaškrtnuté nebo nezaškrtnuté. To ještě není tak zlé, horší je, že HTML definuje pro "zaškrtnutost" políčka atribut CHECKED, zatímco pro nezaškrtnuté políčko nic. Mějme například formulář, ve kterém budeme požadovat po uživateli, aby zaškrtnul, o které rubriky serveru LINUXSOFTu bude mít zájem. Kontrola bude spočívat v tom, že (čistě z výukových důvodů) bude muset uživatel zaškrtnout všechna políčka. Může to vypadat přibližně takto (ukázka je zkrácena, celý skript viz odkaz): <?
Ukázat celý skript | Spustit skript Když si uvědomíme všechny souvislosti, není to zas až tak složité.
Jelikož PHP odesílá data ze zaškrtávacího políčka pouze v případě, že
je zaškrtnuto, můžeme tvrdošíjně požadovat všechna políčka pomocí
trojice testů empty(). A v definici formuláře si můžete všimnout, že
pomocí ternálního operátoru při zobrazení formuláře posíláme buď to
atribut CHECKED, nebo nic. Pole zaškrtávacích políček(Tedy, to je nadpis, musím uznat). Raději hned vysvětlím, o co jde. Někdy, když máme ve formuláři více zaškrtávacích políček, je lepší je zpracovávat jako pole hodnot než jako samostatné proměnné. Což lze v PHP snadno udělat tehdy, když na to budeme při definici formuláře myslet a zaškrtávací políčka si správně nazveme. Tedy, místo NAME="Nazev" použijeme NAME="Nazev[]" a nazveme tak všechny přepínače ve skupině. Připravil jsem na toto téma skript. Budeme předpokládat, že se jedná o kus formuláře, který se Vám objeví před stažením nějakého freewarového produktu. A jako kontrola bude sloužit to, že musíte souhlasit minimálně s licenčními podmínkami. Ukázat
skript | Spustit
skript Skript si zaslouží něco komentářů. Tak především ověřování. Protože
je proměnná $_POST["souhlasim"] pole, nemůžeme testovat hodnotu na
rovnost, ale musíme použít funkci in_array. (Jinak by nám nezbylo než
celé pole procházet ve smyčce, což je ještě delší.) Obdobné to bude v
definici
formuláře. Pamatujte na to, že proměnná $_POST je nyní pole obsahující
pole! V díle o polích
jsem Vás varoval, že to je možné, tady vidíte, že je to skutečně tak. Formulář s přepínačiTo, co bylo řečeno o zaškrtávacích políčcích, platí obecně i na přepínače (Option buttons). S tím rozdílem, že u sady přepínačů by měla být jako výchozí volba (CHECKED) označena VŽDY PRÁVĚ JEDNA možnost. Nemusíte se vůbec rozpakovat a můžete dát několika prvkům <INPUT TYPE=RADIO> stejný atribut NAME (bez použití pole), protože ve skriptu bude tak jako tak platit jen jedna volba. Čili, následujcí definice formuláře je zcela v pořádku: <form method="POST"
action="<?echo $_SERVER["PHP_SELF"]?>">
Neboli, vždy bude existovat jen jen jedna hodnota $_POST["plat"].
Není důvod si přepínače pojmenovávat navzájem odlišnými jmény. Formulář s rozevíracím seznamemRozevírací seznam Vám umožňuje vybrat jednu nebo více hodnot z
předem daného výběru. Jednoduše řečeno - pokud Vám umožňuje vybrat
jednu hodnotu, platí na něj víceméně postřehy týkající se přepínačů. A
pokud Vám umožňuje zadat více hodnot, platí na něj věci, které jsme
prozradili u zaškrtávacích políček, včetně toho machrování s poli.
Časem zjistíte, že se Vám některé rozevírací seznamy neustále opakují. Není žádný problém vytvořit si funkci pro definici například rozevíracího seznamu pro zobrazení měsíce v roce. Mohlo by se to odvíjet v tomto duchu: <?
Příště se v našem seriálu podíváme na nějaké postřehy pro práci s formuláři, které se Vám budou hodit (nejen) v PHP.
Související články
Předchozí Celou kategorii (seriál) Další
PHP (1) - Historie a budoucnost
PHP (2) - Jak to funguje PHP (3) - Instalace PHP (4) - Základy syntaxe PHP (5) - Příkaz Echo; formátování kódu PHP (6) - Typy proměnných PHP (7) - Pole PHP (8) - Výrazy, konstanty, inkrementace PHP (9) - Přetypování proměnných PHP (10) - Logické výrazy a operátory PHP (11) - Operátory porovnání; priorita operátorů PHP (12) - Podmínky PHP (13) - Příkazy cyklu PHP (14) - Cyklus for PHP (15) - Funkce PHP (16) - Vyrobme si kalendář PHP (17) - Dokončujeme kalendář PHP (18) - Funkce pro práci s poli PHP (19) - Objekty PHP (20) - Objekty podruhé PHP (21) - Vkládání souborů PHP (22) - Regulární výrazy PHP (23) - Neztraťte se ve funkcích PHP (24) - Pracujeme s formuláři PHP (25) - Formuláře - nikomu nevěřte PHP (27) - Příklady na formuláře PHP (28) - Chybovati je lidské PHP (29) - Soubory a adresáře PHP (30) - Počitadlo pomocí souborů PHP (31) - Upload a download souborů PHP (32) - Příklad na BLOG PHP (33) - HTTP hlavičky PHP (34) - Úvod do databází PHP (35) - Uložení dat v databázi PHP (36) - Připojujeme se k MySQL PHP (37) - Tvorba tabulek v MySQL PHP (38) - Dolujeme data z MySQL PHP (39) - Zobrazujeme a stránkujeme data PHP (40) - PHP a vkládání záznamů do databází PHP (41) - Měníme data v databázích PHP (42) - Odstraňujeme databázová data PHP (43) - MySQL rychleji a rychleji PHP (44) - MySQL ještě rychleji PHP (45) - Jsou data v databázi v bezpečí? PHP (46) - Importujeme data do databáze PHP (47) - Exportujeme data PHP (48) - Práce s binárními daty (BLOB) PHP (49) - Kam kráčíš, MySQL? PHP (50) - Ověřování uživatelů PHP (51) - Přenos dat mezi stránkami PHP (52) - Cookies PHP (53) - Sessions PHP (54) - Dodržování webových standardů PHP (55) - Odesílání e-mailů PHP (56) - Tisk a PDF PHP (57) - XML PHP (58) - XML lépe a radostněji PHP (59) - zapisujeme XML PHP (60) - Rozsáhlejší projekty 1. PHP (61) - Rozsáhlejší projekty 2. PHP (62) - Rozsáhlejší projekty 3. PHP (63) - Rozsáhlejší projekty 4. PHP (64) - Ladění kódu PHP (65) - Ladění kódu 2. PHP (66) - PHP debugger PHP (67) - Zdroje informací o PHP PHP (68) - Stavíme portál PHP (69) - Stavíme portál 2. PHP (70) - Registrace uživatelů na portálu PHP (71) - Přihlašování uživatelů na portál PHP (72) - Hrátky s uživateli PHP (73) - Frontend a backend PHP (74) - Administrátorské rozhraní portálu PHP (75) - Pokračujeme na portále PHP (76) - Zobrazujeme data na portále PHP (77) - Portál, databáze a relace PHP (78) - Informační obsah portálu PHP (79) - Triky s formuláři a ergonomie webu PHP (80) - Administrace diskografie hudebního portálu PHP (81) - Uživatel versus programátor PHP (82) - zabezpečení vstupů formulářů PHP (83) - Ukládání textů písní na hudebním portále PHP (84) - Ještě k registraci PHP (85) - ukládání souborů do databáze na portálu PHP (86) - zobrazení dat a stahování soborů pro registrované PHP (87) - finišujeme portál PHP (88) - provoz ve Windows PHP (89) - cesta do hlubin php.ini PHP (90) - Poťouchlé konfigurační volby PHP (91) - php.ini potřetí a naposledy PHP (92) - funkce pro interakci s operačním systémem PHP (93) - příkazový řádek PHP (94) - GUI PHP (95) - GUI podruhé PHP (96) - (ne)bezpečné PHP PHP (97) - bezpečnost ještě jednou PHP (98) - PHP 5. PHP (99) - Budoucnost PHP PHP (100) - Závěr PHP (101) - Apríl: Příklady z praxe php rewrite Byte order mark a PHP Předchozí Celou kategorii (seriál) Další Ke stažení jako HTML nebo jako PDF.
|
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 |