Článek vytištěný ze serveru WebTip

Název článku: ASP v praxi, 2. díl - Přihlašování na stránky II
Datum publikování: 06.12. 2002
URL článku: http://www.webtip.cz/art/wt_tech_asp/asp_v_praxi_2.html (kliknětě pro návrat)

Všechna práva vyhrazena (c) 2000 Grafika Publishing s.r.o.
Doslovné ani částečně přebírání tohoto materiálu není povoleno bez předchozího písemného svolení vydavatele - společnosti Grafika Publishing s.r.o.


ASP v praxi, 2. díl - Přihlašování na stránky II

V předchozím díle jsme vytvořili jednoduchou aplikaci pro přihlašování na stránky tak, aby na tyto stránky měli přístup jen uživatelé k tomu určení. V tomto díle se budeme zabývat, jak uživatele do databáze přidávat i mazat nebo je upravovat. Některé webhostingy - většinou ty, které jsou zdarma - nemají webové rozhraní pro práci s databázemi. Proto takové rozhraní vytvoříme. Přístup k němu bude mít jen administrátor.

S funkcemi tohoto administrátorského centra jsem vás již seznámil - přidávání, mazání, upravování uživatelů. Hlavní soubor rozhraní se bude jmenovat admin.asp a jeho vytvoření nebude náročné. Na jeho úvodní stránce vypíšeme do tabulky jednotlivé uživatele a ke každému přidáme dva odkazy - Uprav a Vymaž. Samozřejmě, že na konci nemůže chybět odkaz Přidat nový záznam:

Postup si rozdělíme do několika kroků. Prvním krokem musí být, jak jinak, ověření, že ten, kdo vstupuje, je doopravdy administrátor a nikdo jiný. Administrátorovi se totiž v souboru overit.asp do proměnné prihlasen uloží hodnota admin, a tak se odliší od ostatních, "normálních" uživatelů (jak vypadá soubor overit.asp uvidíte níže). Na tuto stránku tedy nemohou ani ti "normální" uživatelé:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If

Dále pak otevřeme spojení s databází a vykonáme SQL příkaz SELECT:

Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "uzivatele"
Set rs = conn.Execute ("SELECT * FROM uzivatele")
%>

Třetím krokem je hlavička HTML a začátek tabulky, do které budeme uživatele vypisovat:

<html>
<head>
<title>Hlavní stránka</title>
</head>
<body>
<table border="0">
<tr>
<td><b>ID</b></td>
<td><b>Jméno</b></td>
<td><b>Heslo</b></td>
</tr>

Teď přichází nejdůležitější část, kterou je vypsání jednotlivých uživatelů (o vypisování dat z databáze pojednával už minulý seriál):

<%
Do Until rs.EOF
Response.write "<tr><td>" & rs("ID") & "</td>"
Response.write "<td>" & rs("jmeno") & "</td>"
Response.write "<td>" & rs("heslo") & "</td>"
Response.write"<td><a href='edit.asp?id=" & rs("ID") & _
"'>Uprav</a></td>"
If rs("jmeno") <> "admin" Then
Response.write"<td><a href='delete.asp?id=" & rs("ID") & _
"'>Vymaž</a></td></tr>"
End If
rs.MoveNext
Loop
Set rs = Nothing
conn.Close
Set conn = Nothing
%>

Ke každému uživateli, jak jsem již v úvodu říkal, jsou vypsány i dva odkazy. Aby však soubory, na které odkazují (mazání a upravování), věděli, jakého uživatele mají vymazat či upravovat, je jim předáván jako parametr ID toho konkrétního uživatele (u uživatele s ID 1 bude jako parametr předávána 1,...). Jak jste si také určitě všimli, administrátora vymazat nelze, neboť u něj není vypsán odkaz Vymaž. To proto, abyste se náhodou sami nevymazali a tak si zrušili přístup k administrátorskému rozhraní...

Posledním krokem je ukončení tabulky, přidání odkazu na stránku new.asp a ukončení stránky HTML:

</table>
<a href="new.asp">Přidat nový záznam</a>
</body>
</html>

Celý kód stránky souboru admin.asp je tedy následující:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "uzivatele"
Set rs = conn.Execute ("SELECT * FROM uzivatele")
%>
<html>
<head>
<title>Hlavní stránka</title>
</head>
<body>
<table border="0">
<tr>
<td><b>ID</b></td>
<td><b>Jméno</b></td>
<td><b>Heslo</b></td>
</tr> <%
Do Until rs.EOF
Response.write "<tr><td>" & rs("ID") & "</td>"
Response.write "<td>" & rs("jmeno") & "</td>"
Response.write "<td>" & rs("heslo") & "</td>"
Response.write"<td><a href='edit.asp?id=" & rs("ID") & _
"'>Uprav</a></td>"
If rs("jmeno") <> "admin" Then
Response.write"<td><a href='delete.asp?id=" & rs("ID") & _
"'>Vymaž</a></td></tr>"
End If
rs.MoveNext
Loop
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
</table>
<a href="new.asp">Přidat nový záznam</a>
</body>
</html>

Bude nutné také mírně upravit soubor overit.asp, aby uživatele se jménem admin rovnou přesměroval na stránku admin.asp. Změní se jen poslední rozhodovací konstrukce:

If Rs.EOF Then
Session("prihlaseny") =  ""
conn.Close
Set Rs = Nothing
Set conn = Nothing
Response.Redirect ("chyba.html")
ElseIf Request.Form("jmeno") = "admin" Then
Session("prihlaseny") = "admin"
conn.Close
Set Rs = Nothing
Set conn = Nothing
Response.Redirect ("admin.asp")
Else
Session("prihlaseny") = 1
conn.Close
Set Rs = Nothing
Set conn = Nothing
Response.Redirect ("tajne.asp")
End If

Webové rozhradní pro administrátora máme hotové. Teď se pustíme do vytváření jednotlivých souborů, na které se z něho odkazuje. Začneme tou nejjednodušší funkcí rozhraní, kterou je přidávání nových uživatelů. Bude se skládat ze dvou souborů. Prvním z nich je new.asp. Ten bude obsahovat formulář s poli Jméno a Heslo nového uživatele:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If
%>

<html>
<head>
<title>Nový záznam</title>
</head>
<body>
<form action="insert.asp" method="post">
<table border="0">
<tr>
<td width="100"><b>Jméno</b></td>
<td width="150"><b>Heslo</b></td>
</tr>
<td><input type='text' name='jmeno'></td>
<td><input type='text' name='heslo'></td>
</table><br>
<input type="submit" value="Přidat">
</form>
<form action="admin.asp"><input type="submit" value="Zpět"></form>
</body>
</html>

Protože na tento soubor i na všechny následující budeme přistupovat přes hlavní administrátorské rozhraní, obsahuje tato stránka i tlačítko Zpět na stránku admin.asp.

Hodnoty formulářových polí z předešlého souboru se odesílají souboru insert.asp, který je přidá do databáze. Avšak jen v případě, když jsou nenulové délky - tyto dvě podmínky spojíme logickým operátorem AND:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If

If len(Request.Form("jmeno"))>0 AND len(Request.Form("heslo"))>0 Then
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "uzivatele"
conn.Execute ("INSERT INTO uzivatele(jmeno, heslo) VALUES('" & _
Request.Form("jmeno") & "', '" & Request.Form("heslo") & "')")
conn.Close
Set conn = Nothing
response.redirect "admin.asp"
Else
response.redirect "new.asp"
End If
%>

Pokud by chtěl administrátor přidat nového uživatele, nyní by se mu to již povedlo, neboť tato funkce je hotova. Dalším krokem při vytváření rozhraní bude vytvoření souboru na vymazání uživatele. Tento soubor se bude jmenovat delete.asp. Vypadá takto:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If

If len(Request.QueryString("ID"))>0 Then
intID = Request.QueryString("ID")
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "uzivatele"
conn.Execute ("DELETE FROM uzivatele WHERE ID=" & intID & "")
conn.Close
Set conn = Nothing
response.redirect "admin.asp"
Else
response.redirect "admin.asp"
End If
%>

Z databáze uživatele vymažeme pomocí SQL příkazu DELETE. Aby soubor veděl, jaký záznam - jakého uživatele - má vymazat, budeme souboru předávat v adrese parametr, který bude zastupovat ID uživatele. V případě, že je tento parametr nulové délky, bude administrátor přesměrován zpět na stránku admin.asp.

Třetí a poslední funkcí, kterou chceme, aby administrační centrum dokázalo, je upravování hodnot u uživatele. Na tento úkon budeme potřebovat dva soubory. První z nich je edit.asp:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If

If len(Request.QueryString("id"))>0 Then
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "uzivatele"
intID = Request.QueryString("id")
strSQL="SELECT * FROM uzivatele WHERE ID=" & intID
Set rs = conn.Execute (strSQL)
%>

<html>
<head>
<title>Úprava záznamu</title>
</head>
<body>
<form action=<% response.write "'update.asp?id=" & intID & "'"%> method="post">
<table border="0">
<tr>
<td width="50"><b>ID</b></td>
<td width="100"><b>Jméno</b></td>
<td width="150"><b>Heslo</b></td>
</tr>
<%
Response.write "<tr><td>" & rs("ID") & "</td>"
Response.write "<td><input type='text' name='jmeno' value='" & _
rs("jmeno") & "'></td>"
Response.write "<td><input type='text' name='heslo' value='" & _
rs("heslo") & "'></td></tr>"
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
</table><br>
<input type="submit" value="Odeslat">
</form>
<form action="admin.asp"><input type="submit" value="Zpět"></form>
</body>
</html>
<%
Else
response.redirect "admin.asp"
End If
%>

Tento soubor bude obsahovat formulář složený ze dvou vstupních polí. Aby administrátor viděl, jakého uživatele upravuje a jaké jméno a heslo má (ještě než je změní), vypíšeme do těchto dvou polí příslušné hodnoty. Kdyby však byl soubor edit.asp volán bez parametru ID, vypsala by se chyba. Proto je v souboru podmínka, že pokud bude parametr ID nulové délky, bude administrátor přesměrován na stránku admin.asp. My uživatele poznáme, stejně jako u souboru delete.asp, podle parametru předávaného při volání souboru.

Data se posílají souboru update.asp, společně se posílá i parametr ID uživatele, jehož hodnoty měníme. Tento soubor provede samotný SQL příkaz:

<%
If Session("prihlaseny") <> "admin" Then
Response.Redirect ("login.html")
End If

intID = Request.QueryString("ID")
If len(intID)>0 Then
If len(Request.Form("jmeno"))>0 AND len(Request.Form("heslo"))>0 Then
strJmeno = Request.Form("jmeno")
strHeslo = Request.Form("heslo")
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "uzivatele"
conn.Execute ("UPDATE uzivatele SET jmeno='" & _
strJmeno & "', heslo='" & strHeslo & "' WHERE ID=" & intID & "")
conn.Close
Set conn = Nothing
response.redirect "admin.asp"
Else
response.redirect "edit.asp?id=" & intID
End If
Else
response.redirect "admin.asp"
End If
%>

V tomto souboru jsou podmínky dvě - první zajistí, aby se databáze otevírala jen v případě, že parametr ID je nenulové délky, pomocí druhé se zjišťuje, jestli pole jmeno a id byla správně zadána.

Tím máme celou aplikaci hotovu. Pokud nechcete všechny tyto zdrojové kódy kopírovat, můžete si je stáhnout zde


Autor: Liška Adam
E-mail: liskovi@quick.cz