Pewnie nie raz spotkałeś się z "Księgami gości" na różnych stronach. Dla niezorientowanych (czy tacy wogóle istnieją?) tłumaczę, że "Księga gości" (ang. Guestbook) to aplikacja dzięki, której odwiedzający stronę mogą napisać swój komentarz a także przeglądać wpisy innych użytkowników. W tym artykule przedstawię jak za pomocą ASP można napisać własną, prostą lecz w pełni funkcjonalną księgę gości.
o autorach
Marcin Chomiczewski Jest absolwentem wydziału Informatyki Stosowanej WSPW w Płocku. Zajmuje się szeroko pojętym webmasteringiem: projektowanie stron WWW, programowanie w ASP). Jest autorem serwisu PoznajASP, poświęconemu technologii Active Server Pages.
Łącznie napisał dla nas 1 artykułów.Cała aplikacja będzie składać się z czterech plików:
- goscie.mdb - to Access-owa baza danych, w której będziemy przechowywać wpisy gości
- dodaj_goscia.htm - ta strona zawiera formularz, który gość będzie wypełniał
- wpis.asp - ten skrypt wpisuje do bazy danych informacje podane przez gościa
- ksiega.asp - ta strona wyświetla z bazy danych wpisy gości
Najpierw tworzymy bazę danych w programie Access. Otwórz nową bazę danych, nastepnie wybierz opcję Utwórz tabelę w widoku projektu. Teraz utwórz pięć kolumn tak jak na rysunku i nazwij tabelę "goscie", klucz podstawowy nie będzie potrzebny.

Zamknij tabelę i Accessa. Mamy już bazę, która będzie przyjmować i przechowywać wpisy gości. Teraz utworzymy stronę, która będzie pobierała dane od użytkownika i prześle je do przetworzenia. Będzie to zwykła strona HTML zawierająca formularz. Otwórz Notatnik lub edytor stron WWW, którego używasz i wpisz kod formularza tak jak poniżej.
<HTML>
...
<FORM METHOD="post" ACTION="wpis.asp">
Imię: <INPUT NAME="name">
E-mail: <INPUT NAME="email">
Twoja strona WWW: <INPUT NAME="url">
Komentarz: <TEXTAREA NAME="comment" ROWS=5 COLS=50></TEXTAREA>
<INPUT TYPE="submit" VALUE="Prześlij!">
<INPUT TYPE="Reset" VALUE="Wyczyść">
...
</HTML>
Utworzyliśmy formularz, w którego skład wchodzą 3 pola tekstowe, jedno pole typu "text area" oraz przyciski "Prześlij!" i "Wyczyść". W polach tekstowych użytkownik podaje odpowiednio: imię, swój e-mail oraz adres własnej strony WWW. W polu "text area" użytkownik podaje komentarz. Przycisk "Prześlij" służy do zatwierdzenia i przesłania dalej wpisanych danych, zaś przycisk "Wyczyść" czyści pola formularza. W znaczniku FORM użyliśmy metody POST, która ukrywa przesyłane dane a w atrybucie ACTION wskazujemy stronę (wpis.asp), do której zostaną przekazane dane z formularza.
Teraz przyszedł czas na stworzenie strony ASP, która przyjmie dane z formularza i wpisze je do bazy danych. Będzie to strona, którą nazwiemy "wpis.asp", nie będzie zawierała żadnych znaczników HTML lecz sam kod ASP. Na początku deklarujemy jawnie zmienne, których użyjemy w skrypcie.
<% Option Explicit
Dim objConn, objRS, strSQL, dtCzas
Dim strName, strEmail, strURL, strComment
dtCzas = Now
Następnie tworzymy egzemplarz obiektu Connection i tworzymy połączenie z bazą "goscie.mdb", które nie wykorzystuje DSN systemu:
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "Driver=" & _
"{Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("goscie.mdb")
objConn.OpenTeraz, za pomocą instrukcji If ... Then, sprawdzamy czy użytkownik podał wymagane dane. Jeśli nie podał imienia lub komentarza to zostanie przekierowany z powrotem do formularza.
If (Request.Form("name")="")
OR (Request.Form("comment")="") Then
Response.Redirect ("dodaj_goscia.htm")
Else
strName=Request.Form("name")
strComment=Request.Form("comment")
End IfJeśli podał obie wartości to zostaną one przypisane odpowiednim zmiennym. Pola "email" i "url" nie są wymagane lecz baza nie przyjmie pustych rekordów. Jeśli użytkownik nie podał tych wartości to zapisujemy w nich znak twardej spacji " "
If (Request.Form("email")="")
OR (Request.Form("url")="") Then
strEmail=" "
strURL=" "
Else
strEmail=Trim(Request.Form("email"))
strURL=Trim(Request.Form("url"))
End IfTeraz tworzymy egzemplarz obiektu Recordset. W metodzie Open podajemy nazwę tabeli, do której wstawimy rekord z wpisami oraz nazwę egzemplarza obiektu Connection. Podajemy także wartości, które wskazują na typ użytego kursora (statyczny), typ blokowania (optymistyczne) oraz typ polecenia.
Set objRS=Server.CreateObject("ADODB.Recordset")
objRS.Open "goscie", objConn, 3, 3, 2Następnie za pomocą metody AddNew tworzymy nowy rekord, wpisujemy do niego dane użytkownika zapisane w zmiennych, metoda Update zatwierdza tą operację.
objRS.AddNew
objRS("name")=strName
objRS("email")=strEmail
objRS("url")=strURL
objRS("comment")=strComment
objRS("date")=dtCzas
objRS.Update
Teraz możemy już zamknąć egzemplarze obiektów Connection i Recordset oraz usunąć je z pamięci. Na końcu skryptu przekierowujemy użytkownika do strony wyświetlającej wpisy.
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
Response.Redirect ("ksiega.asp")
%>
Pozostało nam stworzenie strony ASP (ksiega.asp), która będzie wyświetlała wpisy gości znajdujące się w bazie danych. Tak będzię wyglądała część HTML-owa strony:
<html>
<head>
<title>Księga gości</title>
</head>
<body bgcolor=#87ceeb>
<h2>Wpisy do księgi gości:</h2>
<a href="dodaj_goscia.htm">Powrót do formularza</a><br>
<a href="http://adres_URL_twojej_strony">Powrót do strony głównej</a><hr>
<!-- To miejsce na kod ASP -->
...
</body>
</html>
Teraz należy podać kod ASP, który pozwoli nam na wyświetlenie rekordów z bazy danych. Najpierw definiujemy zmienne, których użyjemy.
<% Option Explicit
Dim objConn, objRS, strSQL
Teraz tworzymy egzemplarz obiektu Connection, tak samo jak w skrypcie "wpis.asp". Następnie zmiennej strSQL przypisujemy wartość w postaci łańcucha SQL, który pobierze wszystkie rekordy z tabeli "goscie" i posortuje je malejąco według wartości pola "date".
strSQL=("SELECT * FROM goscie ORDER BY
date DESC")Tworzymy teraz egzemplarz obiektu Recordset, który będzie przechowywał pobrane z bazy rekordy. W metodzie Open tego obiektu podajemy zmienną wskazującą na polecenie SQL, które ma być wykonane oraz podajemy nazwę egzemplarza obiektu Connection, za pomocą którego połączyliśmy się z bazą.
Set
objRS=Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, objConn
Za pomocą instrukcji Do While ... Loop oraz metody MoveNext obiektu Recordset wyświetlimy z bazy rekordy.
Do While Not objRS.EOF
Response.Write objRS("comment") &
"<BR>"
Response.Write ("<a href='mailto:" &
objRS("email") &_
"'>" & objRS("name") &
"</a><BR>")
Response.Write ("Strona domowa: <a href='http://"
&_
objRS("url") & "'>" &
objRS("url") & "</a><BR>")
Response.Write ("Data wpisu: "
&objRS("date") & "<hr>")
objRS.MoveNext
Loop
Pozostało nam zamknąć egzemplarze obiektów Connection i Recordset oraz usunąć je z pamięci. Czynimy to tak samo jak w poprzednim skrypcie.
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
Do tej strony możemy także umieścić link jeśli chcemy aby użytkownik miał możliwość oglądania wpisów bez konieczności wpisywania swoich danych. Mamy już wszystkie pliki potrzebne do działania księgi gości. Pamiętaj aby wszystkie umieścić w jednym katalogu. Poniżej podaję pełne kody wymienionych tu plików:
dodaj_goscia.htm
wpis.asp
ksiega.asp
Miłego programowania!
P.S.: Możesz sprawdzić działanie tej księgi, wpisz się!