Nástěnka v PHP
Často je nástěnka považována za totéž, co návštěvní kniha. Minimálně jeden podstatný rozdíl zde však existuje. Stejně jako u klasické papírové nástěnky, tak i u té internetové jsou zprávy „vyvěšeny“ (zobrazeny) pouze po určitou dobu. Kromě této hlavní funkce, bude mít nástěnka všechny funkce jako návštěvní kniha (dělení slov, detekce odkazů, stránkování atd.). Celá aplikace je založena na databázi MySQL.
Aby bylo vše přehlednější, použijte tyto soubory – board.php (zobrazení zpráv), form.php (formulář pro přidávání zpráv), post.php (uložení zpráv), header.php (hlavička), db.php (připojení k databázi), create_table.php (vytvoření databázové tabulky), style.css (kaskádové styly).
Vytvoření databázové tabulky (create_table.php)
Potřebovat budete pouze jednu tabulku s názvem „board“, kam se budou ukládat všechny zprávy (příspěvky). Tabulka bude mít sedm položek – id (unikátní číslo zprávy), author (autor zprávy), email (email autora), from_date (datum, odkdy bude zpráva zobrazena), to_date (datum, dokdy bude zpráva zobrazena), subject (předmět zprávy), body (text zprávy). U položek „from_date“ a „to_date“ použijte datový typ „date“, který označuje datum ve formátu rok-měsíc-den (RRRR-MM-DD).
|
Soubor db.php, kterým se připojíte k databázi, obsahuje všechny potřebné údaje (jméno databáze ad.)
|
Hlavička (header.php)
Standardní hlavička je kromě tří dobře známých HTTP hlaviček zabraňujících cashování tvořena pouze čistým HTML, proto zde nebudu uvádět dlouhý zdrojový kód, ale jen malý obrázek.
Zobrazení zpráv a formuláře (board.php)
Proměnná $action určuje, jaká akce se provede. Tato proměnná může obsahovat pouze dvě hodnoty – „view“ (zobrazení zpráv) a „post“ (přidávání zpráv). Jelikož uživatelům nástěnky nabízíte možnost prohlédnout si jak „Aktuální zprávy“ (mají být právě „vyvěšené“), tak i „Staré zprávy“ („prošlé“ zprávy), musíte si definovat další proměnnou $what. Pokud obsahuje hodnotu „new“, zobrazíte aktuální zprávy; jestliže obsahuje hodnotu „old“, zobrazíte staré zprávy. Poslední z klíčových proměnných je proměnná $page obsahující číslo stránky, která se zobrazí.
Nejprve zjistíte, zda jsou tyto základní proměnné zinicializovány. Pokud ne, vložíte do nich standardní hodnoty.
|
V první větvi následující podmínky řešíte zobrazení zpráv. V závislosti na obsahu proměnné $what vypíšete nadpis („Aktuální zprávy“ nebo „Staré zprávy“). Současně si definujte nejdůležitější část SQL dotazu, který za chvíli použijete. Jedná se o část za slovem WHERE, tedy o podmínku určující, jaké zprávy z databáze vyberete. Funkce NOW() vrací aktuální datum a čas ve formátu RRRR-MM-DD HH:MM:SS. Pokud chcete zobrazit aktuální zprávy, musí být „from_date“ (datum zobrazení zprávy) menší nebo rovno aktuálnímu datu a zároveň (spojka AND) „to_date“ (datum, dokdy bude zpráva zobrazena) větší nebo rovno aktuálnímu datu. Jestliže zobrazujete staré zprávy, stačí zjistit, zda „to_date“ je menší než aktuální datum.
|
Nyní přichází na řadu výběr zpráv z databáze. Nejdříve musíte určit, po kolika se zprávy zobrazí ($view_number). Následně pomocí proměnné $page spočítáte první zprávu, která se zobrazí. Z databáze pak vyberete zprávy odpovídající výše popsané podmínce $sql. „ORDER BY id DESC“ znamená, že zprávy budou seřazeny podle svého čísla, a to sestupně. Pomocí „LIMIT $start, $view_number“ omezíte výběr tak, že vyberete 10 zpráv (standardní hodnota $view_number), počínaje zprávou $start.
|
Teď již můžete dané zprávy vypsat. Každá zpráva bude v samostatné tabulce, nad níž bude uvedeno číslo zprávy. Jediný problém nastává u data „od – do“, které uvedete v hranatých závorkách za předmětem zprávy. V databázi máte totiž datum ve formátu RRRR-MM-YY, potřebujete však datum ve formátu DD. MM. YYYY. Použijte funkci Explode, která dokáže rozdělit řetězec na jednotlivé části oddělené určitým znakem (v našem případě pomlčkou).
|
Poslední částí je vypsání odkazů na stránky s dalšími zprávami. Nejprve z databáze vyberte všechny zprávy odpovídající podmínce $sql. Následně zjistíte počet stran, na kterých se zprávy zobrazí, což je podíl celkového počtu zpráv a počtu zpráv na jedné straně ($view_number). Pomocí jednoduchého cyklu pak již jen vypíšete odkazy na jednotlivé stránky. U právě zobrazované stránky ($page) odkaz vytvářet nemusíte.
|
V druhé části základní podmínky buď zobrazíte formulář, nebo uložíte zprávu do databáze. K tomu potřebujete proměnnou $write. Pokud je hodnota „false“, zobrazí se formulář, pokud „true“ uloží se zpráva do databáze.
|
Protože zdrojový kód formuláře je velmi dlouhý, uvedu jen některé důležité části a malý obrázek.
Od uživatele budete získávat několik údajů – jméno ($author), email($email – nepovinný), předmět ($subject), text zprávy ($body) a dvě data – odkdy ($from_day – den, $from_month – měsíc, $from_year – rok) a dokdy ($to_day – den, $to_month – měsíc, $to_year – rok) má být zpráva zobrazena. Aby uživatel nemusel po odeslání chybně vyplněného formuláře vyplňovat vše znovu, budete zadané údaje uchovávat v atributu VALUE. Problém však nastává u částí, které jsou tvořeny formulářovým prvkem SELECT. Jde to však vyřešit tak, že jednotlivé položky budete vypisovat přes cyklus a pokud se předchozí hodnota (např. $from_month) rovná proměnné $i, vypíšete „SELECTED“, což způsobí, že uživatel nebude muset po odeslání chybně vyplněného formuláře vybírat datum znovu. Zde uvádím pouze jednu část souboru form.php. Obdobně se však postupuje i u dalších „selectů“.
|
Ve formuláři je také jedno skryté pole s názvem „sent“. Pokud je proměnná $sent zinicializována, byl formulář odeslán, a tak se můžete pustit do kontroly zadaných údajů. Nejprve zkontrolujte, zda byly vyplněny všechny povinné údaje. Následně zjistěte, jestli není datum OD větší než datum DO. K tomu využijte funkci MkTime(), která převádí datum na počet sekund od 1. ledna 1970. Jednotlivé parametry se zadávají v pořadí hodina, minuta, sekunda, měsíc, den, rok. Podobně zkontrolujte, zda datum OD není menší než dnešní datum. Pokud nastala nějaká chyba, uložte chybovou hlášku do proměnné $error a vypište ji na konci formuláře. Jestliže je vše v pořádku, vložte do proměnné $write hodnotu „true“. Následující podmínka snad žádný podrobný komentář nepotřebuje – v závislosti na proměnné $write se buď provede zápis nebo se zobrazí formulář.
|
Uložení zprávy do databáze (post.php)
Uložení zprávy do databáze je velmi jednoduché. Všechny prováděné operace byly popisovány v seriálech Návštěvní kniha a Diskusní fórum. Jediné, co okomentuji, je získání data OD a DO. K tomu použijete funkci Date(). Jako první parametr uvedete formát data, který vyžaduje databáze MySQL (RRRR-MM-DD), jako druhý počet sekund od 1. ledna 1970, k čemuž znovu použijete funkci MkTime(). Velká výhoda této funkce spočívá v tom, že si poradí i se špatně zadaným datem. Např. nesmyslné datum 31. 4. převede na 1. 5.
|
Nástěnku můžete použít pro vkládání akcí a zpráv, které mají omezenou platnost. Smíte si ji však libovolně upravit a použít třeba jako obyčejnou návštěvní knihu. Kompletní zdrojové kódy si můžete stáhnout.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Zabezpečení e-mailů: Jak můžete chránit vaši firemní komunikaci
13. prosince 2023 -
AI v programování: Jak používat GitHub Copilot (část 1)
12. února 2024 -
inPage AI: Revoluční nástroj pro tvorbu webů
3. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
ComBett
Čvn 28, 2009 v 15:27Ahojte,
v PHP som uplny zaciatocnik, tato nastenka sa mi veeeelmi pozdava, aj to mam na serveri rozbehane.
Problem mam ale v tom, ze by som rad odstranil zadavanie datumu „od:“, teda aby sa tam dosadil dnesny datum. Pokusov som spravi vela, ale nezdarilo sa. Pomoze mi niekto?
Vopred vdaka.
c.