Redakční systém pro každého 2.
Pustili jste se do tvorby redakčního systému a navrhli jste si podle návodu v minulém dílu databázi? Pak se v tom dnešním dozvíte, jak vyřešit přihlašování šéfredaktora a jak upravovat databázi autorů.
Adresářová struktura
Abyste měli v celé práci pořádek a systém se vám snadněji tvořil, doporučuji si vytvořit následující strukturu adresářů:
- Administrace – nástroje pro správu redakčního systému
- Include – společné funkce
- Redakce – nástroje pro autory
- Images – obrázky
Při psaní návodu se budu na tuto adresářovou strukturu odkazovat a umísťovat do ní soubory potřebné pro činnost redakčního systému.
Přihlašování šéfredaktora
Máte sice databázi autorů, ale pro přihlášení je vhodné zvolit alespoň o stupeň vyšší zabezpečení. Použijte k tomu ověření uživatele přímo na serveru, na němž je umístěn systém. Pro zajištění ověření můžete použít dva různé způsoby:
- Zakázání anonymního přístupu do adresáře Administrace – platí na jakýkoli soubor v adresáři, není nutné vytvářet další kód, ale je nutná spolupráce s administrátorem serveru.
- Vynucení přihlášení ve skriptu – lze realizovat bez spolupráce s administrátorem, ale každý skript systému musíte chránit zvlášť, přičemž lze chránit jenom ASP soubory.
V obou případech musí být příslušný uživatel na serveru vytvořen. Při použití jednoho i druhého způsobu lze snadno definovat i jména uživatelů, kteří mohou k systému přistupovat.
Zabezpečení pomocí skriptu
K tomuto způsobu zabezpečení využijete proměnné prostředí serveru. Jedna z mnoha proměnných se jmenuje LOGON_USER a obsahuje jméno právě přihlášeného uživatele k serveru.
if Request.ServerVariables(„LOGON_USER“)<>„“ then
Response.Clear
Response.Status = „401 Access Denied“
Response.End
end if
Realizace administrace
Pro přehlednost a jednoduchost bude celý redakční systém umístěn do rámů. Základem celé administrace je soubor default.asp, který bude obsahovat rozdělení rámů.
<% if Request.ServerVariables(„LOGON_USER“)<>„“ then
Response.Clear
Response.Status = „401 Access Denied“
Response.End
end if
%>
<frameset cols=“14%,*“>
<frame name=“menu“ src=“menu.asp“ marginwidth=“10″ marginheight=“10″ scrolling=“auto“ frameborder=“0″>
<frame name=“main“ src=““ marginwidth=“10″ marginheight=“10″ scrolling=“auto“ frameborder=“0″>
</frameset>
Jak sami vidíte, k celé administraci je třeba ještě soubor menu.asp, který si budete postupně doplňovat o odkazy na nové funkce tak, jak budou vycházet jednotlivé díly seriálu. Dnes to budou dva odkazy pro přidání nového autora a výpis seznamu autorů.
<a href=“autori.asp?akce=seznam“ target=“main“>Autori seznam</a><br>
<a href=“autori.asp?akce=new“ target=“main“>Nový autor</a>
Práce s databází
Pro usnadnění práce s databází jsem již před časem v Intervalu popisoval sadu nástrojů. Myslím si, že není nutné se dále rozepisovat, jak tyto nástroje fungují, neboť jsem je již podrobně popsal v článku ASP, databáze a objekt Connection.
Pro vás, kdo jste již článek o práci s databází četli, uvádím celý kód, který jsem v dotyčném článku popsal (ostatním doporučuji si článek přečíst, abyste pochopili kód):
Dim objConn
function isConnectDB()
Dim strConn
On Error Resume Next
if isObject(objConn)=False then SET objConn=Server.CreateObject(„ADODB.Connection“)
if objConn.State<>1 then
objConn.Open Application(„dsn“),Application(„user“),Application(„heslo“)
if Err.number <>0 then
isConnectDB =False
ERR.CLEAR
else
isConnectDB=True
end if
else
isConnectDB=True
end if
end function
sub disconnect()
objConn.close
SET objConn=Nothing
end sub
Celý kód funkcí pro práci s databází umístěte do souboru connect.asp, který si uložte do adresáře include.
Práce s autory
Celý modul pro správu autorů se skládá z jediného ASP souboru, který zajistí funkčnost systému. Na základě parametrů načtených z URL se ve skriptu provede volba činnosti, která se má vykonat.
Jak jste již všichni pochopili z kódu, který je uložen v souboru menu.asp, je skript autori.asp standardně volán s parametrem akce=new pro přidání nového autora a ?akce=seznam pro zobrazení seznamu autorů, ze kterého je možné autory mazat nebo editovat.
Pro vkládání nového autora nebo jeho editaci je použit tentýž formulář, který je pouze podle parametru akce měněn tak, aby byl skript zavolán s příslušným parametrem. Při odesílání se používá kombinovaný způsob předávání parametrů. Parametry, které určují, co se má provést, jsou předávány jako součást URL. Údaje, které vyplní uživatel, jsou předávány jako součást hlavičky http požadavku (metoda POST).
Při vložení nového autora je skript autoři zavolán s parametrem akce=uloznew. Na základě tohoto parametru jsou zpracovány údaje předané metodou POST a vytvoří se příslušný vkládací dotaz.
dotaz=“insert into redaction_autori (jmeno,prijmeni,email,heslo,poznamka) values (‚“ &uloz_jmeno& „‚,'“&uloz_prijmeni& „‚,'“ &uloz_email& „‚,'“ &uloz_heslo& „‚,'“ &uloz_poznamka& „‚)“
Všimněte si, že dotaz neobsahuje položku ID_Autor. Je to z toho důvodu, že položka ID_Autor má nastavenu vlastnost IDENTITY a SQL server vyplňuje tuto položku automaticky podle jejího nastavení.
Pokud je skript zavolán s parametrem ?akce=seznam, je provedena příslušná část skriptu, která na základě výběrového dotazu do databáze vypíše seznam všech autorů uvedených v databázi.
dotaz=“select * from redaction_autori order by ID_Autor DESC“
Součástí výpisu je vytvoření odkazů pro editaci a mazání autorů. Pomocí těchto odkazů je opět volán skript autori.asp, ale s poněkud jinými parametry. Parametr ?akce=edit&id=XX je určen pro provedení editace již uloženého autora. Výběr konkrétního autora z databáze se provede pomocí následujícího dotazu.
dotaz=“select * from redaction_autori where id_autor=“&id
Pro editaci je používán stejný formulář, jako pro vkládání nového autora. V tomto případě pouze předává jiné parametry jako součást URL. Předávaný parametr v URL je ?akce=ulozedit&id=XX.
Při použití parametru ?akce=smazat&id=XX je vyvolána část skriptu, která provede smazání zvoleného autora z databáze. Mazání je prováděno pomocí následujícího dotazu:
dotaz=“delete from redaction_autori where id_autor=“&id
Konečný skript je sice velice dlouhý, ale řeší veškerou problematiku spojenou s vkládáním, editací a mazáním autorů.
<!–#include file=“../include/connect.asp“–>
<!doctype html public „-//W3C//DTD HTML 4.0 Transitional//EN“>
<html><head>
<title>Redakční systém – autoři</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=windows-1250″>
</head>
<body bgcolor=#ffdead>
<style type=“text/css“>
<!–
.hlavicka {
background-color: #000000;
font-family: „arial ce“, „helvetica ce“, arial, helvetica, sans-serif;
color: #ffffff;
font-size: 12px;
}
.nadpis {
font-family: „arial ce“, „helvetica ce“, arial, helvetica, sans-serif;
color: #000000;
font-size: 20px;
text-align : center; }
.varovani {
font-family: „arial ce“, „helvetica ce“, arial, helvetica, sans-serif;
color: red;
font-size: 20px;
font-weight : bold;
}
.lichy {
background-color: #e6e6fa;
font-family: „arial ce“, „helvetica ce“, arial, helvetica, sans-serif;
color: #000000;
font-size: 12px;
}
.sudy {
background-color: #d8bfd8;
font-family: „arial ce“, „helvetica ce“, arial, helvetica, sans-serif;
color: #000000;
font-size: 12px;
}
.tabulkaedit {
background-color: #d8bfd8;
font-family: „arial ce“, „helvetica ce“, arial, helvetica, sans-serif;
color: #000000;
font-size: 12px;
}
–>
</style>
<%
on error resume next
akce=trim(Request.QueryString(„akce“))
if akce=““ then
akce=“seznam“
end if
if akce=“smazat“ then
Response.Write „mazu“
id=cint(Request.QueryString(„id“))
if isconnectdb() then
dotaz=“delete from redaction_autori where id_autor=“&id
objconn.execute(dotaz)
disconnect()
Response.Redirect „autori.asp“
else
Response.Write „Nepodarilo se spojit s databází“
end if
end if
if akce=“edit“ then
id=cint(Request.QueryString(„id“))
if isconnectdb() then
dotaz=“select * from redaction_autori where id_autor=“&id
set rs=objconn.execute(dotaz)
editjmeno=trim(rs(„jmeno“))
editprijmeni=trim(rs(„prijmeni“))
editemail=trim(rs(„email“))
editpoznamka=trim(rs(„poznamka“))
editheslo=trim(rs(„heslo“))
rs.close
set rs=nothing
disconnect()
else
Response.Write „Nepodařilo se spojit s databází“
end if
end if
if akce=“new“ then
editjmeno=““
editprijmeni=““
editemail=““
editpoznamka=““
editheslo=““
end if
if akce=“uloznew“ then
uloz_jmeno=Request.Form(„jmeno“)
uloz_prijmeni=Request.Form(„prijmeni“)
uloz_heslo=Request.Form(„heslo“)
uloz_email=Request.Form(„email“)
uloz_poznamka=Request.Form(„poznamka“)
if isconnectdb() then
dotaz=“insert into redaction_autori (jmeno,prijmeni,email,heslo,poznamka) values
(‚“ &uloz_jmeno& „‚,'“&uloz_prijmeni& „‚,'“ &uloz_email& „‚,'“ &uloz_heslo& „‚,'“ &uloz_poznamka& „‚)“
objconn.execute(dotaz)
disconnect()
Response.Redirect „autori.asp“
else
Response.Write „Nepodarilo se spojit s databází“
end if
end if
if akce=“ulozedit“ then
uloz_jmeno=Request.Form(„jmeno“)
uloz_prijmeni=Request.Form(„prijmeni“)
uloz_heslo=Request.Form(„heslo“)
uloz_email=Request.Form(„email“)
uloz_poznamka=Request.Form(„poznamka“)
if isconnectdb() then
id=cint(Request.QueryString(„id“))
dotaz=“UPDATE redaction_autori SET jmeno='“&uloz_jmeno&“‚, prijmeni='“&uloz_prijmeni&“‚, heslo='“&uloz_heslo&“‚,
email='“&uloz_email&“‚, poznamka='“&uloz_poznamka&“‚ where id_autor=“&id
Response.Write dotaz
objconn.execute(dotaz)
disconnect()
Response.Redirect „autori.asp“
else
Response.Write „Nepodarilo se spojit s databází“
end if
end if
if akce=“seznam“ then
txtseznam=“<p class=““nadpis““>Seznam autorů</p>“
if isconnectdb() then
dotaz=“select * from redaction_autori order by ID_Autor DESC“
set rs=objconn.execute(dotaz)
if rs.bof=true and rs.eof=true then
txtseznam=txtseznam&“<p class=““varovani““>Tabulka autorů je prázdná</p>“
else
txtseznam=txtseznam&“<table border=““0″“ width=““700″“ cellspacing=““1″“><tr><td bgcolor=““black““>“&vbcrlf
txtseznam=txtseznam&“<table border=““0″“ width=““100%““ cellspacing=““0″“>“&vbcrlf
txtseznam=txtseznam&“<tr class=““hlavicka““>“&vbcrlf
txtseznam=txtseznam&“<td width=““20″“ align=““right““>ID</td>“&vbcrlf
txtseznam=txtseznam&“<td>Příjmení a jméno</td>“&vbcrlf
txtseznam=txtseznam&“<td>Email</td>“&vbcrlf
txtseznam=txtseznam&“<td width=““50″“>Editace</td>“&vbcrlf
txtseznam=txtseznam&“</tr>“&vbcrlf
txtseznam=txtseznam&“<tr class=““hlavicka““>“&vbcrlf
txtseznam=txtseznam&“<td></td>“&vbcrlf
txtseznam=txtseznam&“<td colspan=““2″“>Poznámka</td>“&vbcrlf
txtseznam=txtseznam&“<td>Mazání</td>“&vbcrlf
txtseznam=txtseznam&“</tr>“&vbcrlf
stylradku=“lichy“
do while not rs.eof
id_autor=trim(rs(„id_autor“))
jmeno=trim(rs(„jmeno“))
prijmeni=trim(rs(„prijmeni“))
email=trim(rs(„email“))
poznamka=trim(rs(„poznamka“))
txtseznam=txtseznam&“<tr class=“““&stylradku&“““>“&vbcrlf
txtseznam=txtseznam&“<td width=““20″“ align=““right““>“&id_autor&“</td>“&vbcrlf
txtseznam=txtseznam&“<td>“&prijmeni&“ „&jmeno&“</td>“&vbcrlf
txtseznam=txtseznam&“<td>“&email&“</td>“&vbcrlf
txtseznam=txtseznam&“<td width=““50″“><a href=““autori.asp?akce=edit&id=“&id_autor&“““>Editovat“&“</a></td>“&vbcrlf
txtseznam=txtseznam&“</tr>“&vbcrlf
txtseznam=txtseznam&“<tr class=“““&stylradku&“““>“&vbcrlf
txtseznam=txtseznam&“<td></td>“&vbcrlf
txtseznam=txtseznam&“<td colspan=““2″“>“&poznamka&“</td>“&vbcrlf
txtseznam=txtseznam&“<td><a href=““autori.asp?akce=smazat&id=“&id_autor&“““>Smazat“&“</a></td>“&vbcrlf
txtseznam=txtseznam&“</tr>“&vbcrlf
if stylradku=“lichy“ then
stylradku=“sudy“
else
stylradku=“lichy“
end if
rs.movenext
loop
txtseznam=txtseznam&“</table>“
txtseznam=txtseznam&“</td></tr></table>“
end if
rs.close
set rs=nothing
disconnect()
else
txtseznam=txtseznam&“<p class=““varovani““>Nepodarilo se spojit s databází</p>“
end if
Response.Write txtseznam
end if
if akce=“new“ or akce=“edit“ then
if akce=“new“ then
txtedit=txtedit&“<p class=““nadpis““>Přidání nového autora</p>“
txtedit=txtedit&“<FORM action=““autori.asp?akce=uloznew““ method=““POST““ name=““form1″“>“
end if
if akce=“edit“ then
txtedit=txtedit&“<p class=““nadpis““>Editace autora „&editjmeno&“ „&editprijmeni&“</p>“
txtedit=txtedit&“<FORM action=““autori.asp?akce=ulozedit&id=“&id&“““ method=““POST““ name=““form1″“>“
end if
txtedit=txtedit&“<table border=““0″“ width=““700″“ cellspacing=““1″“><tr><td bgcolor=““black““>“&vbcrlf
txtedit=txtedit&“<table class=““tabulkaedit““ border=““0″“ width=““100%““ cellspacing=““0″“>“&vbcrlf
txtedit=txtedit&“<tr><td>Jméno</td><td>“&vbcrlf
txtedit=txtedit&“<INPUT type=““text““ name=““jmeno““ value=“““&editjmeno&“““ size=40>“
txtedit=txtedit&“</td>“&vbcrlf
txtedit=txtedit&“<td>Příjmení</td><td>“&vbcrlf
txtedit=txtedit&“<INPUT type=““text““ name=““prijmeni““ value=“““&editprijmeni&“““ size=40>“
txtedit=txtedit&“</td></tr>“&vbcrlf
txtedit=txtedit&“<tr><td>Email</td><td>“&vbcrlf
txtedit=txtedit&“<INPUT type=““text““ name=““email““ value=“““&editemail&“““ size=40>“
txtedit=txtedit&“</td>“&vbcrlf
txtedit=txtedit&“<td>Heslo</td><td>“&vbcrlf
txtedit=txtedit&“<INPUT type=““text““ name=““heslo““ value=“““&editheslo&“““ size=40>“
txtedit=txtedit&“</td></tr>“&vbcrlf
txtedit=txtedit&“<tr><td valign=““top““>Poznamka</td><td colspan=““3″“>“&vbcrlf
txtedit=txtedit&“<TEXTAREA rows=5 cols=75 name=poznamka>“&editpoznamka&“</TEXTAREA>“
txtedit=txtedit&“</td></tr>“&vbcrlf
txtedit=txtedit&“<tr><td></td><td><INPUT type=““submit““ value=““Submit““ id=1 name=1></td>“
txtedit=txtedit&“<td><INPUT type=““reset““ value=““Reset““ id=1 name=1></td><td></td></tr>“
txtedit=txtedit&“</table>“
txtedit=txtedit&“</td></tr></table>“
txtedit=txtedit&“</FORM>“
Response.Write txtedit
end if
%>
</body>
</html>
Ve skriptu je ošetřeno také neotevření databáze nebo prázdná tabulka autorů. Není zde však řešeno například zadání „špatných“ dat uživatelem nebo nevyplnění některých položek ve formuláři. Důvodem je rozsáhlost kódu pro jejich korektní ošetření. Pokud bude z vaší strany zájem, vrátím se k ošetřování těchto stavů na konci seriálu.
Nakonec si můžete doplnit výpis autorů o možnost řazení autorů podle libovolné položky. Nebo záměna textových odkazů pro editaci a mazání grafickým symboly. Uvítám když do diskuze pod článkem uvedete nejen nějaký takový způsob, ale i další nápady, jak vylepšit celý redakční systém, který si právě s pomocí Intervalu budujete.
Pro ušetření práce a možného výskytu chyb při kopírování kódu si můžete vše 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
-
Co je to VRAM a jak ji navýšit bez drahého upgradu?
20. srpna 2024 -
Monitory OLED: klíčové pojmy a funkce
13. května 2024 -
ZONER Webmail jako první v Česku přináší BIMI s VMC
11. č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