ASP на блюдечке. Часть 15 Создаем гостевую книгу своими руками

ASP на блюдечке. Часть 15 Создаем гостевую книгу своими руками

Рубен Садоян (mailto:(rouben@iname.com))

Введение

Примеры, рассмотренные нами в предыдущих частях настоящей статьи, по своей сути в той или иной степени представляли разнообразные интерфейсы к базам данных, а в 14-й части (в №10’2001) мы показали вам один из механизмов привлечения внимания пользователей к сайту. В настоящей статье мы изложим материал, которого будет достаточно для самостоятельной разработки еще одной системы, позволяющей увеличить интерес к вашему сайту и оснастить последний функционалом для обеспечения обратной связи с пользователями. Мы  также рассмотрим вопрос об организации переносимого модуля, который может обеспечить легкое и удобное встраивание такой системы практически в любой сайт независимо от его сложности.

Что такое гостевая книга?

Разумеется, здесь речь идет о наиболее типичной гостевой книге. Прежде всего это система, предоставляющая пользователю возможности для ввода текста, выбора оценки того или иного сайта, а также для указания собственных данных (ФИО, e-mail, http и т.д.). Это также система представления данных, введенных различными пользователями, с возможностью навигации, отправки электронных писем авторам сообщений. Возможны и вариации с различными настройками и с контролем нормативности лексики.

Для чего нужна гостевая книга?

Гостевая книга — основной механизм, обеспечивающий обратную связь с пользователями сайта, особенно в том случае, если пользователь желает сделать свое мнение достоянием общественности. Нередки случаи, когда гостевые книги на сайтах превращались в места для дискусий (в форумы, чаты). Таким образом, гостевая книга также (как и система электронного голосования) может пробудить интерес к вашему сайту, а следовательно является еще одним средством привлечения внимания пользователей.

Что нам понадобится

Конечно, предполагается, что читатель знаком с основами ASP- и SQL-программирования (знакомства с первыми частями настоящей статьи для этого будет вполне достаточно). Кроме того, нам потребуется Microsoft SQL Server 7.0 или 2000, какой-нибудь HTML- или текстовый редактор (рекомендую использовать Macromedia Dreamweaver UltraDev 4.0) и немного терпения.

Создание и подготовка базы данных

Для организации хранения введенных пользователями данных вам понадобиться одна таблица, где можно завести поля для хранения имени пользователя, его электронного адреса, страны проживания, адреса сайта, IP-адреса, значения оценки пользователем сайта по пятибалльной шкале и т.д:

Представим себе пример реализации такой таблицы:


Веб программирование asp net и C Sharp

В целях удобного встраивания системы в уже существующие сайты рекомендуется спланировать еще одну таблицу, предназначенную для хранения цветовых и других установок. Это позволит в дальнейшем изменять указанные установки без изменений соответствующих параметров в исходных текстах модулей приложения гостевой книги.

Далее необходимо прописать вашу базу данных в соответствующем разделе источников данных системы. Для этого сделайте следующее.


  • Запустите программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC.
  • Перейдите во вкладку System DSN и создайте новый источник данных, нажав на Add…
  • В появившемся списке драйверов выберите драйвер баз данных — Microsoft SQL Server и нажмите на Next.
  • В строке Data Source Name задайте имя вашей базы данных (в описываемом примере Gustbook — это имя, по которому вы в дальнейшем будете обращаться к ней).
  • В строке Server укажите сервер, к которому будет осуществлено подключение, и нажмите на Next.
  • Выберите режим аутентификации With SQL Server…, задайте имя пользователя и пароль для подключения к SQL-серверу; определите протокол связи с сервером (кнопка Client Configuration — TCP/IP) и два раза нажмите на Next, после чего нажмите на Finish.
  • Вы увидите статистику о проделанных действиях, а для проверки источника данных можете воспользоваться кнопкой Test Data Source.
  • В итоге перед вами появится строка в списке источников данных в вашей системе.

Теперь, когда база данных готова, можно переходить непосредственно к созданию гостевой книги.

Интеграция системы в уже готовый сайт

Понятно, что сама по себе гостевая книга не имеет смысла. Посудите сами: кому нужен сайт, предназначенный исключительно для сбора мнений читателей. Ведь для того чтобы собирать мнения о чем-либо, надо сначала это что-либо представить на их суд. Следовательно, необходимо уделить особое внимание моментам, связанным с упрощением встраивания системы в уже готовые сайты.

В частности, для упрощения настройки системы под характерные особенности того или иного сайта рекомендуется (как уже говорилось выше) создать специальную таблицу для хранения всех этих предпочтений, чтобы заносить в нее определенные значения, специфические для вашего сайта. Очевидное преимущество такого подхода заключается в том, что для осуществления встраивания системы в уже готовый сайт не потребуется производить изменения в исходном коде модулей, нужно изменить только настройки в соответствующей таблице базы данных.

Представим себе пример реализации такой таблицы:


Веб программирование asp net и C Sharp

Как видите, здесь присутствуют поля для хранения информации об имени и пароле доступа к режиму настройки системы, о цветах основного фона сообщения пользователей, верхней и нижней рамок (поля Mid_Color, Top_Color, Bot_Color соответственно), о цвете и размере  заголовка формы, служащей для ввода пользователем данных (поля Form_Color и FormTitleSize соответственно), о цвете, размере и начертании шрифра текста самого сообщения, информационных полей, а также самих страниц с гостевой книгой (поля MessageFontColor, MessageFontSize,  MessageFontFace, InfoFontColor, InfoFontSize,  InfoFontFace, PageFontColor, PageFontSize  и PageFontFace соответственно), полей-переключателей для включения режима автоматической отправки уведомлений о поступлении новых сообщений по электронной почте ответственному лицу (например, менеджеру или администратору сайта), поля хранения электронного адреса ответственного лица, текста сообщения с благодарностями за оставленное пользователем сообщение, со списком недопустимых слов и переключателем режима их фильтрации (если последний включен, то слова, находящиеся в списке недопустимых, будут автоматически заменяться в тексте сообщения на звездочки и таким образом будет осуществлен контроль за нормативностью лексики текстов сайта).

Развитие системы интеграции гостевой книги подразумевает организацию и Web-интерфейса для настройки всех рассмотренных нами параметров (полей таблицы администрирования).

Интеграция системы в уже готовый сайт в чистом виде может создавать некоторые сложности и при восприятии исходного текста, и в дальнейшем, если, например, потребуется временно отключить гостевую книгу на том или ином сайте. Поэтому попытаемся разработать систему таким образом, чтобы ее интеграция в готовый сайт не составила особого труда. Для этого необходимо сформировать независимый модуль системы и включить его в текст основного сайта там, где это необходимо. Так, к примеру, текст страницы вашего сайта может выглядеть следующим образом:

<head>

<title>ASP на блюдечке (Часть - 15) – Гостевая книга </title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

</head>

 

<body  marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" >

…

<!-- #include file="Guest.asp"-->

…

</body>

</html>  

или

<!-- #include file="mainheader.inc"-->

<!-- #include file="Guest.asp"-->

<!-- #include file="mainfooter.inc"-->  

Как видите, в первом случае директива о включении странички с гостевой книгой (<!-- #include file="Guest.asp"-->) указана в нужном месте, а во втором случае страничка исходного сайта представлена просто в виде трех последовательно включаемых элементов: начала, странички с гостевой книгой и конца. Использование того или иного способа организации структуры странички вашего сайта — дело вкуса и зависит как от структуры исходного сайта, так и от степени его сложности.

Главная страничка гостевой книги (файл Guest.asp)

В представленном приложении будет всего одна страничка, которая будет служить и для отображения сообщений пользователей, и для навигации и ввода новых сообщений. В зависимости от значений ключевых параметров будет осуществляться то или иное действие, а страничка будет находиться в том или ином состоянии. Прежде всего вам потребуется разработать ту ее часть, на которой будет происходить показ сообщений пользователей и в которой будут размещены ссылки на часть, служащую для добавления новых сообщений.

Для начала напишем несколько функций для работы со строками:

<!--#include file="config.asp"-->  
  1. Функцию замены пустой строки на пробел и одинарной кавычки на двойную:
    
     Function ChkString(string)
    
      If string = "" then string = " "
    
      ChkString = Replace(string, "'", "''")
    
     End Function
    
    %>  
  2. Функцию проверки лексики текста сообщения на нормативность. В случае обнаружения совпадений слов со словами из списка недопустимых следует заменять их на звездочки:
    
     Function ChkBadWords(String2)
    
      strBadWords = objRec2("BadWords")
    
      bwords = split(strBadWords, "|")
    
      For i = 0 to ubound(bwords)
    
       String2 = Replace(String2, bwords(i), string(len(bwords(i)),"*"), 1,-1,1)
    
      Next
    
      ChkBadWords = String2
    
     end function
    
     
    
     
    
    %>  
  3. Функцию форматирования текста, введенного пользователем. В случае необходимости (при наличии соответствующего флажка в базе данных) будет проверяться (фильтроваться) текст на предмет нормативности:
    
      Function FormatStr(String)
    
                on Error resume next
    
                String = Server.HTMLEncode(String)
    
                String2 = Replace(String, CHR(13), "")
    
                String2 = Replace(String, CHR(10) & CHR(10), "</P><P>")
    
                String2 = Replace(String, CHR(10), "<br>")
    
                If objRec2("BadOn") = True then
    
                   String2 = ChkBadWords(String2)
    
                 End if
    
                FormatStr = String2
    
      End Function
    
    %>  
  4. Функцию проверки заполнения полей:
    
      Function ValidateField(sFieldValue, sFieldType)
    
         Valid = True
    
         Select Case LCase(sFieldType)
    
            Case "name"
    
                If Len(sFieldValue) = 0 Then Valid = False
    
            Case "message"
    
                If Len(sFieldValue) = 0 Then Valid = False
    
           End Select
    
           ValidateField = Valid
    
      End Function
    
    %>  
  5. Процедуру добавления новых сообщений (обратите внимание на то, каким образом вычисляется IP-адрес компьютера, с которого посланно сообщение):

 Sub Update

            strSql = "insert into Messages (Name, Country, Email, URL,IP,Message,Rating) values ('"

            strSql = StrSql & ChkString(Request.Form("name")) & "', '"

            strSql = StrSql & ChkString(Request.Form("Country")) & "', '"

            strSql = StrSql & ChkString(Request.Form("email")) & "', '"

            strSql = StrSql & ChkString(Request.Form("URL")) & "', '"

            strSql = StrSql & Request.ServerVariables("REMOTE_ADDR") & "', '"

            strSql = StrSql & ChkString(Request.Form("Message")) & "', '"

            strSql = StrSql & ChkString(Request.Form("Rating")) & "')"

            objConn.Execute (StrSql)

%>  

После этого извлекаются и применяются параметры цветов, размеров, шрифтов оформления из соответствующей таблицы:

 <font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" 

    size="<%=objRec2("FormTitleSize")%>"><b>Спасибо за вашу запись в нашей гостевой книге!</b><p>

<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"  

   size="<%=objRec2("PageFontSize")%>">Для просмотра вашей записи кликните<a href="guest.asp"> здесь</a></b>  

А теперь отправьте электронное письмо менеджеру или администратору с уведомлением о поступлении нового сообщения в гостевую книгу в случае необходимости:


 

   If Not(Request.Form("email"))="" AND objRec2("AutoEmail")=True then

     Name = Request.Form("name")

     Email = Request.Form("email")

     sFrom = objRec2("YourEmail")

     sTo=Email

     sSubject = "Спасибо, Ваша запись в нашей гостевой книге принята!"

     sMessage = "Дорогой(ая) " & Name & vbcrlf _

                        & vbcrlf _

                        & objRec2("ThankMessage") & vbcrlf _

                           & vbcrlf _

                          & vbcrlf

 

     Set objNewMail = CreateObject("CDONTS.NewMail")

     objNewMail.Send sFrom, sTo, sSubject, sMessage

     Set objNewMail = Nothing

   End If

 

   If objRec2("YouEmail")=True then

     Name = Request.Form("name")

     Home_Page = Request.Form("url")

     Email = Request.Form("email")

     Message = Request.Form("message")

     Country = Request.Form("Country")

     Address = Request.ServerVariables("REMOTE_ADDR")

     Rating = Request.Form("Rating")

     If Rating ="0" then

     Rating="No Rating"

   End If

 

   sFrom = objRec2("YourEmail")

   sTo= objRec2("YourEmail")

   sSubject = "Новое сообщение"

   sMessage = "Привет," & vbcrlf _

               & "Новое сообщение поступило в гостевую книгу" & vbcrlf _

               & vbcrlf _

               & ":" & vbcrlf _

               & vbcrlf _

               & Message  & vbcrlf _

               & vbcrlf _

             & "Детали сообщения:" & vbcrlf _

             & "Ваше имя: " & Name & vbcrlf _

             & "Email: " & Email & vbcrlf _

             & "URL: " & Home_Page & vbcrlf _

             & "Страна: " & Country & vbcrlf _

             & "Рейтинг: " & Rating & vbcrlf _

             & "Адрес: " & Address

 

    Set objNewMail = CreateObject("CDONTS.NewMail")

    objNewMail.Send sFrom, sTo, sSubject, sMessage

    Set objNewMail = Nothing

   End If

End Sub

%>  

Форма ввода новых значений

Целесообразно также вовлечь в процедуру показ формы, служащей для добавления новых сообщений (обратите внимание, что форма замкнута на себе, то есть в качестве реакции на нее служит модуль, который именно ее и содержит):


 Sub ShowForm(Sign)

%>

 <center>

<form action="guest.asp?mode=post" method="post">

 

 <table width=400 border=0 cellpadding=3 cellspacing=0 bgcolor=<%=ObjRec2("Form_Color")%>>

   <tr>

  <td colspan=2 align=center><font face="<%=objRec2("PageFontFace")%>"color="

  <%=objRec2("PageFontColor")%>" size="<%=objRec2("FormTitleSize")%>">

<b>Оставьте запись в нашей гостевой книге</b>

<p><font size="<%=objRec2("PageFontSize")%>"><font color=red><sup>*</sup>

</font>Обозначает поля, которые обязательно нужно запомнить</font></font>

</td>

</tr>

 

 <tr><td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>

 <font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" 

  size="<%=objRec2("PageFontSize")%>"> <b>Ваше имя:</b>

<font color=red><sup>*</sup></font></td></tr>

 <tr>

<td width=230><input name="name" value="<%= Request.Form("name")" size=30>

</td>

<td width=170>



  If dictFields(LCase("name")) Then

    Response.Write "<font size=""-2"" color=""red"" face=""verdana,arial,sans-serif""> You must enter a name</font><br>"

  Else

    Response.Write "<font size=""-2"">&nbsp;<br></font>"

  End If

%>

 

 </td></tr>

 <tr>

<td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>

<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" 

  size="<%=objRec2("PageFontSize")%>">

<b>Email:</b>

</td>

</tr>

 

<tr>

<td colspan=2><input name="email" value="<%= Request.Form("email")" size=30>

</td>

</tr>

 

 <tr>

<td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>

<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">

<b>URL:</b>

</td>

</tr>

 

<tr>

<td colspan=2> <font face="<%=objRec2("PageFontFace")%>" color="

<%=objRec2("PageFontColor")%>

" size="<%=objRec2("PageFontSize")%>"> <a href="http://&nbsp;%3c/font">http://&nbsp;</font</a>>

<input name="url" value="<%= Request.Form("url")" size=30>

</td>

</tr>

 <tr>

<td align=left bgcolor=<%=ObjRec2("Form_Color")%> colspan=2>

<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">

<b>Страна:</b>

</td>

</tr>

 

<tr>

<td colspan=2><input name="country" value="<%= Request.Form("country")" size=30></td></tr>

 <tr><td align=center colspan=2><font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">

<b>Как Вы оцениваете наш сайт?</b><br>

 <select NAME="Rating" size="1"><option value="0"



 If Request.Form("Rating") = "0" then

   Response.Write "selected"

 End if

%>

 >Без оценки</option>

  <option value="1" If Request.Form("Rating") = "1" then Response.Write "selected" End if

 >1 Балл</option>

 <option value="2" If Request.Form("Rating") = "2" then Response.Write "selected" End if

 >2 Балла</option>

 <option value="3" If Request.Form("Rating") = "3" then Response.Write "selected" End if

 >3 Балла</option><option value="4" If Request.Form("Rating") = "4" then Response.Write "selected" End if

 >4 Балла</option><option value="5" If Request.Form("Rating") = "5" then Response.Write "selected" End if

 >5 Баллов</option></select></td></tr>

 <tr><td align=center colspan=2><font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>

 "><b>Ваши комментарии:<font color=red><sup>*</sup></font></b></td></tr>

 <tr><td align=center colspan=2><textarea name="Message" rows=6 cols=40 wrap="virtual"><%= Request.Form("Message")</textarea></td></tr>

 <tr><td align=center colspan=2><font face="<%=objRec2("PageFontFace")%>" color="red" size="-2">

 



 If dictFields(LCase("message")) Then

  Response.Write "Вы не ввели сообщение</font><br>"

 Else

  Response.Write "&nbsp;<br></font>"

 End If

%>

 

<INPUT type="submit" value="Оставить запись" name=submit></td></tr></table></form>



 End Sub

%>  

Затем следует основная функция, служащая для показа фиксированного количества  сообщений пользователей (значения извлекаемого из таблицы  административных настроек):


 Sub Show

  NumPerPage=INT(objRec2("NumPerPage"))

  If Request.QueryString("page") = "" Then

    iPageCurrent = 1

  Else

    iPageCurrent = CInt(Request.QueryString("page"))

  End If

 

  Set objRec = Server.CreateObject ("ADODB.Recordset")

  StrSql = "SELECT * FROM Messages ORDER BY ID DESC;"

  objRec.PageSize = NumPerPage

  objRec.CacheSize = NumPerPage

  objRec.Open StrSql,objConn,3,1,&H0001

  iPages = objRec.PageCount

  TotalRows = objRec.RecordCount

  If iPageCurrent > iPages Then iPageCurrent = iPages

  If iPageCurrent < 1 Then iPageCurrent = 1

  If iPages = 0 Then

   Response.Write "Не найденно записей!"

  Else

   ObjRec.AbsolutePage = iPageCurrent

%>

   <p align=left><font face="<%=objRec2("PageFontFace")%>

      " color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">

      Всего в книге <b><%=TotalRows%></b> записей на <b><%=iPages%></b> странице(ах)</font></p>



 

  iRecordsShown = 0

 

  Do While iRecordsShown < NumPerPage And Not objRec.EOF

    Rating = ObjRec("Rating")

    If IsNull(Rating) or Rating="0" then

      Rating = "nr"

    Else

      Rating = ObjRec("Rating")

    End If

 

    If IsNull(ObjRec("URL")) then

     Link = "Не указан URL"

    Else

     Link = "<a href='http://" & ObjRec("URL") & "'>http://" & ObjRec("URL") & "</a>"

    End If

 

    Email = FormatStr(ObjRec("Email"))

    Name = FormatStr(ObjRec("Name"))

%>

 

<table width="550" border="0" cellpadding="1" cellspacing="0">

 

<tr>

<td colspan="2" bgcolor="<%=ObjRec2("Top_Color")%>">

  <font face="<%=objRec2("InfoFontFace")%>"

  color="<%=objRec2("InfoFontColor")%>"

  size="<%=objRec2("InfoFontSize")%>"><%=ObjRec("DateID")

 </font>

</td>

 

<td align="right" bgcolor="<%=ObjRec2("Top_Color")%>">

<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" 

 size="<%=objRec2("InfoFontSize")%>"><b>Оценка сайта: </b>

</font>

 

<img src="images/star<%= Rating.gif" height="14" width="65">

</td>

</tr>

 

<tr><td colspan=3 bgcolor="<%=ObjRec2("Mid_Color")%>">

<font face="<%=objRec2("MessageFontFace")%>" color="<%=objRec2("MessageFontColor")%>" size="<%=objRec2("MessageFontSize")%>"><%=FormatStr(ObjRec("Message"))%>

</font>

</td>

</tr>

 

<tr>

<td width="110" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>">

<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" 

 size="<%=objRec2("InfoFontSize")%>">

 



 If IsEmpty(Email) or Email=" " then

   Response.Write Name

 Else

   Response.Write "<a href=""mailto:" & Email & """><img src=images/mail.gif border=0></a>&nbsp;" & Name

 End If

%> 

 

</font>

</td>

<td width="180" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>">

<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>"

size="<%=objRec2("InfoFontSize")%>"><%=FormatStr(ObjRec("Country"))&nbsp;<i>

IP:<%= ObjRec("IP") </i>

</font>

</td>

<td width=260 align="right" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>">

<font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>"

size="<%=objRec2("InfoFontSize")%>">

<%=Link%>

</font>

</td>

</tr>

</table>

<br>

 



   iRecordsShown = iRecordsShown + 1

   objRec.MoveNext

  Loop

 

  if iPages > 1 then

%>

 

<p align=left>

<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>"

size="<%=objRec2("PageFontSize")%>">

<b>Pages: </b>

 



   For I = 1 To iPages

   If I = iPageCurrent Then

    Response.Write "<b>" & I & "</b> "

   Else

    Response.Write "<a href=./guest.asp?page=" & I & ">" & I & "</a> "

   End If

  Next

  Response.Write "</font>"

 

 Else

  Response.Write "&nbsp;"

 End If

 End If

 objRec.Close

 Set objRec = Nothing

 End Sub

%>  

Обратите внимание на то, каким образом формируется и осуществляется ссылка на просмотр следующей странички с такой «порцией» сообщений:

    Response.Write "<a href=./guest.asp?page=" & I & ">" & I & "</a> "  

Как видите, в качестве значения параметра page ей передается номер странички и впоследствии, если это значение не равно 1, показ сообщений начинается не с первого сообщения, а с того, которое окажется первым по счету на страничке с соответствующим номером, заданным в параметре:


  NumPerPage=INT(objRec2("NumPerPage"))

  If Request.QueryString("page") = "" Then

    iPageCurrent = 1

  Else

    iPageCurrent = CInt(Request.QueryString("page"))

  End If

%>

Далее следует исходный текст самого модуля, в котором осуществляются подключение к базе данных и извлечение записей (в описываемом примере это будет единственной записью) из таблицы административных настроек Admin:  

 Set objConn = Server.CreateObject ("ADODB.Connection")

 objConn.Open StrConn

 Set objRec2 = Server.CreateObject ("ADODB.Recordset")

 ConfigSql = "SELECT * FROM Admin;"

objRec2.Open ConfigSql,objConn,0,1,&H0001

%>  

Затем можно оформить заголовок и основные тэги HTML-странички:

<head>

<title>ASP на блюдечке часть 15 - Гостевая книга своими руками</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

</head>

 

<body  marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">

<table width="780" border="0" cellspacing="0" cellpadding="0">

<tr>

<td align="left" valign="top" height="389">

<center>

 

<table border="0" width="550" cellpadding="0">

<tr>

 

<td width=100% valign=bottom align=middle>

<font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>">  

Теперь нужно сформировать ссылки на ваш функционал (просмотр и добавление записей в гостевую книгу):

<a href="guest.asp?mode=show">Просмотреть гостевую книгу</a> |

<a href="guest.asp?mode=post">Оставить запись в гостевой книге</a>

 

</font>

<p>&nbsp;

</td>

</tr>

 

<tr>

<td align=center>  

И наконец, главный цикл обработки вашей главной и единственной asp-странички модуля будет выглядеть следующим образом:


 select case Request.QueryString("mode")

  case "post"

    Dim Field

    Dim dictFields

    Set dictFields = Server.CreateObject("Scripting.Dictionary")

 

    For Each Field in Request.Form

     If ValidateField(Request.Form(Field), Field) = False Then

      dictFields.Add LCase(Field), True

     End If

    Next

 

    If Request.Form.Count <> 0 And dictFields.Count = 0 Then

     Call Update

    Else

     If Request.Form.Count <> 0 Then

     End If

     ShowForm("Sign")

    End If

 

  case "show"

    Call Show

    case Else

    Call Show

 End Select

%>  

Здесь рассматриваются всего два случая (case), соответствующие двум функциям нашего Web-приложения: добавлениe новой записи в гостевую книгу (значение параметра mode = “post”) и просмотр сообщений гостевой книги (значение параметра mode = “show”).


 objRec2.Close

 Set objRec2 = Nothing s

 objConn.Close

 Set objConn = Nothing

 Response.Write "</td></tr></table></center>"

%>

 

 </td>

</tr>

</table>

</body>

</html>  

Заключение

Мы рассмотрели еще один функциональный компонент сайта, причем сразу сделали его переносимым. Результатом этого явился довольно сложный с точки зрения восприятия исходный код. Хотя большое число параметров,  извлекаемых из административной таблицы, несколько усложнило восприятие исходного кода модуля, однако их применение раз и навсегда избавит вас от необходимости править код при их изменении. Разработанная нами система вполне приемлема в использовании, а благодаря модульности ее реализации и описанному в статье подходу к ее внедрению в уже существующие сайты она может быть применена в качестве гостевой книги на сайте практически любой степени сложности.

Следовало бы, конечно, рассмотреть и Web-интерфейс для редактирования, добавления и удаления административных настроек (схем), однако это займет много времени, и поэтому автор постарается освeтить его в одной из следующих частей настоящей статьи.