Návštěvní kniha v PHP bez použití databáze - základ aplikace
14. 11. 2000 | Michal Kebrt | PHP | Komentáře: 12
V tomto článku vám představím užitečnou aplikaci. Již ovládáte práci s proměnnými, soubory, cykly i podmínkami, a tak nebude problém vytvořit návštěvní knihu. S takovou návštěvní knihou (někdy bývá také nazývána "Diskuse" či "Diskusní fórum") se jistě setkal každý. Jejím prostřednictvím můžete zanechat na stránkách zprávu, příslušné stránky můžete pochválit či naopak zkritizovat.
A nyní se už pustíme do tvorby návštěvní knihy. Hlavička dokumentu bude vypadat takto - všechno se bude zobrazovat v tabulce o velikosti třeba 500 pixelů:
|
Aby byl výsledný kód kratší a přehlednější jsou použity kaskádové styly (CSS). Obsah souboru, kde jsou uloženy, vám proto také předkládám:
|
Nejprve tedy vytvoříme formulář, kam budeme zadávat tyto položky: Jméno, E-mail, Web a samotný Text zprávy (kromě Webu jsou všechny povinné, tz., že do návštěvní knihy se zapíší pouze ty příspěvky, které budou obsahovat všechny povinné údaje). Celý formulář umístíme do tabulky, abychom mohli snadno zarovnat popisky a vstupní pole formuláře:
|
Myslím, že vytvoření tabulky není žádný problém, komentář si ale zaslouží použitý PHP kód. Může totiž nastat případ, kdy autor příspěvku zapomene na nějaký povinný údaj a formulář se před ním objeví znovu. Těch několik příkazů tedy způsobí, že člověk nemusí údaje, které již předtím vyplnil, zadávat znovu, ale údaje budou v příslušných formulářových polích vyplněny. Asi se ale ptáte, proč je použita podmínka, stačilo by napsat "echo $jmeno". Pokud bychom to udělali takto, stalo by se po korektním odeslání formuláře to, že všechna vstupní pole by byla vyplněna. Pak by stačilo několikrát za sebou formulář znovu pouze odeslat a návštěvní kniha by byla zahlcena jedním a tím samým příspěvkem. To řeší právě naše podmínka, která nechává pole vyplněná pouze, pokud chybí nějaký povinný údaj. Po odeslání všech povinných údajů se před vámi objeví zase prázdný formulář:
|
Podmínku rozeberu ještě podrobněji. Jenom připomenu, že názvy proměnných se shodují s názvy polí ve formuláři, tak např. pokud se pole jmenuje "email", jeho obsah máme přístupný v proměnné $email. Zjišťujeme tedy, zda se některá z proměnných rovná prázdnému řetězci (v příslušné položce nebylo nic napsáno). Musíme dát pozor, abychom použili dvě =, jinak by se jednalo o přiřazení, důležitý je ještě operátor || , který označuje logický součet ("NEBO"). Pokud je splněna podmínka, že alespoň jeden z povinných údajů nebyl zadán, zůstanou všechna ostatní pole po odeslání vyplněná a do knihy se nic neuloží.
Nyní doporučuji znovu spustit návštěvní knihu a v praxi vyzkoušet, o čem byla v posledních dvou odstavcích řeč.
Následuje nejdůležitější část skriptu - zpracování vložených údajů, uložení do souboru a vypsání obsahu souboru:
|
Nejprve musíme zajistit, aby se celý skript prováděl pouze, když bude formulář odeslán. Toho docílíme tak, že do formuláře přidáme skryté pole <input type="hidden" name="odeslano" value="ano">. Pak už jen vytvoříme podmínku uvedenou níže, pokud je v proměnné $odeslano řetězec "ano" (formulář byl odeslán) - pokračuje provádění dalších příkazů, jinak se pouze vypíše obsah datového souboru, kde máme uloženy příspěvky. Další podmínka je podobná té, která byla popsána v úvodu. Způsobí, že pokud nebyly odeslány všechny povinné údaje, vypíše se věta: "musíte vyplnit všechny povinné údaje", která je naformátovaná podle stylů popsaných výše:
|
Další část podmínky je již složitější, a proto si ji probereme odděleně. Máme tedy všechny povinné údaje a nezbývá, než je zpracovat. Do proměnné $name uložíme obsah proměnné $jmeno, přidáme formátování textu pomocí CSS a otevřeme další řádek tagem <BR>. Escape sekvence \n způsobí vytvoření nového řádku. Data jsou pak v datovém souboru přehledně uspořádána - vždy na novém řádku (výsledný HTML kód to ale nijak neovlivní). Pokud by nebyla použita, ukládala by se veškerá data do jednoho řádku:
|
Následující část je velice podobná té předchozí - do proměnných se opět uloží údaje z formuláře. Jelikož se ale jedná o e-mailovou adresu a adresu stránek je potřeba přidat odkaz. V případě e-mailu vytvoříme odkaz typu MAILTO, aby se po odkliknutí otevřel poštovní klient a bylo možné kontaktovat autora příspěvku. Položka Web nebyla povinná, proto musíme vytvořit podmínku if ($web!=""). Ta je splněna, pokud se obsah proměnné $web nerovná (! způsobí negaci) prázdnému řetězci (tz. obsahuje nějaký text). Opět se nabízí otázka, je-li podmínka nutná. Odpověď zní ano, pokud bychom ji neuvedli, přiřazení by se provedlo i při nezadání webové stránky. Potom by se vytvořil prázdný řádek, což by jistě nebylo estetické:
|
Důležité je také, aby se u každého příspěvku zobrazoval datum a čas odeslání. Práce s datem a časem již byla popsána v jednom článku, a tak není potřeba žádný komentář. Snad jen znak "j" použitý namísto "d". První vrací číslo dne v měsíci ve formátu "1- 31", druhý pak "01-31". Pro české zvyklosti je pochopitelně vhodnější "j". Podobně je tomu u "m", tam však žádný alternativní znak neexistuje. Šlo by to ale vyřešit přetypováním pomocí (int), ve výsledném kódu to ale neuvádím:
|
Následuje zpracování Textu zprávy. Nejprve změníme funkcí NL2BR všechny konce řádků ve zprávě na tagy <BR> a zároveň nahradíme pomocí funkce HTMLSpecialChars znaky (<, >, ",&), které by mohly narušit formátování celého dokumentu, znakovými entitami (<, >, ", &). Poté vložíme do proměnné $zprava text zprávy, a přidáme čáru, která bude oddělovat jednotlivé příspěvky:
|
Na závěr do proměnné $write uložíme všechny získané údaje a pomocí funkce StripSlashes odstraníme escape sekvence. Pakliže bychom toto neudělali a někdo zaslal třeba ' " ' nebo ' \ ', objevilo by se v ppříspěvku ' \" ' resp. ' \\ ':
|
Už zbývá pouze zápis do datového souboru. Nejprve zjistíme, zda soubor "book.dat" existuje. Pokud ano, načteme do proměnné $data jeho obsah. Poté otevřeme soubor pro zápis (resp. přepis) a uložíme do něj data v pořadí $write, $data, aby se poslední příspěvek zobrazoval vždy nejvýše. V případě, že soubor ještě neexistuje zapíše se pouze $write:
|
Nakonec vypíšeme obsah souboru "book.dat" (pokud existuje), přidáme ještě čáru, která bude oddělovat formulář od příspěvků a ukončíme tabulku a HTML stránku. Funkce FpassThru slouží k vypsání obsahu souboru a automaticky příslušný soubor zavře:
|
Samozřejmě, ke konci článku bývá zvykem nabídnout zdrojový kód popisované aplikace. Tu si včetně souboru s kaskádovými styly můžete stáhnout zde. A to je pro dnešek vše.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Další aktuální články na interval.cz
- Malware: android pod palbou, mobily v ohrožení?
- Pozvánka na Microsoft TechDays 2012
- Reklamní slepota: co to je a jak s ní bojovat?
- Pět důvodů, proč vybrat redakční systém Drupal
- Čeština pro WordPress 3.3.1 k dispozici
Tematicky související články
- Návštěvní kniha v PHP bez použití databáze - bezpečnostní mechanismy
- Návštěvní kniha v PHP bez použití databáze - ošetření textů
- Online webtest v PHP bez použití databáze
- Diskusní fórum v PHP s využitím databáze - přidávání příspěvků
- Počet online čtenářů v PHP bez použití databáze
Dejte vědět i ostatním o článku
Komentáře ke článku
Datum vložení: 30. Prosinec 2009, 16:49:12
ješt by se hodil náhled .)
Datum vložení: 02. Únor 2010, 19:33:42
odkaz "spustit" nefunguje, odkazuje na er.404. Zkoušel jsem si je přidat do stránek, ale nějak mi to nechce fungovat, ví někdo jak poradit (Php není zrovna moje partie) - soubor ke stažení "kniha2" jsem si stáhl, extrahoval , vyjmul jednotlivé soubory a nahrál na server do složky php (má to velký vliv, když je tam koncovka php3, nebo je to jedno? Já osobně mám jen php!) Děkuji za odpověď.
Datum vložení: 13. Březen 2010, 17:25:56
moc jste mi pomohli. moc dik :-)
Datum vložení: 10. Duben 2010, 12:29:06
Nevím jak to rozjet moc programovat v PHP neumím mohl by mě někdo poslat jak to má přesně vypadat aby to fungovalo?? Byl bych moc vděčný děkuji.
Datum vložení: 23. Duben 2010, 17:35:27
Good JOB. Přesně tohle jsem hledal velice děkuji za tu knihu. Moc mi to pomohlo :)
Datum vložení: 31. Červenec 2010, 12:50:36
Celkom fajn vecička pokiaľ sa niekomu nechce učiť php, dá sa to krásne využiť a oštýlovať v css, je to jednoduché a zároveň zaujímavé.
Datum vložení: 03. Září 2010, 15:03:38
při pokusu o stažení to hlásí nebezpečná útočná stránka.
Datum vložení: 04. Září 2010, 14:26:02
Zdravim, ten soubor je naprosto v poradku. Ale zkusim proverit, zdali v tom adresari nekde neni nejaky "presmerovavaci iframe"
Datum vložení: 21. Listopad 2010, 13:39:11
Správný odkaz ke stažení zde
Datum vložení: 17. Červen 2011, 13:22:42
Kniha je Ok, jediné co mi vadí je, že při F5 (refresh) se vždy poslední příspěvek kopíruje a zobrazuje se ještě jednou. Dokázal by někdo poradit, co mám upravit, aby tomu tak nebylo? Díky
Datum vložení: 06. Srpen 2011, 22:09:56
Nevím co dělám špatně, ale když v návštěvní knize vyplním všechna pole a dám odeslat, tak všechny pole zmizí a na stránce se nic neukáže
Datum vložení: 13. Srpen 2011, 09:52:11
Kniha funguje ďakujem, je nutné upraviť priponu php3 na php.

