<% ASP на блюдечке %>. Часть 16

Гостевая книга своими руками — 2. Администрирование

 Рубен Садоян, rouben@iname.com

Введение

Гостевая книга: краткий обзор

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

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

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

Главная страничка администрирования гостевой книги (файл index.htm)

Модуль удаления сообщений (файл Delete.asp)

Модуль настройки параметров почты (файл ModeMail.asp)

Модуль настроек интерфейса (файл ModLook.asp)

Заключение

Введение

В предыдущей статье настоящего цикла <%ASP на блюдечке. Часть 15. Гостевая книга своими руками %> мы рассмотрели такой функциональный компонент сайта, как гостевая книга, причем сразу сделали его переносимым. В результате был получен достаточно сложный с точки зрения восприятия исходный код. Однако, хотя множественные параметры несколько усложнили восприятие исходного кода модуля, их применение раз и навсегда избавило от необходимости правки кода при их изменении. Разработанная таким образом система вполне приемлема для использования, а благодаря модульности ее реализации и описанному в статье подходу к ее внедрению в уже существующие сайты она может быть применена в качестве гостевой книги на сайте практически любой степени сложности.

Теперь, как и было обещано, мы рассмотрим Web-интерфейс для редактирования, административных настроек (схем) работы гостевой книги. Для начала стоит сказать несколько слов о самой гостевой книге (для тех читателей, кто не знаком с предыдущей статьей настоящего цикла, это будет крайне необходимо для полноты восприятия), разработанной нами в предыдущей статье настоящего цикла (см. приложение CD-ROM к журналу КомпьютерПресс № 11’2001).

В начало В начало

Гостевая книга: краткий обзор

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

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

В начало В начало

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

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

В начало В начало

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

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

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

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

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

  • запустите программу — конфигуратор источников данных (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 — перед вами появится строка в списке источников данных в вашей системе.

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

В начало В начало

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

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

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

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

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

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

Теперь займемся разработкой управляющего интерфейса для нашей гостевой книги.

В начало В начало

Главная страничка администрирования гостевой книги (файл index.htm)

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

Итак, функциональная часть нашего интерфейса должна включать в себя:

  1. Систему идентификации администратора по имени и паролю, систему изменения имени и/или пароля.
  2. Возможность удаления сообщений.
  3. Возможность настройки параметров почты.
  4. Возможность редактирования настроек интерфейса.

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

<html>  
<head>  
<title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2.  Администрирование.</title>  
</head>  
   
<frameset rows="50,*">  
  <frame name="header" scrolling="no" noresize target="main" src="admintop.htm" marginwidth="15" marginheight="15">  
  <frame name="main" scrolling="auto" marginwidth="15" marginheight="15" src="login.asp">  
  <noframes>  
  <body>  
  <p>This page uses frames, but your browser doesn't support them. Get a decent one!</p>  
  </body>  
  </noframes>  
</frameset>  
</html>  

 

Как видите, верхний фрейм ссылается на исходный модуль admintop.htm, а основной фрейм — на модуль идентификации пользователя login.asp.

Первый, как мы уже говорили, содержит ссылки на рассмотренный нами функционал:

 

<html>  
<head>  
<base target="main">  
<title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Режим администрирования</title>  
</head>  
   
<body bgcolor="#FFFFFF"><div align="center">  
 <table border="0" cellpadding="0" cellspacing="0" width="100%">  
  <tr><td width="100%" valign="middle" align="center">  
  <a href="delete.asp">Удаление сообщений</a> &nbsp; | &nbsp;  
  <a href="modemail.asp">Настройка параметров почты</a> &nbsp; | &nbsp;  
  <a href="modlook.asp">Другие опции</a> &nbsp; | &nbsp;  
  <a href="modlogin.asp">Смена пароля</a>  
  </td></tr>  
 </table>  
   
</center>  
</div>  
</body>  
</html>  

Далее следуют модули, соответствующие ссылкам в модуле верхнего фрейма набора.

Модуль идентификации пользователя (файл Login.asp)

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

Response.Cookies(""&Session.SessionID&"") ("Admin") = "true",  

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

IF NOT Request.Cookies(""&Session.SessionID&"")("Admin") = "true" Then  
  Response.Redirect  "login.asp"  
 End If  

В остальном действия при идентификации стандартны. Из таблицы с административными настройками извлекаются записи, у которых поля с именем пользователя и паролем совпадают с заданными:

<!-- #INCLUDE FILE="config.asp" -->  
   
<%Response.Buffer = True%>  
   
<html>  
<head>  
</head>  
<body>  
   
<%Sub Form%>  
 <form action="login.asp?Mode=login" method="post" name="Login">  
 <table border="0">  
 <tr>  
 <td noWrap><font face="verdana" size="2">  
 <b>Имя (логин):</b>  
 </font></td>  
 <td><input maxLength="50" name="User" size="25"> </td></tr>  
 <tr><td noWrap><font face="verdana" size="2">  
 <b>Пароль:</b>  
 </font></td>  
 <td><input maxLength="50" name="Password" size="25" type="password"></td></tr>  
 <tr><td colspan="2"><input name="Submit" type="submit" value="Вход в режим">  
 </td></tr></table>  
<%End Sub  
   
Sub Login  
  set objConn= Server.CreateObject("ADODB.Connection")  
  set objRec = server.CreateObject("ADODB.RecordSet")  
  objConn.Open strConn  
   
  strSql ="SELECT * from admin where Name = '" & Request.Form("User") & "' and password = '" & Request.Form("Password") &"'"  
  set objRec = objConn.Execute (StrSql)  
   
  If objRec.BOF or objRec.EOF then  
   Response.Write "<b>Неверное имя или пароль администратора</b><p>"  
   Response.Write "<a href=""login.asp?mode=show"">Повторите попытку</a><p>"  
  Else  
   Response.Write "Вы находитесь в режиме администрирования гостевой книги<p>"  
   Response.Cookies(""&Session.SessionID&"") ("Admin") = "true"  
  End If  
End Sub %>  
   
<table border="0" width="100%" align="center">  
<tr>  
<td width="100%" align="center">Введите имя и пароль для доступа к режиму администрирования гостевой книги  
</TD>  
</tr>  
   
<tr>  
<td width="95%" align="center">  
…  

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

…  
<%  
 select case Request.QueryString("mode")  
  case "login"  
    Call Login  
  case "show"  
    Call Form  
  Case Else  
    Call Form  
End Select  
%>  
</td>  
</tr>  
</table>  
</body>  
</html>  

После того как процедура идентификации пройдена, осуществляется допуск  пользователя к функционалу системы.

В начало В начало

Модуль удаления сообщений (файл Delete.asp)

Модуль по сути  дела предоставляет нам доступ к сообщениям в том виде, в котором это выполнялось модулем guest.asp в основном режиме, как показано в предыдущей статье данного цикла.  Функционал тот же, отличие только в наличии галочки-чекбокса для выбора сообщений, подлежащих удалению, и кнопки «Удалить выбранные» для выполнения действий по удалению:

<!--#include file="config.asp"-->  
   
<%  
  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>")  
   FormatStr = String2  
  End Function  
   
 Sub Delete  
  Set objRec = Server.CreateObject ("ADODB.Recordset")  
  objRec.Open "Messages", objConn,1, 3, &H0002  
  For intLoop = 1 to Request.Form("field").Count  
   IDnum = Request.Form("field")(intloop)  
   objRec.Filter = 0  
   objRec.Filter = "ID='" & IDnum & "'"  
   objRec.Delete  
  Next  
  Response.Redirect "delete.asp"  
 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 "Записей не найденно!<p>"  
 Else  
  ObjRec.AbsolutePage = iPageCurrent  
 %>  
 <font face="<%=objRec2("PageFontFace")  
 %>" color="<%=objRec2("PageFontColor")%>  
 " size="<%=objRec2("PageFontSize")%>">  
 <center>  
 <b>Удаление сообщений</b>  
 </center>  
 <p align=left>Всего <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 = "no URL given"  
  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")%>">  
<input type="checkbox" name="field" value="<%=objRec("ID")%>"> <%=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")%>">  
<%=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  
%>  
<input type="submit" value="Удалить выбранные сообщения" name="Submit"></p></form>  
<%  
End Sub  
   
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 на блюдечке. Часть 16. Гостевая книга своими руками — 2. Удаление сообщений</title>  
</head>  
   
<body>  
<center>  
   
<table border="0" width="550" cellpadding="0">  
<tr>  
<td align=center>  
<form method="POST" action="delete.asp?mode=delete">  
   
<%  
select case Request.QueryString("mode")  
 case "delete"  
  Call Delete  
 case "show"  
  Call Show  
 case Else  
 Call Show  
End Select  
   
 objRec2.Close  
 Set objRec2 = Nothing  
 objConn.Close  
 Set objConn = Nothing  
%>  
   
</p>  
</td>  
</tr>  
</table>  
</center>  
</body>  
</html>  
В начало В начало

Модуль настройки параметров почты (файл ModeMail.asp)

Етот модуль служит для контроля посылки сообщений-уведомлений о поступлении новых записей в гостевую книгу администратору и писем с благодарностями за оставленные сообщения пользователям.

Как мы уже говорили, посылка писем будет выполняться посредством серверного компонента CDONTS, который в большинстве случаев установлен и зарегистрирован на платформах на базе NT по умолчанию, а в случаях, когда это не сделано, может генерироваться ошибка о невозможности порождения экземпляра объекта типа CDONTS. Если по какой-либо причине платформа не позволяет использовать компонент CDONTS, то можно воспользоваться бесплатным компонентом ASP-Email (http://www.aspemail.com/) компании  Persits Software, Inc (http://www.persits.com/).

<%@ LANGUAGE="VBSCRIPT"%>  
<%Response.Buffer = True%>  
   
<!-- #INCLUDE FILE="config.asp" -->  
   
<%  
 IF NOT Request.Cookies(""&Session.SessionID&"")("Admin") = "true" Then  
  Response.Redirect  "login.asp"  
 End If  
   
 Function ChkString(string)  
  if string = "" then string = " "  
  ChkString = Replace(string, "'", "''")  
 End Function  
   
 Set objConn = Server.CreateObject ("ADODB.Connection")  
 Set objRec = Server.CreateObject ("ADODB.Recordset")  
 objConn.Open strConn  
   
 If Request.QueryString("mode") = "go" then  
  objRec.Open "admin", objConn,2,2,&H0002  
  objRec.Filter = "ID=1"  
  objRec("AutoEmail") = Request.Form("AutoEmail")  
  objRec("YouEmail") = Request.Form("YouEmail")  
  objRec("YourEmail") = ChkString(Request.Form("YourEmail"))  
  objRec("ThankMessage") = ChkString(Request.Form("ThankMessage"))  
  objRec.Update  
  Response.Write "Изменения сохранены"  
 Else  
  strSQL = "SELECT * FROM admin Where ID=1"  
  objRec.Open strSQL,objConn,0,1  
  %>  
   
  <html>  
  <head>  
  <title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Настройка параметров почты.</title></head>  
   
  <body>  
  <h1>Настройка параметров почты</h1>  
   
 <form method="POST" action="modemail.asp?mode=go">  
 <b>Письмо с благодарностями пользователю:</b><br>  
   
 <SELECT NAME="AutoEmail">  
  <OPTION VALUE="True"   
  <%  
   If objRec("AutoEmail") = "True" then  
     Response.Write "selected"  
   End if  
   %>  
    >Вкл.</OPTION>  
    <OPTION VALUE="False"   
    <%   
     If objRec("AutoEmail") = "False" then  
      Response.Write "selected"  
     End if  
    %>  
    >Выкл.</OPTION>  
 </SELECT>  
   
 <p>  
 <b>Обратный Email:</b><br>  
 <input type="text" name="YourEmail" size="30" maxlength=70 value="<%=objRec("YourEmail")%>">  
   
 <p>  
 <b>Текст благодарностей ползователю:<br>  
 <textarea rows="7" name="ThankMessage" cols="50" wrap=physical><%=objRec("ThankMessage")%></textarea>  
 <p>  
   
 <b>Уведомление по электронной почте администратору:</b><br>  
 <SELECT NAME="YouEmail">  
  <OPTION VALUE="True"   
  <%  
   If objRec("YouEmail") = "True" then  
    Response.Write "selected"  
   End if  
   %>  
  >Вкл.</OPTION>  
  <OPTION VALUE="False"  
  <%  
   If objRec("YouEmail") = "False" then  
    Response.Write "selected"  
   End if  
   %>  
   >Выкл.</OPTION>  
 </SELECT>  
   
 <p>  
 <input type="submit" value=" Принять изменения " name=" Modify ">  
 </p>  
   
</form>            
   
<%  
 End If  
   
 objRec.Close  
 Set objRec = Nothing  
 objConn.Close  
 Set objConn = Nothing  
   
%>  
   
</body>  
</html>  
В начало В начало

Модуль настроек интерфейса (файл ModLook.asp)

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

 

<%@ LANGUAGE="VBSCRIPT"%>  
<%Response.Buffer = True%>  
   
<!-- #INCLUDE FILE="config.asp" -->  
   
<%  
 IF NOT Request.Cookies(""&Session.SessionID&"")("Admin") = "true" Then  
  Response.Redirect  "login.asp"  
 End If  
   
 Function ChkString(string)  
  if string = "" then string = " "  
  ChkString = Replace(string, "'", "''")  
 End Function  
   
 Set objConn = Server.CreateObject ("ADODB.Connection")  
 Set objRec = Server.CreateObject ("ADODB.Recordset")  
 objConn.Open strConn  
   
 If Request("mode") = "go" then  
  objRec.Open "admin", objConn,2,2,&H0002  
  objRec.Filter = "ID=1"  
  objRec("Top_Color") = ChkString(Request.Form("Top_Color"))  
  objRec("Bot_Color") = ChkString(Request.Form("Bot_Color"))  
  objRec("Mid_Color") = ChkString(Request.Form("Mid_Color"))  
  objRec("Form_Color") = ChkString(Request.Form("Form_Color"))  
  objRec("FormTitleSize") = Request.Form("FormTitleSize")  
  objRec("MessageFontColor") = ChkString(Request.Form("MessageFontColor"))  
  objRec("MessageFontSize") = Request.Form("MessageFontSize")  
  objRec("MessageFontFace") = ChkString(Request.Form("MessageFontFace"))  
  objRec("InfoFontColor") = ChkString(Request.Form("InfoFontColor"))  
  objRec("InfoFontSize") = Request.Form("InfoFontSize")  
  objRec("InfoFontFace") = ChkString(Request.Form("InfoFontFace"))  
  objRec("PageFontColor") = ChkString(Request.Form("PageFontColor"))  
  objRec("PageFontSize") = Request.Form("PageFontSize")  
  objRec("PageFontFace") = ChkString(Request.Form("PageFontFace"))  
  objRec("NumPerPage") = ChkString(Request.Form("NumPerPage"))  
  objRec("BadWords") = ChkString(Request.Form("BadWords"))  
  objRec("BadOn") = Request.Form("BadFilter")  
  objRec.Update  
  Response.Write "Изменения сохранены."  
 Else  
  strSQL = "SELECT * FROM admin Where ID = 1"  
  objRec.Open strSQL,objConn,0,1  
 %>  
   
<html>  
<head><title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Настройка интерфейса</title></head>  
<body>  
<h1>Настройка интерфейса гостевой книги</h1>  
<p>  
<form method="POST" action="modlook.asp?mode=go">  
   
<b>Цвет верхней строки:</b>  
<br>  
<input type="text" name="Top_Color" size="30" maxlength=50 value="<%=objRec("Top_Color")%>">  
   
<p>  
<b>Цвет нижней строки:</b><br>  
<input type="text" name="Bot_Color" size="30" maxlength=50 value="<%=objRec("Bot_Color")%>">  
   
<p>  
<b>Цвет фона текста сообщения:</b><br>  
<input type="text" name="Mid_Color" size="30" maxlength=50 value="<%=objRec("Mid_Color")%>">  
   
<p>  
<b>Цвет формы добавления сообщения:</b><br>  
<input type="text" name="Form_Color" size="30" maxlength=50 value="<%=objRec("Form_Color")%>">  
   
<p>  
<b>Размер текста заголовка формы добавления сообщения:</b><br>  
 <SELECT NAME="FormTitleSize">  
  <OPTION VALUE="-3"   <%   If objRec("FormTitleSize") = "-3" then    Response.Write "selected"   %>  
  >-3</OPTION>  
  <OPTION VALUE="-2"  <%   If objRec("FormTitleSize") = "-2" then    Response.Write "selected"   %>  
   >-2</OPTION>  
  <OPTION VALUE="-1"  <%   If objRec("FormTitleSize") = "-1" then    Response.Write "selected"  %>  
  >-1</OPTION>  
  <OPTION VALUE="+1"  <%   If objRec("FormTitleSize") = "+1" then    Response.Write "selected"  %>  
  >+1</OPTION>  
  <OPTION VALUE="+2"   <%   If objRec("FormTitleSize") = "+2" then    Response.Write "selected"  %>  
  >+2</OPTION>  
  <OPTION VALUE="+3"   <%   If objRec("FormTitleSize") = "+3" then    Response.Write "selected"  %>  
  >+3</OPTION>  
 </SELECT>  
   
<p>  
<b>Цвет текста сообщения:</b><br>  
<input type="text" name="MessageFontColor" size="30" maxlength=50 value="<%=objRec("MessageFontColor")%>">  
   
<p>  
<b>Размер текста сообщения:</b><br>  
<SELECT NAME="MessageFontSize">  
 <OPTION VALUE="-3"  <%  If objRec("MessageFontSize") = "-3" then   Response.Write "selected"  %>  
  >-3</OPTION>  
  <OPTION VALUE="-2"   <%   If objRec("MessageFontSize") = "-2" then    Response.Write "selected"  %>  
  >-2</OPTION>  
  <OPTION VALUE="-1"   <%    If objRec("MessageFontSize") = "-1" then    Response.Write "selected"  %>  
  >-1</OPTION>  
  <OPTION VALUE="+1"   <%    If objRec("MessageFontSize") = "+1" then    Response.Write "selected"  %>  
  >+1</OPTION>  
  <OPTION VALUE="+2"   <%     If objRec("MessageFontSize") = "+2" then     Response.Write "selected"  %>  
  >+2</OPTION>  
  <OPTION VALUE="+3"   <%    If objRec("MessageFontSize") = "+3" then    Response.Write "selected"     %>  
  >+3</OPTION>  
  </SELECT>  
   
<p>  
<b>Шрифт сообщения:</b><br>  
<input type="text" name="MessageFontFace" size="30" maxlength=50 value="<%=objRec("MessageFontFace")%>">  
   
<p>  
<b>Цвет остального текста:</b><br>  
<input type="text" name="InfoFontColor" size="30" maxlength=50 value="<%=objRec("InfoFontColor")%>">  
   
<p>  
<b>Размер шрифта остального текста:</b><br>  
   
<SELECT NAME="InfoFontSize">  
 <OPTION VALUE="-3" <%  If objRec("InfoFontSize") = "-3" then   Response.Write "selected"  %>  
 >-3</OPTION>  
 <OPTION VALUE="-2" <%  If objRec("InfoFontSize") = "-2" then   Response.Write "selected"  %>  
 >-2</OPTION>  
 <OPTION VALUE="-1"  <%  If objRec("InfoFontSize") = "-1" then   Response.Write "selected"  %>  
 >-1</OPTION>  
 <OPTION VALUE="+1"  <%   If objRec("InfoFontSize") = "+1" then   Response.Write "selected"   %>  
 >+1</OPTION>  
 <OPTION VALUE="+2"  <%   If objRec("InfoFontSize") = "+2" then   Response.Write "selected"  %>  
 >+2</OPTION>  
 <OPTION VALUE="+3"  <%   If objRec("InfoFontSize") = "+3" then   Response.Write "selected"  %>  
 >+3</OPTION>  
</SELECT>  
   
<p>  
<b>Шрифт остального текста гостевой книги:</b><br>  
<input type="text" name="InfoFontFace" size="30" maxlength=50 value="<%=objRec("InfoFontFace")%>">  
   
<p>  
<b>Цвет фона страницы:</b><br>  
<input type="text" name="PageFontColor" size="30" maxlength=50 value="<%=objRec("PageFontColor")%>">  
   
<p>  
<b>Размер шрифта остальных текстов страницы:</b><br>  
<SELECT NAME="PageFontSize">  
 <OPTION VALUE="-3" <%  If objRec("InfoFontSize") = "-3" then   Response.Write "selected"  %>  
 >-3</OPTION>  
 <OPTION VALUE="-2" <%  If objRec("InfoFontSize") = "-2" then   Response.Write "selected"  %>  
 >-2</OPTION>  
 <OPTION VALUE="-1"  <%  If objRec("InfoFontSize") = "-1" then   Response.Write "selected"  %>  
 >-1</OPTION>  
 <OPTION VALUE="+1"  <%   If objRec("InfoFontSize") = "+1" then   Response.Write "selected"  %>  
 >+1</OPTION>  
 <OPTION VALUE="+2"  <%   If objRec("InfoFontSize") = "+2" then   Response.Write "selected"  %>  
 >+2</OPTION>  
 <OPTION VALUE="+3"  <%   If objRec("InfoFontSize") = "+3" then   Response.Write "selected"  %>  
 >+3</OPTION>  
</SELECT>  
   
<p>  
<b>Шрифт остальных текстов страницы:</b><br>  
<input type="text" name="PageFontFace" size="30" maxlength=50 value="<%=objRec("PageFontFace")%>">  
   
<p>  
<b>Число сообщений на одной странице:</b><br>  
<SELECT NAME="NumPerPage">  
 <OPTION VALUE="5"  <% If objRec("NumPerPage") = "5"  then Response.Write "selected"%>>5</OPTION>  
 <OPTION VALUE="10" <% If objRec("NumPerPage") = "10" then Response.Write"selected"%>>10</OPTION>  
 <OPTION VALUE="15" <% If objRec("NumPerPage") = "15" then Response.Write selected"%>>15</OPTION>  
 <OPTION VALUE="20" <% If objRec("NumPerPage") = "20" then Response.Write"selected"%>>20</OPTION>  
 <OPTION VALUE="25" <% If objRec("NumPerPage") = "25" then Response.Write"selected"%>>25</OPTION>  
 <OPTION VALUE="30" <% If objRec("NumPerPage") = "30" then Response.Write"selected"%>>30</OPTION>  
 <OPTION VALUE="35" <% If objRec("NumPerPage") = "35" then Response.Write"selected"%>>35</OPTION>  
 <OPTION VALUE="40" <% If objRec("NumPerPage") = "40" then Response.Write"selected"%>>40</OPTION>  
 <OPTION VALUE="45" <% If objRec("NumPerPage") = "45" then Response.Write"selected"%>>45</OPTION>  
 <OPTION VALUE="50" <% If objRec("NumPerPage") = "50" then Response.Write"selected"%>>50</OPTION>  
</SELECT>  
   
<p><b>Фильтр ненормативной лексики:</b><br>  
<SELECT NAME="BadFilter">  
 <OPTION VALUE="True"   
 <%  If objRec("BadOn") = "True" then   Response.Write "selected"  %> >Вкл.</OPTION>  
 <OPTION VALUE="False" <% If objRec("BadOn") = "False" then   Response.Write "selected"  %>  
>Вык.</OPTION>  
</SELECT>  
   
<p>  
<b>Словарик ненормативной лексики:</b><br>  
<% Dim BW   
 BW = objRec("BadWords")%>  
<input type="text" name="BadWords" size="30" maxlength=255 value="<% Response.Write BW%>">  
   
<p>  
<input type="submit" value=" Принять изменения " name=" Modify ">  
</p>  
   
</form>            
   
<%  
 End If  
 objRec.Close  
 Set objRec = Nothing  
 objConn.Close  
 Set objConn = Nothing  
%>  
   
</body>  
</html>  
В начало В начало

Заключение

Мы рассмотрели систему настройки поведения и вида уже готового функционального компонента сайта. Конечно, Web-интерфейс в данном случае не единственная возможность настройки, ведь в принципе настройку можно производить и вручную, непосредственно с консоли администратора базы данных. Для этого можно также разработать программный интерфейс.  Но если этот процесс выполняется неоднократно или настройки меняются слишком часто, то интерфейс просто необходим. Недостатками «программного подхода» являются необходимость его инсталляции, сложность удаленного администрирования (ведь компонент настройки может быть расположен далеко от сервера) и, как следствие, зависимость от сервера. В то же время Web-версия независима от сервера, потому что настроена «под него», и обычно работает с локальным сервером данных, поскольку предполагается, что данные и код хранятся на одном и том же сервере.

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

КомпьютерПресс 12'2001


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует