Máte připraveno zakládání uživatelů a rubrik ve svém redakčním systému? Chcete se dozvědět, jak zakládat nové články? Pak je dnešní část seriálu určena právě pro vás. Po delší odmlce se vám dostává do rukou další díl seriálu o tvorbě redakčního systému v ASP.

V předchozích článcích jsme si připravili a založili databázovou základnu, naučili jsme se zakládat nové uživatele a rubriky pro umisťování článků. Pro vložení nového článku budeme potřebovat následující údaje, vyplývající z našeho datového modelu:

  • nadpis
  • anotace
  • datum vydání
  • identifikace autora
  • identifikace rubriky
  • samotný text článku
  • označení, je-li článek schválen

Toto jsou základní informace, které budeme ukládat do databáze. Pokud někdo přijde na další „atribut“ článku, není vůbec žádný problém jej přidat do tabulky a také do formuláře, kam se vstupní údaje budou zadávat.

Zběžným pohledem na tyto údaje přijdeme na to, že všechny jsou víceméně k dispozici přímo od autora článku. Všechny až na jeden – na jeho identifikaci. Nemůžeme totiž dovolit autorovi, aby měl k dispozici nějaký výběrový seznam, kde si zvolí, kdo že vlastně článek do systému vkládá… Jednak by to nebylo správné, protože by se mohlo stát, že by se článek „omylem“ založil pod jiným autorem, a jednak ne vždy je cílem zveřejňovat seznam všech autorů. Proto před tím, než se pustíme do ukládání samotného článku, musíme zajistit identifikaci přihlášených autorů.

V adresáři administrace si vytvoříme soubor login.asp, který bude obsahovat přihlašovací formulář. Jedná se o běžný formulář, kde jsou dvě pole typu „password“, do nichž uživatel vyplní své jméno a heslo. Dotaz, který vyhledá ID autora v databázi, vypadá následovně (proměnné passw a surname jsou načítány z přihlašovacího formuláře):

select
 ID_Autor
from
 redaction_autori
where
 heslo = ‚“ & passw & „‚ and
 prijmeni = ‚“&surname&“‚

Pokud tento dotaz najde nějaký záznam, přihlásí uživatele, pokud žádný záznam nenajde, vrátí se zpět na přihlašovací formulář s hlášením, že bylo zadáno špatné jméno nebo heslo. Pokud se vložené údaje budou shodovat se záznamy uvedenými v databázi autorů, pustíme daného uživatele do systému.

K samotné identifikaci přihlášeného uživatele použijeme objekt serveru Session, do kterého umístíme proměnnou ID_User, kam vložíme ID autora odpovídající sloupci ID_Autor v databázi. Tak budeme mít v budoucnu k dispozici kdykoliv jednoznačnou identifikaci přihlášeného uživatele.

Objekt Session se na serveru vytváří pokaždé, když se k němu připojí další uživatel – tedy když nová instance prohlížeče vyšle požadavek na daný server. Tento objekt je na serveru držen do té doby, než vyprší jeho časový limit (timeout) nebo do té doby, než je zrušen, například odhlášením pomocí metody Abandon(). Každý uživatel má tedy svůj objekt Session a tím jsme schopni zajistit opravdu jednoznačnou identifikaci.

Tento kód vyhledá autora a umístí jeho identifikaci do zmíněného objektu Session:

‚ dotaz na existenci autora podle zadaného hesla a jména
select
 ID_Autor
from
 redaction_autori
where
 heslo = ‚“ & passw & „‚ and
 prijmeni = ‚“ & surname & „‚
set rs=objconn.execute(sqlS)
if not rs.eof then 
‚ umístění nalezené identifikace do objektu Session
   Session(„ID_User“) = rs(„ID_Autor“)
   disconnect()
   Response.Redirect „layout.asp“
else 
‚ pokud jsme autora nenalezli, připravíme si chybové hlášení, které následně zobrazíme zpět na obrazovku
  message = „Bylo zadáno špatné příjmení nebo heslo!!!“ 
  disconnect()
end if

Pokud bychom chtěli použít jakoukoli proměnnou jako společnou pro všechny uživatele aplikace, můžeme využít objektu Application. Upozorňuji ovšem, že masivní používání těchto dvou objektů (Session a Application) může přetěžovat server a v důsledku pak zpomalovat běh našich aplikací. Proto je používejte s rozvahou a nesnažte se do nich umisťovat například rozsáhlá pole nebo jiné velké objekty.

Ale zpět k našemu přihlášení. Soubor login.asp je samozřejmě součástí přílohy tohoto článku. Výsledkem jeho činnosti je uložení jednoznačné identifikace uživatele do objektu Session a přesměrování na navigační menu, do nějž přibyly následující odkazy:

  • sekce články -> nový – odkaz „clanky.asp?action=new“
  • sekce osobní -> články – „author_detail.asp?id=“ & id_autora (což je právě ona hodnota umístěná v objektu Session)

Formulář pro vkládání článku zatím necháme poměrně jednoduchý, vstupními poli budou pouze klasické inputy nebo textarea pro samotný text článku. (Na závěr seriálu vám však mohu slíbit přípravu jednoduchého „editoru“, který bude umět pracovat se zdrojovým kódem článku jak v HTML tak i v WYSIWYG módu.) U formuláře je poměrně podstatnou věcí validace vstupních polí, tedy ověření, zda je uživatel (autor) skutečně vyplnil. Neměli bychom si totiž nechat do systému vložit článek bez nadpisu, anotace nebo dokonce bez samotného textu.

Pro uložení údajů načtených z vyplněného a odeslaného formuláře je použito objektu Recordset, s voláním metod addNew() a Update(). Proměnná author_id obsahuje hodnotu uloženou v Session(„ID_User“). Sloupec schválen vyplňujeme zatím hodnotou 0, která znamená „neschváleno“:

Set rst = Server.CreateObject(„ADODB.Recordset“)
with rst
  .Source = „redaction_clanky“
  .ActiveConnection = objconn
  .CursorType = 2
  .LockType = 3
  .Open
end with
rst.AddNew
‚ proměnné article_name, article_annotation, article_group a article_text jsou načteny prostřednictvím objektu Request z odeslaného formuláře
  rst(„nadpis“) = article_name
  rst(„anotace“) = article_annotation
  rst(„schvalen“) = 0
  rst(„datum_vydani“) = date()
  rst(„ID_Rubrika“) = article_group
  rst(„clanek“) = article_text
  rst(„ID_Autor“) = author_id
 rst.Update

Každý autor by jistě rád viděl, jaké články v systému má již založené, od kdy a v jakých rubrikách. Navíc by ho určitě zajímalo, jestli je daný článek schválen nebo ne. Po založení údajů přesměrujeme uživatele na „autorský“ pohled na články. V adresáři administrace založíme soubor author_detail.asp, jehož jediným parametrem je id, což je identifikace autora (tu již máme v objektu Session). V záhlaví zobrazíme údaje o daném autorovi, které získáme z databáze pomocí sql dotazu (selected je právě dané id):

select
 Jmeno,
 Prijmeni,
 isNull(Email, “) as Email,
 isNull(Poznamka, ‚ ‚) as Poznamka
from
 redaction_autori
where
 ID_Autor = “ & selected

Nyní se budeme věnovat přehledu článků daného autora, který ještě rozdělíme na dvě části. První částí budou všechny schválené články, druhou budou ještě neschválené články. SQL dotaz je pro obě části víceméně stejný, liší se pouze v hodnotě sloupce „schvalen“ („selected“ je id autora a „schvalen“ je buďto na hodnotě 0 jako neschváleno nebo 1 jako schváleno):

select
 ID_Clanek,
 Clanek,
 Nadpis,
 Anotace,
 redaction_clanky.ID_Rubrika,
 redaction_rubriky.Nazev,
 Datum_vydani
from redaction_clanky, redaction_rubriky
where
 redaction_clanky.ID_Autor = „&selected&“ and
 redaction_clanky.ID_Rubrika = redaction_rubriky.ID_Rubrika and
 Schvalen = 1
order by
 redaction_rubriky.Nazev,
 redaction_clanky.Datum_vydani

Vypisování získaných údajů je velmi jednoduché. Jde pouze o procházení získané výsledkové sady v cyklu a vypsání jednoho řádku tabulky, který obsahuje vybrané údaje:

do while not rs.eof
   outputStr = outputStr & „<TR class=“ & styl & „>“ & vbcrlf
   outputStr = outputStr & “ <TD>“ & rs(„Nadpis“)
   outputStr = outputStr & „</TD>“ & vbcrlf
   outputStr = outputStr & “ <TD>“ & rs(„Anotace“)& „</TD>“ & vbcrlf
   outputStr = outputStr & “ <TD><A href=““rubriky.asp?akce=’seznam&id=“& rs(„ID_Rubrika“)& „““>“ & rs(„Nazev“)& „</A></TD></TR>“ & vbcrlf
   outputStr = outputStr & „<TR class=“ & styl & „>“ & vbcrlf
   outputStr = outputStr & “ <TD COLSPAN=“3″>Datum vložení:“ & rs(„Datum_vydani“)& „</TD>“ & vbcrlf
   outputStr = outputStr & „</TR>“ 
  rs.movenext
loop

Přehled slouží nejen autorovi článků, ale také k udržení přehledu, které články kdo kdy napsal. „Grafické“ ztvárnění podoby celého rozhraní ponechávám záměrně na vaší fantazii. To samozřejmě platí pro vypisování veškerých prvků a tabulek s údaji, je pouze na vás, jak si informace na stránky rozložíte.

Tímto máme hotovo přihlašování autorů (redaktorů) a zakládání nového článku. Abych vám ušetřil práci s opisováním, připojuji zdrojový kód výše popsaného. V příštím díle se podíváme na to, jak zajistit schvalování článků a jejich prohlížení autory nebo schvalovatelem.

Doplněk – indexování databáze

V diskusích k minulým dílům redakčního systému jsem zachytil komunikaci, týkající se indexů a jejich používání. Myslím, že by zde bylo dobré vysvětlit, na které sloupce je indexy vhodné umisťovat. V zásadě jde o sloupce, které se používají jako takzvané „cizí klíče“, tedy odkazují se do jiných tabulek. Pokud jsou nad nimi vytvořeny indexy, je sql dotaz velice rychlý, protože databáze má připraveny indexy, které potřebuje. Pokud ovšem nad těmito sloupci indexy vytvořeny nebudou, databázový stroj musí tabulku prohledat od začátku do konce, což je obrovské zdržení.

schéma indexace

Obrázek znázorňuje, jaké sloupce by tedy měly obsahovat indexy. V odkazovaných tabulkách (tabulka 2 a 3) by měly být indexy minimálně na primárních klíčích.

Pozn. red.: Seriál musel být předčasně ukončen, protože autor nedodal slíbená pokračování. Máte-li zájem v seriálu pokračovat vlastními články, prosíme, kontaktujte redakci.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět