V minulém díle jsme si ukázali základní práci s databázemi pomocí Active Server Pages. A protože jsem slíbil na dnešek komplexnější aplikaci, vytvoříme tzv. knihu hostů.
Kniha hostů je aplikace, kde návštěvník vašich stránek může zanechat vzkaz jak pro vás, tak i pro ostatní návštěvníky. Stala se oblíbenou součástí různých internetových stránek - možná i proto, že její tvorba není nijak obtížná.
Naše aplikace se bude skládat ze čtyř souborů. Hlavní soubor default.asp je vstupní stránkou do naší knihy hostů. Na něm si bude návštěvník moci přečíst již vložené příspěvky. Pokud bude chtít napsat nový vzkaz, otevře se mu stránka new.asp, kde vyplní potřebné informace (jméno, e-mail, jeho WWW a samotný text). Tyto údaje se pak pomocí souboru insert.asp vloží do databáze a návštěvník bude přesměrován zpět na stránku default.asp, kde se již zobrazí jeho vzkaz společně s ostatními. Čtvrtým a posledním souborem je databáze s tabulkou guestbook. Ta má následující strukturu:
| Název pole |
Datový typ |
| ID |
automatické číslo |
| Jmeno |
text |
| Prijmeni |
text |
| Mail |
text |
| WWW |
text |
| Datum |
text |
| Text |
memo |
Samozřejmě nezapomeňte vytvořit pro tuto databázi DSN se jménem guestbook.
A nyní přejdeme k tvorbě souboru default.asp. Soubor bude mít tuto strukturu: nadpis, odkaz na vložení nového vzkazu a výpis již vložených vzkazů oddělených čarou:
<%
Dim conn, rs
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("guestbook")
Set rs = conn.Execute ("SELECT * FROM guestbook ORDER BY ID DESC")
%>
<html>
<head>
<title>Kniha hostů</title>
</head>
<body>
<h2>Kniha hostů</h2>
<p>Pkud chcete přidat váš názor, kliknětě <a href="new.asp">zde</a>.
<table border="0">
<hr>
<%
Do Until rs.EOF
Response.write "<tr><td width='100'><b>Jméno</b></td><td>" & rs("Jmeno") & "</td></tr>"
Response.write "<tr><td width='100'><b>E-mail</b></td> <td><a href='mailto:" & rs("Mail") & "'>" & rs("Mail") & "</a></td></tr>"
Response.write "<tr><td width='100'><b>WWW</b></td> <td><a href='http://" & rs("WWW") & "'>" & rs("WWW") & "</a></td></tr>"
Response.write "<tr><td width='100'><b>Datum</b></td> <td>" & rs("Datum") & "</td></tr>"
Response.write "<tr><td width='100'><b>Text</b></td> <td>" & rs("Text") & "</td></tr>"
Response.write "<tr><td colspan=2><hr></td></tr>"
rs.MoveNext
Loop
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
</table>
</body>
</html>
|
Zde si všimněte tohoto řádku:
Set rs = conn.Execute ("SELECT * FROM guestbook ORDER BY ID DESC")
|
SQL příkaz SELECT, který jsme probrali již minule, je doplněn o "ORDER BY ID DESC". Díky tomuto se nám budou příspěvky seřazovat od největšího ID po nejmenší - a tak budou příspěvky seřazeny od novějšího po nejstarší. Pokud byste to však chtěli mít opačně, vynechte tento nový dodatek.
Další dva důležité řádky jsou tyto:
Response.write "<tr><td width='100'><b>E-mail</b></td> <td><a href='mailto:" & rs("Mail") & "'>" & rs("Mail") & "</a></td></tr>"
Response.write "<tr><td width='100'><b>WWW</b></td> <td><a href='http://" & rs("WWW") & "'>" & rs("WWW") & "</a></td></tr>"
|
Když návštěvník vašeho webu vkládá nový vzkaz, má možnost napsat i svou e-mailovou a www adresu (ve tvaru nekdo@neco.cz, resp. www.neco.cz). A pokud chceme například z e-mailové adresy vytvořit odkaz, musíme to udělat tímto způsobem. Nejdříve napíšeme začátek odkazu: a href='mailto:. Potom vložíme e-mailovou adresu uloženou v databázi a ukončíme tag. Jako text odkazu znovu vypíšeme e-mailovou adresu a ukončíme jej tagem </a>. Obdobné je to i u odkazu na www stránku.
Jak jsem již zmiňoval, z hlavní stránky vede odkaz na soubor new.asp. Na této stránce návštěvník vašeho webu může do knihy hostů přidat svůj názor. Soubor sestává z jednoduchého formuláře tvořeného čtyřmi vstupními poli: Jméno, E-mail, WWW, Text.
<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><input type="text" size="20" name="Jmeno"></td></tr>
<tr><td width='100'><b>E-mail</b></td><td><input type="text" size="20" name="Mail"></td></tr>
<tr><td width='100'><b>WWW</b></td><td><input type="text" size="20" name="WWW"></td></tr>
<tr><td width='100'><b>Datum</b></td><td><%= Date %></td></tr>
<tr><td width='100'><b>Text</b></td><td><textarea cols="40" rows="10" name="Text"><%= Session("upozorneni") %></textarea></td></tr>
</table><br>
<input type="submit" value="Přidat">
</form>
<form action="default.asp"><input type="submit" value="Zpět"></form>
</body>
</html>
|
Každé vstupní pole pojmenujeme podle toho, jakou obsahuje informaci, aby bylo následně dobře identifikovatelné při zpracovávání formuláře skriptem ASP. Do databáze knihy hostů se ukládá také i datum vložení. Je zbytečné, aby jej uživatel zadával ručně; lepší bude, pokud ho tam vložíme sami pomocí kódu VBScriptu. Pomocí ASP dále do prvku textarea (se jménem Text) vypíšeme obsah proměnné upozorneni. Ta obsahuje upozornění, pokud uživatel nevyplnil pole Text. Funkci upozornění si vysvětlíme až níže.
Po zmáčknutí tlačítka Přidat se data odešlou souboru insert.asp. V tomto souboru začínáme ověřením délky pole Text pomocí funkce len - mělo by být větší než nula. Přece nechceme ukládat příspěvky, ve kterých chybí to hlavní - text příspěvku.
|
If len(Request.Form("Text")) > 0 Then
|
Princip podmínek jsme si vysvětlili v 6. díle. Pokud je podmínka splněna, tzn., že pole Text je nenulové délky, můžeme data z formuláře uložit. Nejdříve vytvoříme instanci objektu Connection a otevřeme spojení s databází guestbook. Zde se neobjevuje nic nového:
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("guestbook")
|
Na tomto příkladu knihy hostů si ukážeme, jak ukládat data z formuláře jinak, než pomocí SQL příkazu INSERT INTO. Data vložíme pomocí objektu Recordset. Vytvoříme tedy jeho instanci:
|
Set rst = Server.CreateObject("ADODB.Recordset")
|
Poté otevřeme v Recordsetu naši tabulku guestbook pro zápis či úpravu dat:
|
rst.Open "SELECT * From guestbook",conn,1,2
|
Dalším krokem je vytvoření nového záznamu (rst.AddNew) a vložení jednotlivých hodnot formulářových polí a doby vložení (data):
rst.AddNew
rst("Jmeno") = request.form("Jmeno")
rst("Mail") = request.form("Mail")
rst("WWW") = request.form("WWW")
rst("Datum") = Date
rst("Text") = request.form("Text")
|
Aby se změny zapsaly, musíme je uložit:
Poté uvolníme paměť:
rst.Close
conn.Close
Set rst = Nothing
Set conn = Nothing
|
Posledním krokem v této větvi je přesměrování návštěvníka zpět na hlavní stránku pomocí objektu Response:
|
response.redirect "default.asp"
|
Tímto máme hotovu tu větší část tohoto souboru. Stále jěště zbývá možnost, že uživatel pole Text nevyplnil. V tomto případě se do session proměnné upozorneni zapíše text, který návštěvníka upozorní na chybu při vyplňování, a přesměrujeme jej zpět na stránku s formulářem new.asp:
Else
Session("upozorneni")="Pole 'text' je povinné!"
response.redirect "new.asp"
|
Nakonec uzavřeme tuto větev i celé If:
A rozloučím se s vámi celým zdrojovým kódem tohoto souboru:
<%
If len(Request.Form("Text")) > 0 Then
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("guestbook")
Set rst = Server.CreateObject("ADODB.Recordset")
rst.Open "SELECT * From guestbook",conn,1,2
rst.AddNew
rst("Jmeno") = request.form("Jmeno")
rst("Mail") = request.form("Mail")
rst("WWW") = request.form("WWW")
rst("Datum") = Date
rst("Text") = request.form("Text")
rst.Update
rst.Close
conn.Close
Set rst = Nothing
Set conn = Nothing
response.redirect "default.asp"
Else
Session("upozorneni")="Pole 'text' je povinné!"
response.redirect "new.asp"
End if
%>
|
P.S. Všechny soubory i s databází si můžete stáhnout zde.
Liška Adam
|