Предисловие: В настоящее время в Интернете повсюду есть форумы, но мне интересно, сталкивались ли вы когда-нибудь с такой ситуацией: поиск нужного вам контента в беспорядочной дискуссионной информации - это очень трудоемкое и трудоемкое занятие. Позже вы это сделаете. не захочу ли я больше заходить ни на один форум. Так можем ли мы добавить функцию аудита к содержанию форума нашего сайта? То есть все статьи, опубликованные пользователями сети на форуме, не будут отображаться немедленно. Они должны быть просмотрены веб-мастером или модератором, если они будут сочтены ценными и необходимыми для рекомендации другим пользователям сети, они будут опубликованы. В противном случае удалите его, чтобы не тратить место и не выглядеть как выделенная область. Таким образом, ваш форум может предоставлять более понятный и полезный контент, чем обычные форумы. Размещение его на своем веб-сайте должно привлечь больше пользователей сети. Эту идею, безусловно, можно реализовать, и ниже я кратко расскажу, как это сделать.
Примечание. Эта статья предназначена для читателей, имеющих определенное представление о базе данных ACCESS, HTML и ASP.
1. Анализ структуры форума
. С помощью приведенного выше анализа функциональных требований мы можем разделить создание форума на четыре части:
(1) Модуль регистрации и управления пользователями сети: поскольку присутствует веб-мастер или модератор, он должен иметь возможность контролировать его в форум Аутентификация. Функция этого модуля заключается в управлении зарегистрированными пользователями сети и предоставлении соответствующих запросов. Например, можно запросить все опубликованные статьи указанного автора, запросить десять пользователей сети, опубликовавших наибольшее количество статей, и т. д. Если ваш форум не очень большой, этот модуль можно опустить, чтобы иметь только функцию аутентификации модератора, и удалить части, связанные с регистрацией и запросами.
(2) Модуль отображения статей: отображает все статьи, которые были проверены модераторами и признаны достойными рекомендации.
(3) Модуль публикации статей: предоставляет зарегистрированным пользователям сети место, где они могут публиковать свое мнение и ждать проверки модераторами после публикации.
(4) Модуль обзора статей: Модераторы обрабатывают все статьи, опубликованные на сайте, но не прошедшие рецензирование, и решают, опубликовать их или удалить.
Поняв конкретные функциональные требования, можно приступать к оформлению форума по модулю. Конечно, эти модули лишь функционально разделяют структуру форума и фактически не могут быть спроектированы полностью независимо. Для таких небольших приложений нет необходимости в полной модульной конструкции. Возможно, будет проще написать программный код напрямую при хорошем планировании.
Обычно существует два способа создания форума: с использованием файлов или баз данных. Условно говоря, использование базы данных проще и эффективнее, может обеспечить лучший контроль над форумом, а также обеспечить некоторую проверку и защиту данных. Здесь я использую базу данных ACCESS. Для обычных приложений малого и среднего размера ACCESS должен справиться с этой задачей.
Из приведенного выше анализа мы можем узнать, что таблиц должно быть четыре. Ниже я привожу структуру каждой таблицы.
(1) Таблица авторов (используется для хранения информации об авторе):
ID: обязательный тип текста. Это кодовое имя пользователя сети.
Пароль: обязательный текстовый тип.
Псевдоним: обязательный тип текста.
ЭЛЕКТРОННАЯ ПОЧТА: обязательный тип текста.
Позиция: обязательный числовой тип. -1 представляет обычных пользователей сети, 0 — веб-мастеров. Числа больше 0 обозначают модераторов.
Количество статей: обязательно числовой тип. Общее количество статей, опубликованных пользователями сети.
Имя: тип текста, необязательно.
Пол: тип текста, необязательно.
Телефон: текстовый тип, необязательно.
(2) Таблица содержимого (используется для хранения конкретного содержания статьи и связанной с ней информации):
Идентификатор: автоматически нумеруется и индексируется для ускорения поиска.
Канбан-идентификатор: числовой тип из списка Канбан, указывающий доску Канбан, которой принадлежит статья.
Идентификатор темы: числовой тип из таблицы тем, указывающий тему, к которой принадлежит статья.
ID автора: тип текста из таблицы авторов с указанием автора статьи.
Дата: тип даты/времени, заданное начальное значение — это функция NOW(), которая автоматически принимает в качестве значения текущее системное время.
Название: Тип текста. Название статьи.
Опубликовать: тип «Да/Нет», «Истина» означает, что статья была проверена и может быть опубликована; «Нет» означает, что статья еще не проверена.
Рекомендация: Числовой тип, степень рекомендации статьи.
Содержание: тип примечания, конкретное содержание статьи.
Количество кликов: Тип номера, количество кликов по статье.
(3) Канбан-список (используется для хранения информации о канбане):
ID: Автоматический номер. Аналогично для него также устанавливается индекс.
Имя: Тип текста, название доски.
Модератор: тип текста, идентификатор модератора форума.
Количество тем: числовой тип, количество тем, включенных в доску.
(4) Таблица тем (используется для хранения информации о темах):
ID: автоматически нумеровать и устанавливать для нее индекс.
Название: текстовый тип, указывающий название темы.
Канбан-доска: тип номера из списка канбан-доски, указывающий доску Канбан, к которой принадлежит тема.
Количество статей: Тип номера, количество статей, содержащихся в теме.
Все таблицы спроектированы, но проект базы данных еще не завершен, поэтому нам все еще необходимо установить связи между таблицами, чтобы база данных могла выполнять некоторые проверки корреляции во избежание ошибок в данных. Еще одним преимуществом установления связей между таблицами является то, что с его помощью можно легко создавать сложные запросы JOIN.
Обычно, когда мы работаем с базой данных в ASP, мы используем запросы, сгенерированные во время выполнения, которые затем передаются в базу данных для интерпретации и выполнения. И здесь мы собираемся использовать хранимые запросы. Хранимые процедуры имеют больше преимуществ, чем запросы времени выполнения.
Он хранится в базе данных и не зависит от программного кода ASP, что упрощает его создание и изменение, а эффективность запросов выше и быстрее. Его можно отладить, а затем использовать на странице ASP, что позволяет избежать многих проблем. Программный код ASP, использующий сохраненные запросы, легче читать и изменять. Возможно, всех раздражает использование SQL-запросов в ASP, особенно запятых, точек с запятой и т. д., которые могут вызвать ошибки, если вы не будете осторожны. После использования хранимых запросов вам не придется беспокоиться об этих проблемах. Конечно, есть некоторые вещи, на которые следует обратить внимание при использовании предварительно сохраненных программ. Позже я объясню, как их использовать. Создать хранимую программу в ACCESS очень легко, поэтому я не буду здесь больше об этом говорить. Здесь я привожу только программный код оператора SQL для каждого запроса.
Я сохранил все запросы, которые будут использоваться в базе данных, как предварительно сохраненные программы. Основные из них следующие:
(1) Запрос статей по идентификатору:
ВЫБЕРИТЕ таблицу тем. Название как имя темы, имя канбана как имя канбана. Оглавление.*
FROM таблицы тем INNER JOIN (таблица содержимого INNER JOIN списка канбанов ON таблица содержимого.ID канбана = список канбана.ID) ON таблица темы.ID = таблица содержимого.ID темы
WHERE (((content table.ID)=[articleid]));
(2) Запрос пароля модератора:
ВЫБРАТЬ Канбан-список. Владелец доски, таблица авторов. Пароль.
FROM таблица автора INNER JOIN список канбана ON таблица автора.ID = список канбана.владелец доски
WHERE (((kanban list.ID)=[id];
(3) Запросить автора:
ВЫБРАТЬ таблицу авторов.*
ИЗ таблицы автора
WHERE (((author table.ID)=[id]));
(4) Список опубликованных статей:
SELECT [Таблица контента].[ID], [Таблица контента].[Название], [Таблица контента].[ID автора ] AS автор, [оглавление].[дата], [оглавление].[рекомендация], [оглавление].[количество кликов] AS количество кликов.
ИЗ оглавления
WHERE ((([Оглавление].[Идентификатор темы])=[Индекс темы]) И (([Оглавление].[Опубликовано])=True
Список неопубликованных статей:
ВЫБРАТЬ Оглавление.ИД КАК Статья id, тема table.ID AS id темы, тема table.title AS тема, содержимое table.title AS заголовок, содержимое table.author ID AS автор, содержимое table.date AS дата
FROM table table. INNER JOIN table content ON theme table.ID = content table.topic ID.
WHERE (((Таблица контента. Опубликовать)=False) AND ((Таблица контента. Идентификатор канбана)=[boardid]));
(5) Список тем:
ВЫБРАТЬ Таблица тем.*, Имя списка Канбан КАК Имя Канбана.
ИЗ списка канбана ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ к таблице тем НА список канбанов.ID = таблица тем.канбан
WHERE (((topic table.kanban)=[boardIndex]));
Также есть несколько запросов, поскольку большинство из них похожи, я не буду перечислять их по одному.
В приведенном выше операторе запроса вы можете увидеть некоторые элементы, окруженные «[» и «]», которые являются параметрами запроса. Значение параметра необходимо указать во время выполнения, а затем значение параметра вносится в оператор запроса, прежде чем он сможет быть выполнен. Еще следует отметить, что при создании запросов INNER JOIN вам необходимо добавить связь между таблицами в представление дизайна, иначе оператор запроса INNER JOIN не может быть сгенерирован автоматически.
На этом проектирование базы данных завершено, и следующая работа — ASP.
2. Создание
1. Чтобы создать основную форму
, вы должны сначала предоставить форму, позволяющую пользователям сети вводить регистрационную информацию. Это HTML-содержимое, и отложим его в сторону. Давайте подробнее рассмотрим сценарий ASP, реализующий регистрацию.
(1) Измените одинарную кавычку в информации на две одинарные кавычки и добавьте одинарные кавычки до и после
Функция SqlStr(данные)
SqlStr = "'" & Заменить(данные, "'", "''") & "'"
о конечной функции
. Это пользовательская функция, используемая для преобразования одинарных кавычек (') в вводимых пользователем данных в две одинарные кавычки (''). В ASP строка заключена в двойные кавычки, поэтому символ «'» выше представляет строку только с одной одинарной кавычкой. Причина, по которой вам необходимо заменить одну одинарную кавычку двумя одинарными кавычками, заключается в том, что в операторах SQL одинарные кавычки используются для представления переменных. Во избежание путаницы одинарные кавычки в строке должны быть представлены двумя одинарными кавычками. Все вводимые пользователем данные должны быть встроены в оператор SQL в виде переменных, поэтому эта функция очень важна.
(2) Подготовка к хранению
идентификатор = Запрос («идентификатор»)
пароль = Запрос («пароль»)
ник=Запрос("никнейм")
электронная почта = Запрос («электронная почта»)
секс=запрос("секс")
Примечание. Сохранять содержимое формы пользовательского ввода в переменной не обязательно, но это упрощает чтение и запись.
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""then phone=" " else phone=request("phone")
Потому что это содержимое не требуется заполнять, чтобы пользователь не мог ничего вводить и не вызывал ошибки в работе базы данных. , это должно быть Заменить незаполненные поля пробелами.
(3) Установить соединение
Установить conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Примечание. Этот раздел предназначен для установки подключения к базе данных. Имя базы данных — bbssystem.mdb. В этом разделе Единственное, на что следует обратить внимание, это применение функции Server.MapPath. Вообще говоря, всякий раз, когда речь идет о конкретном каталоге, не используйте имя каталога напрямую, а вместо этого используйте функцию Server.MapPath. Правильное использование таких функций, как Server.MapPath и Request.ServerVariables(), может сделать ваше веб-приложение более переносимым.
Set cmd = Server.CreateObject("ADODB.Command")
(4) Запросить, существует ли уже автор
Установите cmd.ActiveConnection = conn
cmd.CommandText = "Автор запроса"
ReDim param(0) 'Объявляем массив параметров
param(0) = CStr(id) ' Cint нельзя игнорировать
Set rs = cmd.Execute(,param)
Примечание. Этот раздел используется для выполнения сохраненной программы. Существует множество способов выполнения запросов в ADO, но для хранимых процедур можно использовать только объект Command. Сначала создайте объект Command с именем cmd, затем задайте для объекта соединения conn свойство ActiveConnection объекта cmd, задайте имя выполняемого запроса «Автор запроса» для свойства CommandText, а затем присвойте значения свойству CommandText. параметры запроса. Мы объявили массив параметров param(0), поскольку в запросе «Автор запроса» есть только один параметр, поэтому массив состоит только из одного компонента. Обычно, если в запросе несколько параметров, необходимо объявить массив параметров с соответствующим количеством компонентов. А порядок появления параметров соответствует порядку компонентов в массиве. В процессе использования запроса параметров особое внимание следует обратить на то, что типы параметров должны строго совпадать, иначе возникнет ошибка, поэтому без приведенной выше функции преобразования типов CStr() не обойтись.
если нет (rs.eof или rs.bof), то
response.write "Ошибка, введенный вами идентификационный номер занят, попробуйте другой!"
еще
sql = "Вставить в таблицу авторов (идентификатор, псевдоним, адрес электронной почты, пароль, имя, школа, отдел, пол, номер телефона) Значения("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(никнейм) & ","
sql = sql & SqlStr(электронная почта) & ","
sql = sql & SqlStr(пароль) & ","
sql = sql & SqlStr(имя) & ",&", "
sql = sql & SqlStr(пол) & ","
sql = sql & SqlStr(телефон) & ")"
conn.Execute sql
использует оператор SQL Insert для вставки данных в базу данных. На самом деле этот запрос тоже можно сделать в заранее сохраненной программе и поместить в базу данных. Я немного поленился:-) Однако в сравнении тоже можно увидеть преимущества заранее сохраненной программы. проблематично писать запрос во время выполнения.
2. Создайте модуль отображения статей.
Как упоминалось ранее, конкретная статья принадлежит доске объявлений и основной части. Поэтому при отображении статей вам придется просмотреть две страницы списка доски объявлений и списка тем, прежде чем вы сможете получить список статей по определенной теме.
(1) Страница отображения списка плат:
<html>
<голова>
<заголовок>Список канбан</title>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) Откройте соединение и отобразите список канбана.
< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "выбрать * из списка Канбан"
установить rs=conn.execute(sql)
%>
Примечание. Простой SQL-запрос возвращает всю информацию о канбан-доске в набор записей RS. Следующая задача — отобразить записанный контент и создать ссылку для отображения темы доски на соответствующем названии доски.
<body bgcolor="#FFFFFF">
< h2 align="center">Список Канбан</h2>
<ширина таблицы="60%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
< td height="35" width="25%">Имя панели сканирования</td>
<td height="35" width="21%">Модератор</td>
<td height="35" width="23%">Количество тем</td>
<td height="35" width="31%">Вход модератора</td>
</tr>
Примечание. Эта часть предназначена для отображения заголовка каждого столбца таблицы. Здесь я не использую унифицированную функцию для отображения содержимого записи RS, поскольку это позволяет лучше контролировать внешний вид и стиль таблицы. . Использование Хотя вставать немного неудобно, это более гибко.
<%
делать
boardid = rs («идентификатор»)
boardname=rs("имя")
boardmanager=rs("Владелец доски")
response.write "<tr><td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
Примечание. Эта строка Важно отметить, что при нажатии на название каждой доски вы можете перейти на страницу, отображающую тему доски. Программный код выглядит немного громоздким. Я разберу его и объясню вам, и вы поймете. После щелчка браузер запрашивает страницу qBoard.asp с параметром boardid, который представляет идентификационный номер отображаемой платы. Вопросительный знак (?) используется для разделения страницы запроса и параметра. Boardid — установленная ранее переменная, содержащая идентификационный номер соответствующей платы. Это соединение также содержит еще один параметр boardname, который используется для передачи имени платы на страницу qBoard.asp. Используйте «&» для разделения нескольких параметров. Этот параметр не является обязательным. Он передается во избежание повторного использования boardid для запроса имени платы в qBorad.asp. Вообще говоря, операции с базой данных следует использовать как можно меньше, что может повысить производительность страниц ASP. Поскольку инструкция Response.Write использует строки в качестве параметров, между указанными выше строками и переменными используется символ соединения «&». Окончательный результат объяснения страницы ASP должен быть таким:
<td>< a href=qBoard.asp?boardid=1&boardname=Системная плата>Системная плата</a><td>.
response.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
response.write "< td>" &rs("количество тем") & "< /td>"
response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">Обработка платы< /a></td>< /tr>"
Примечание. В этой таблице, помимо соединения, отображается Содержимое темы канбана, также есть часть запроса мозаики и часть обработки службы доски. Запрос модератора может быть реализован через qAuthor.asp. Он просто извлекает информацию об авторе из базы данных и отображает ее. Сказал. Обработка доски осуществляется страницей Managerlogin.asp. Это относится к модулю обзора статей, о котором я подробно объясню позже.
rs.movenext
цикл до rs.eof
%>
Примечание. В цикле do... отображаются все сообщения в наборе записей.
</таблица>
<div align="center"><br>
Нажмите на название доски, чтобы просмотреть список тем, щелкните имя владельца доски, чтобы просмотреть сообщения владельца доски.
</дел>
</тело>
</html>
<%
установить rs=ничего
конн.закрыть
установить соединение = ничего
%>
(3) Создайте страницу qBaord.asp:
<%
boardid=request("boardid") 'Получить идентификационный номер доски, переданный с предыдущей страницы
Установить conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Установить cmd = Server.CreateObject("ADODB.Command")
Установите cmd.ActiveConnection = conn
cmd.CommandText = "Список тем"
ReDim param(0) //Примечание: объявить массив параметров
param(0) = CLng(boardid)//Примечание: CLng нельзя игнорировать
Установите rs = cmd.Execute(,param)
%>
<html>
<голова>
<название>Список тем</название>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</голова>
<body bgcolor="#FFFFFF">
< h1 align="center"><%=rs("kanban name")%>Список тем доски</h1>
<ширина таблицы="80%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td width="89%" height="21">Тема</td>
<td width="11%" height="21">Количество статей</td>
</тр>
< %
делать
themeid=rs("id")
имя_темы=rs("название")
sum=rs("количество статей")
response.write "< tr>< td><a href=qtopic.asp?topicid=" & Topicid& "&boardname=" & Boardname& ">" & TopicName &"< /a>< /td>"
response.write "< td>" &sum & "< /td>< /tr>"
rs.movenext
цикл до rs.eof
%>
</таблица>
</тело>
</html>
Примечание. В qBoard.asp перечислены все темы определенного форума. Щелкнув название темы, вы попадете в список статей соответствующей темы. Этот список реализуется сценарием ASP qTopic.asp. Программный код Qtopic.asp по сути почти такой же, как и qBoard.asp, но есть различия в их деталях, и я не собираюсь здесь вдаваться в подробности.
(4) Щелкнув заголовок статьи в списке статей, вы перейдете на страницу просмотра содержимого статьи article.asp:
<%
идентификатор статьи = запрос («идентификатор статьи»)
Установить conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Установить cmd = Server.CreateObject("ADODB.Command")
Установите cmd.ActiveConnection = conn
cmd.CommandText = "Запросить статьи по идентификатору"
ReDim param(0) 'Объявление
param(0) = CLng(articleid) ' Cint нельзя игнорировать
Установите rs = cmd.Execute(,param)
автор = rs («авторид»)
title=rs("титул")
данные = rs («Дата»)
тариф=rs("рекомендуемая степень")
boardid=rs("канбанид")
Topicid=rs("Топицид")
boardname=rs("имя доски")
themename=rs("название темы")
контент = rs («контент»)
content=replace(content,vbCrlf,"</p><p>")
content="< p>" и content& "< /p>"
Примечание. На это следует обратить внимание. Поле содержимого содержит текст типа заметки, который может содержать символы новой строки. При отображении HTML символ новой строки (то есть константа vbCrlf) должен быть заменен символом абзаца HTML. Таким образом, связь между абзацами не нарушит исходный формат ввода. Если вы хотите улучшить дизайн, вы можете использовать CSS для сброса тега <P> и установить его атрибут test-indent, чтобы обеспечить пробел в начале каждого абзаца.
(5) Добавьте единицу к количеству кликов.
sql="Обновить таблицу содержимого. Установить количество кликов=количество кликов+1Where ID=" и идентификатор статьи
conn.execute sql
Примечание. Здесь имеется оператор SQL. При отображении страницы поле количества кликов в соответствующей таблице будет увеличено на единицу, чтобы можно было подсчитать и ранжировать количество просмотров статьи. При выполнении оператора статьи я обнаружил, что: изначально в операторе SQL имя встроенной переменной должно быть выделено одинарными кавычками, но я не добавлял здесь одинарные кавычки к переменнойarticleid, и она действительно прошла, и я пишу вот так Раньше всегда вызывало ошибки. Интересно, связано ли это с новой версией ADO.
установить cmd=ничего
%>
<html>
<голова>
<title>Документ без названия</title>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</голова>
<body bgcolor="#E9E9E4">
<ширина таблицы="89%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td>Автор:<font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>Дата публикации: < цвет шрифта="#FF3333"><%=data%>< /font>
Канбан-доска:< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>Рекомендация владельца доски:< цвет шрифта="#FF3333">#rate#</font>< /td>
</тр>
<tr bgcolor="#CCCCCC">
<td>Заголовок:<font color="#FF3333"><%=title%>
Тема: < a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</тр>
<tr valign="top">
<тд>
<час>
< цвет шрифта="#FF3366">Содержимое статьи: < /font>< br>
<бр>
< цвет шрифта=синий>< %response.writecontent%>< /font>
<бр>
<бр>
</тд>
</тр>
<tr valign="top">
<td высота="18">
<ширина таблицы="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<тр>
< td width="0%"> < /td>
<td width="65%">Об этой теме<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">Оставить комментарий< /a></td>
Эта связь позволяет пользователям сети высказать свое мнение по теме этого комментария. Об этом пойдет речь в следующем модуле, поэтому я не буду упоминать об этом здесь.
</тр>
</таблица>
</тд>
</тр>
</таблица>
</тело>
</html>
< %
установить rs=ничего
конн.закрыть
установить соединение = ничего
%>
На этом часть отображения статьи также завершена. Давайте посмотрим, как реализована часть публикации статей.
3. Создайте часть публикации статьи.
Модуль публикации статьи имеет только две страницы: одна — это submit.asp, упомянутый ранее, который используется для предоставления формы ввода, а другая — subresult.asp, которая используется для обработки формы. вход. Предыдущая страница очень проста. По сути, это HTML-форма. Давайте посмотрим на содержимое subresult.asp:
<html>
<голова>
<title>Опубликовать статью</title>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</голова>
<body bgcolor="#FFFFFF">
<%
автор = запрос («автор»)
пароль = запрос («пароль»)
themeid = запрос («topicid»)
boardid=request("boardid")
контент = запрос («контент»)
title=request("title")
Примечание. В этом разделе содержимое таблицы, отправленное в submit.asp, извлекается и помещается в соответствующую переменную.
<html>
<голова>
<title>Опубликовать статью</title>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</голова>
<body bgcolor="#FFFFFF">
< %
автор = запрос («автор»)
пароль = запрос («пароль»)
themeid = запрос («topicid»)
boardid=request("boardid")
контент = запрос («контент»)
title=request("title")
(1) Запросить, существует ли автор
cmd.CommandText = "выберите * из таблицы авторов, где id='" &author &"'"
Установите rs = cmd.Execute()
(2) Проверьте разрешения
cmd.CommandText = "выбрать * из таблицы авторов, где id='" &author &"'"
Set rs = cmd.Execute()
Примечание. В этом разделе проверяются права автора и соответствующим образом обрабатываются ошибки, если учетная запись не существует или пароль неверен. Здесь вы можете увидеть использование ответа.end, который используется для завершения текущего сценария ASP. В сочетании с операторами if можно обрабатывать ожидаемые ошибки в программе. В хорошем веб-приложении обработка ошибок имеет важное значение.
(3) Замените одинарную кавычку в информации на две одинарные кавычки и добавьте одинарные кавычки до и после
Функция SqlStr(данные)
SqlStr = "'" & Заменить(данные, "'", "''") & "'"
Конечная функция
'Запись в базу данных
sql = "Вставить в таблицу содержимого (идентификатор доски, идентификатор темы, идентификатор автора, заголовок, содержимое)Значения( "
sql = sql & SqlStr(topicid) & ","
sql = sql & SqlStr(boardid) & ","
sql = sql & SqlStr(автор) & ","
sql = sql & SqlStr(title) & ","
sql = sql & SqlStr(content) & ")"
conn.Выполнить sql
%>
<h2>Статья отправлена в базу данных и ее можно увидеть после проверки модератором <h2>
</тело>
</html>
На данный момент статья сохранена в базе данных. Однако оно не может быть отображено сразу и требует одобрения модератора. Далее давайте взглянем на управленческую часть форума.
4. Административная часть форума
является ядром нашего форума, но в ее реализации нет ничего особенного. Это все те же старые вещи: обработка форм, запросы к базе данных и использование ASP для их органического объединения. При входе в режим рецензирования статьи (упоминавшаяся ранее обработка доски) самым важным должно быть подтверждение личности модератора. Давайте посмотрим на страницу входа модератора:
<%
boardid=request("boardid")
(Примечание. Boardid передается при подключении к этой странице и является идентификатором обрабатываемой платы. Только благодаря этому мы можем узнать, какая доска обрабатывается.)
Set conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Установить cmd = Server.CreateObject("ADODB.Command")
Установите cmd.ActiveConnection = conn
cmd.CommandText = "Запрос пароля модератора"
Параметр изменения размера (0)
param(0) = CLng(boardid) //Примечание: CLng нельзя игнорировать
Установите rs = cmd.Execute(,param)
boardmanager=rs("Владелец доски")
установить cmd=ничего
%>
<html>
<голова>
<title>Документ без названия</title>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</голова>
<body bgcolor="#FFFFFF">
< p>Только владелец доски < %=boardmanager%> может войти в это место </p>
<p>Пожалуйста, введите проверочный пароль и для обеспечения аутентификации включите файлы cookie в вашем браузере. </п>
<form Method="post" action="managerloginrest.asp">
<тип ввода="пароль" имя="пароль">
< тип ввода="скрытый" имя="boardid"value=< %=boardid%>>
<тип ввода="отправить" имя="Отправить"значение="ОК">
</форма>
Примечание. Эта страница предназначена только для входа в систему. После получения пароля, введенного Mozhu, он не может выполнить проверку. Вместо этого работа по проверке будет выполнена на следующей странице. Фактически работу по вводу и проверке пароля можно выполнить на одной странице, но структурное расположение программного кода вызывает некоторые хлопоты.
</тело>
</html>
<%
установить rs=ничего
конн.закрыть
установить соединение = ничего
%>
Теперь, когда идентификатор модератора и введенный пароль получены, выполняется следующая работа по проверке: Managerloginrest.asp. Он принимает содержимое формы в приведенном выше файле и выполняет соответствующую обработку:
<%
response.buffer=true
Примечание. Установите буфер, чтобы его можно было использовать. Вообще говоря, этот элемент следует добавлять в заголовок каждой страницы ASP, что может повысить производительность страницы ASP. После открытия буфера в ASP есть некоторые соответствующие специальные применения, о которых будет упомянуто позже.
boardid=request("boardid")
пароль = запрос («пароль»)
Установить conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Установить cmd = Server.CreateObject("ADODB.Command")
Установите cmd.ActiveConnection = conn
cmd.CommandText = "Запрос пароля модератора"
ReDim param(0) 'Объявление
param(0) = CLng(boardid)//Примечание: CLng нельзя игнорировать
Установите rs = cmd.Execute(,param)
boardmanager=rs("Владелец доски")
если пароль<>rs("пароль"), то %>
<html>
<голова>
<title>Аутентификация</title>
<мета http-equiv="Content-Type"content="text/html; charset=GB2312">
</голова>
<body bgcolor="#FFFFFF">
Неправильный пароль</тело>
</html>
< %
еще
session("beenthere")=boarded
Примечание. Использование сеанса для сохранения личности модератора требует, чтобы файлы cookie клиентского браузера были включены. Потому что сессия реализуется через куки. Здесь присвойте идентификатор доски переменной сеанса bethere, указывая, что модератор прошел аутентификацию личности. На каждой последующей странице обработки версии проверяйте, соответствует ли Doesthere соответствующему идентификатору версии.
url="boardmanager.asp?boardid="& boardid
к URL-адресу Response.redirect
: Когда я впервые изучал ASP, меня всегда смущал метод response.redirect, и я был им недоволен. Теперь позвольте мне рассказать вам некоторые методы. Прежде чем использовать его, вы должны передать response.buffer=true, чтобы страница ASP могла использовать буфер. В это время, прежде чем ASP интерпретируется в программный код HTML, он помещается в буфер и не отправляется непосредственно в клиентский браузер. Еще одна вещь, которую необходимо знать: перед использованием response.redirect в клиентский браузер нельзя отправлять реальный код программы HTML, иначе произойдет ошибка. Конечно, есть обходные пути. Если код программы HTML был интерпретирован до ответа.redirect, вы можете использовать метод response.clear для очистки буфера, а затем использовать его для сброса.
конец, если
%>
Примечание. Ниже указана цель сброса после прохождения вышеуказанной проверки подлинности: boardmanager.asp. В нем будут перечислены все статьи, которые были обработаны.
<%
boardid=request("boardid")
if session("beenthere")<>boardidthen response.redirect "forums.asp"
Примечание. Здесь проверяется личность модератора, поскольку он был отмечен в браузере Bamboo с помощью файлов cookie, и теперь мы можем передать вид. Давайте определим модератор. Если теги не совпадают, происходит возврат на исходную страницу входа через response.redirect. Если куки-файл браузера модератора не включен, значение Seesion («beenthere») будет пустым, и эта страница также не будет доступна.
Установить conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Установить cmd = Server.CreateObject("ADODB.Command")
Установите cmd.ActiveConnection = conn
sql="выберите имя из списка досок, гдеid=" и boardid
установить rs=conn.execute(sql)
boardname=rs("имя")
cmd.commandtext="Список неопубликованных статей"
Параметр изменения размера (0)
param(0) = CLng(boardid)//Примечание: Clng нельзя игнорировать
Установите rs = cmd.Execute(,param)
установить cmd=ничего
%>
<html>
<голова>
<название>Обработка публикации</title>
< Meta http-equiv = "content-type" content = "text/html; charset = gb2312">
</голова>
< Body bgcolor = "#ffffff" >
< H1 align = "center" ><%= имя pardname%> государственное управление < /h1 >
< HR >
< %
Если rs.eof или rs.bof, то response.write "< H2 > нет статей для обработки </h2 >"
ответ.конец
%>
ПРИМЕЧАНИЕ. Если сети -сети не публикуются новые статьи, это даст соответствующую подсказку и использовать ответ.
< Таблица ширина = "90%" border = "0" cell -spacing = "0" cellpadding = "0" align = "center" > >
< tr bgcolor = "#ffffcc" >
< TD Ширина = "40%" Высота = "20" > Тема </TD >
< TD ширина = "40%" height = "20"
< TD Ширина = "8%" Высота = "20" > Автор </TD >
< TD ширина = "12%" Height = "20" > Дата </TD >
</тр>
< %
делать
TOMAID = RS ("TOMAID")
articleid = rs ("articleid")
data = rs ("date")
datastr = cstr (год (data)) & "-" & cstr (месяц (data)) и "-" & cstr (day (data))
Автор = RS ("Автор")
articlename = rs ("название")
topicname = rs ("тема")
response.write "< tr >< td >< a href = qtopic.asp? TapeId =" & TapeId & ">" & TapeName & "< /A >< /TD >"
response.write "< td >< href = ManageArticle.asp? articleId =" & articeId & "& boodid =" & boodid & ">" & articlename & "< /a >< /td >"
response.write "< td >< a href = qauthor.asp?
response.write "< td >" & datastr & "< /td >< /tr >"
rs.movenext
петля до Rs.eof
%>
</таблица>
</html >
< %
установить rs=ничего
Conn.close
установить conn = ничего
%>
</Body >
Когда вы нажимаете на ссылку соответствующей статьи, вы введете страницу обработки статьи ManageArticle.asp:
< %
articleid = request ("articleid")
boardid = request ("boardid")
Если Session ("beenthere") <> response boodithen.redirect "forums.asp"
Установить conn = server.createObject ("adodb.connection")
conn.open "driver = {microsoft accessdriver (*.mdb)}; dbq =" & server.mappath ("bbssystem.mdb")
Установить cmd = server.createObject ("adodb.command")
Установить cmd.ActiveConnection = conn
cmd.commandtext = "Query статьи от ID"
Redim Param (0)
param (0) = clng (articeid) // Примечание: CLNG не может быть проигнорирован
Установить RS = cmd.execute (, param)
Автор = RS ("Autorid")
title = rs ("title")
data = rs ("date")
СТИДА = RS («Рекомендуемая степень»)
BOADID = RS ("Канбанид")
TOMAID = RS ("TOMAID")
boardname = rs ("имя доски")
topicname = rs ("имя темы")
Content = rs ("Content")
Содержание = Заменить (Содержание, VBCRLF, "</P >< P >")
Content = "< P >" & Content & "< /P >"
Установите cmd = ничего
%>
< HTML >
<голова>
< Название > без названия документ </заголовок >
< Meta http-equiv = "content-type" content = "text/html; charset = gb2312">
</голова>
< Body bgcolor = "#e9e9e4" >
< Таблица ширина = "89%" border = "0" cell -spacing = "0" cellpadding = "0" align = "center" > >
< tr bgcolor = "#cccccc" >
< TD > Автор: < font color = "#ff3366" >< a href = "qauthor.asp? < font color = "#ff3333" ><%= data%>< /font >
Канбанская плата: < font color = "#ff3333" >< a href = "Qboard.asp? BODID = < %= BOADID %>" >< %= BADNAME %>< /A >< /FONT > РЕКОМЕНДАЦИЯ ВЛАДЕЛЕ Font Color = "#FF3333">#СКОРОСТЬ#< /FONT >< /TD >
</тр>
< tr bgcolor = "#cccccc" >
< TD > Название: < Font Color = "#FF3333" ><%= заголовок%>
Тема: < a href = "qtopic.asp? TapeId = <%= TOMAID%>" > <%= TAPENAME%>< /A > /FONT >< /TD >
</тр>
< tr valign = "top" >
< TD >
< HR >
< Font Color = "#ff3366" > Содержание статьи: < /font >< Br >
<бр>
< Цвет шрифта = синий >< %response.writecontent %>< /font >
<бр>
< HR >
</тд>
</тр>
< tr valign = "top" >
< Form Method = "post" action = "ManagerEsult.asp" >
< TD высота = "18" >
< Таблица ширина = "100%" border = "1" cell -spacing = "1" cellpadding = "1" >
<тр>
< TD ширина = "29%">
< Div Align = "справа" >
< Type Type = "hidden" name = "boardid" value = "< %= boardid %>" >
< Type Type = "hidden" name = "tomaid" value = "< %= tomaid %>" >
< Type Type = "hidden" name = "articleID" value = "< %= статья %>" >
Обработка статьи: < /div >
</тд>
< TD ширина = "12%" BorderColor = "#0066666"> Удалить:
< Ввод типа = "radio" name = "Manage" value = 1 >
</тд>
< TD ширина = "30%" Bordercolor = "#0066666"> опубликовано:
< Ввод типа = "radio" name = "Manage" value = 2 >
Уровень рекомендации < Выберите имя = "SELECT" >
< Значение опции = "1" > 1 </опция >
< Значение опции = "2" > 2 </опция >
< Значение опции = "3" Выбранное > 3 </Опция >
< Значение опции = "4" > 4 </опция >
< Значение опции = "5" > 5 </опция >
</Выберите >
</тд>
< TD ширина = "20%" Bordercolor = "#0066666"> Процесс позже:
< Ввод типа = "radio" name = "Manage" value = 3 >
</тд>
< TD ширина = "9%" >
< Ввод типа = "Отправить" name = "отправить" value = "ok" >
</тд>
</тр>
</таблица>
</тд>
</форма>
</тр>
</таблица>
</тело>
</html >
< %
установить rs=ничего
Conn.close
установить conn = ничего
%>
Примечание. Эта страница в основном такая же, как octade.asp в модуле отображения статьи.
Затем нам необходимо изменить соответствующие части базы данных в соответствии с процессом обработки модератора.
<%Ответ. Buffer = true%>
< HTML >
<голова>
< Название > Обработка статьи </заголовок >
< Meta http-equiv = "content-type" content = "text/html; charset = gb2312">
</голова>
< Body bgcolor = "#e9e9e4" >
< %
articleid = request ("articleid")
boardid = request ("boardid")
TOMAID = запрос ("TOMAID")
Управление = запрос ("Управление")
'Примите содержание формы
response.write Manage 'Show Buzhu ID
Если Session ("beenthere") <> response boodithen.redirect "forums.asp"
Установить conn = server.createObject ("adodb.connection")
conn.open "driver = {microsoft accessdriver (*.mdb)}; dbq =" & server.mappath ("bbssystem.mdb")
Согласно операции модератора на предыдущей странице, соответствующая обработка будет выполнена ниже.
Если clng (request ("Manage")) = 1 then
SQL = "Удалить из таблицы контента, где id =" & articeid
Conn.Execute SQL
Ответ. Написание "< H1 > Статья была удалена </H1 >"
Ответ. write "< a href = > назад </a>"
elseif clng (request ("Manage")) = 2Then
SQL = "Набор таблицы содержимого обновления publish = true whened =" & articeid
Conn.Execute SQL
SQL = "Обновление темы Таблицы Набор Статьи = Количество статей+1 туда идентификатор =" & tapeId
Conn.Execute SQL
response.write "< H1 > статья была опубликована </H1 >"
Ответ. write "< a href = > назад </a>"
еще
response.clear
response.redirect "boardmanager.asp? boardid =" & seded
конец, если
%>
</тело>
</html >
< %
Conn.close
установить conn = ничего
%>
После вышеуказанных шагов все детали в основном завершены. Если вы хотите иметь возможность его использовать, вам необходимо приложить больше усилий в проектирование макета, проверку данных клиента и т. Д. Но это все HTML -контент и имеет мало общего с ASP, поэтому я не буду вдаваться в подробности здесь.