Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Redakční systém - generování V.
redakcni system
22. listopadu 2001, 00.00 | V dnešním díle seriálu o tvorbě vlastního redakčního systému budeme pokračovat v generování do souborů. Konkrétně se zaměříme na generování dat z diskuzního fora pod článkem.
Dnes tedy ukáži onen zdrojový kód od scriptu forum.php, jehož úpravy jsem načal minule. Proberu pouze části označené komentáři jako pravý sloupec. Vše ostatní je již známé.Jak to probíhá? Pokud existuje proměnná $clanek, načteme ze souboru n_$clanek.dat (o názvech článků jsme se již bavili) nadpis článku. Načítání vypadá takto:
|
Pokud má proměnná $name nějakou hodnotu, otevřeme soubor čtení. Soubor je umístěný v adresáři clanky a má název například n_48.dat. Otevřeme ho pouze pro čtení. Funkce FRead() přečte ze souboru (první parametr) data o délce je uvedené v druhém parametru. Jelikož tato funkce čte data binárně, musíme jí předat velikost souboru v bajtech. Tu získáme pomocí funkce FileSize(). Zavináče nám zajistí, že se nebude vypisovat žádná chybová hláška. Pokud by například nešel otevřít soubor, PHP vypíše chybu i s cestou k souboru a pro šikovného hackera je pak jednoduché se nám do systému nabourat. FClose() nám soubor uzavře.
Další změna je u vkládání příspěvku do databáze. Jako vždy vše nejprve vložíme do databáze, a pak teprve generujeme. Tuto podmínku umístíte, za místo, kde se vkládají data do tabulky.
|
Co se děje? Pokud se článek úspěšně vloží do databáze, zjistíme pomocí fce MySQL_Insert_Id(); hodnotu id posledního příkazu INSERT. Parametry nezadáváme žádné (tzv. void). Připravíme se na generování tak, že $generuj přiřadíme hodnotu forum. Načteme z adresáře admin script generuj.php. Následně zrušíme $id, protože by nám to mohlo dělat neplechu. Když se článek do databáze nevložil, vypíšeme chybové hlášení.
Do scriptu generuj.php umístíme tento kód:
|
Větev je podobná všem předchozím. Z tabulky fora, vybereme předmět a text příspěvku. Uložíme je do jednotlivých souborů do adresáře fora. Soubory se jmenují: p_$id.dat pro předmět a t_$id.dat pro text příspěvku. Následně nastavíme v tabulce předmět a text na prázdnou hodnotu. Možná se vám zdá divné, že položky updatuji, ale v tabulce ještě máme číslo článku, datum atd. Tyto položky je myslím zbytečné generovat, nehledě na to, že si s nimi lépe poradí SQL server. SQL příkaz DELETE by vymazal celý záznam.
Dál se musíme vypořádat se zobrazením příspěvků. To vypadá takhle:
|
Z databáze zjistíme, jestli je tam alespoň jeden příspěvek. Když ano, použijeme fci odkazy(), kterou nadefinoval pan Kocman. Důvody použití funkce jsme si vysvětlovali minule. Dál vybereme všechny příspěvky k tomuto článku a postupně je zobrazíme. Trochu bych se zastavil u té poslední podmínky. Ta se vykoná, pokud nebyl formulář odeslán. To jest, že když přidáte příspěvek, tak se po odeslání zobrazí jen formulář bez příspěvků. Můžeme to vyřešit změnou podmínky na tento tvar:
|
Příspěvky se pak zobrazí vždy. Jak po přechodu z hlavní stránky, tak po odeslání formuláře. Myslím, že je to tak lepší, ale do ničeho vás nenutím.
Ještě malá poznámka: při odesílání e-mailu s upozorněním bych ještě použil funkci Set_Time_Limit() a jako hodnotu bych nastavil číslovku 0. Proč? Pokud budeme mít v databázi deset tisíc jedinečných e-mailových adres, které budou chtít upozorňovat na nové zprávy (takovým provozovatelům gratuluji), potřeboval by script poměrně dlouhou dobu na to, aby všechny obeslal. Pokud někdo konfiguroval Apache, tedy asi nejčastěji používaný webový server, dobře ví, že limit na provedení scriptu je standardně 30 sekund. Nejsem si jist, jestli by za 30 sekund zvládl rozeslat deset tisíc e-mailů. Z tohoto důvodu by možná bylo dobré nastavit neomezeně dlouhý interval. Script se ukončí po odeslání všech emailů. Funkce je v úryvku vložena. Stačí ji odkomentovat (odstranit zpětná lomítka).
|
Tak to by bylo pro dnešek vše. Příště si trochu vylepšíme vzhled našeho RS.
Obsah seriálu (více o seriálu):
- Redakční systém I.
- Redakční systém II.
- Redakční systém III.
- Redakční Systém IV.
- Redakční systém V.
- Redakční systém VI.
- Redakční systém VII.
- Redakční systém VIII
- Redakční systém - tisk
- Redakční systém - generování
- Redakční systém - generování II.
- Redakční systém - generování III.
- Redakční systém - generování IV
- Redakční systém - generování V.
- Redakční systém - krátké zprávy a CSS styly
- Upload obrázků
- Upload - II a logout
- Schvalování článků - II
- Dodatečné přidání obrázku
- Regulární výrazy I
- Regulární výrazy II
- Redakční systém: Fulltext - I.
- Fulltext - II
- Co s RS?
- Optimalizace databáze v RS
- Interní vzkazy - I
- Interní vzkazy - II
- Interní vzkazy - III
- Náměty od čtenářů - I
- Náměty od čtenářů - II
- Náměty od čtenářů - III
- Náměty od čtenářů - IV
- Náhrada FTP
- Ankety
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007