Prefácio: Hoje em dia existem fóruns em toda parte na Internet, mas me pergunto se você já se deparou com tal situação: procurar o conteúdo que deseja nas informações confusas da discussão é uma coisa muito demorada e trabalhosa. não quero mais ir a nenhum fórum. Então, podemos adicionar uma função de auditoria ao conteúdo do fórum do nosso site? Ou seja, todos os artigos postados por internautas no fórum não serão exibidos imediatamente. Eles devem ser revisados pelo webmaster ou moderador. Se forem considerados valiosos e necessários para serem recomendados a outros internautas, serão publicados. Caso contrário, exclua-o para evitar desperdício de espaço e fazer com que pareça uma área de destaque. Dessa forma, seu fórum pode fornecer um conteúdo mais claro e benéfico do que os fóruns comuns. Colocá-lo em seu site deve atrair mais internautas para visitá-lo. Essa ideia certamente pode ser concretizada, e apresentarei brevemente como fazê-la a seguir.
Nota: Este artigo é adequado para leitores que possuem um certo conhecimento de banco de dados ACCESS, HTML e ASP.
1. Análise da estrutura do fórum
Através da análise dos requisitos funcionais acima, podemos dividir a produção do fórum em quatro partes:
(1) Módulo de registro e gerenciamento de internautas: Como o webmaster ou moderador é introduzido, ele deve ser capaz de controlá-lo no fórum Autenticar. A função deste módulo é gerenciar internautas cadastrados e fornecer consultas relevantes. Por exemplo, consulte todos os artigos publicados por um autor específico, consulte os dez internautas que publicaram mais artigos, etc. Caso o seu fórum não seja muito grande, este módulo pode ser omitido para ter apenas a função de autenticação do moderador, e retirar as partes sobre cadastro e consulta.
(2) Módulo de exibição de artigos: exibe todos os artigos que foram revisados pelos moderadores e considerados dignos de recomendação.
(3) Módulo de publicação de artigos: Fornece um local para os internautas registrados publicarem suas opiniões e aguardarem a revisão dos moderadores após a publicação.
(4) Módulo de revisão de artigos: Os moderadores processam todos os artigos que foram publicados no site, mas não foram revisados, e decidem se irão publicá-los ou excluí-los.
Após compreender os requisitos funcionais específicos, você pode iniciar o design do fórum de acordo com o módulo. É claro que esses módulos apenas dividem funcionalmente a estrutura do fórum e não podem ser projetados de forma totalmente independente. Para aplicações menores, não há necessidade de um design modular completo. Pode ser mais fácil escrever o código do programa diretamente com um bom planejamento.
Geralmente existem duas maneiras de implementar um fórum: usando arquivos ou bancos de dados. Relativamente falando, usar um banco de dados é mais simples e eficiente, pode proporcionar melhor controle sobre o fórum e também fornecer alguma verificação e proteção para os dados. Aqui estou usando o banco de dados ACCESS. Para aplicativos gerais de pequeno e médio porte, o ACCESS deve ser capaz de fazer o trabalho.
Pela análise acima, podemos saber que deveria haver quatro tabelas. Abaixo apresento a estrutura de cada tabela.
(1) Tabela Autor (usada para armazenar informações do autor):
ID: Tipo de texto, obrigatório. É o codinome de um internauta.
Senha: Tipo de texto, obrigatório.
Apelido: Tipo de texto, obrigatório.
E-MAIL: Tipo de texto, obrigatório.
Posição: Tipo numérico, obrigatório. -1 representa internautas comuns, 0 representa webmasters. Números maiores que 0 representam moderadores.
Número de artigos: tipo numérico, obrigatório. O número total de artigos publicados por internautas.
Nome: tipo de texto, opcional.
Gênero: tipo de texto, opcional.
Telefone: Tipo de texto, opcional.
(2) Tabela de conteúdo (usada para armazenar conteúdo específico do artigo e informações relacionadas):
ID: Numere e indexe automaticamente para acelerar a pesquisa.
ID Kanban: tipo numérico, da lista Kanban, indicando a qual quadro Kanban o artigo pertence.
ID do Tópico: Tipo numérico, proveniente da tabela de tópicos, indicando o tópico ao qual o artigo pertence.
ID do autor: tipo de texto, da tabela de autores, indicando o autor do artigo.
Data: Tipo data/hora, o valor inicial predefinido é a função NOW(), que assume automaticamente como valor a hora atual do sistema.
Título: Tipo de texto. O título do artigo.
Publicar: tipo Sim/Não, “Verdadeiro” significa que o artigo foi revisado e pode ser publicado; “Não” significa que o artigo ainda não foi revisado;
Recomendação: Tipo numérico, o grau de recomendação do artigo.
Conteúdo: Tipo de observação, conteúdo específico do artigo.
Número de cliques: Tipo de número, o número de cliques no artigo.
(3) Lista Kanban (usada para armazenar informações sobre o kanban):
ID: Número automático. Da mesma forma, um índice também é definido para ela.
Nome: Tipo de texto, o nome do quadro.
Moderador: Tipo de texto, ID do moderador do fórum.
Número de Tópicos: Tipo numérico, número de tópicos incluídos no quadro.
(4) Tabela de tópicos (usada para armazenar informações sobre tópicos):
ID: Numere automaticamente e defina um índice para ela.
Título: Tipo de texto, indicando o nome do tópico.
Quadro Kanban: Tipo de número, da lista do quadro Kanban, indicando o quadro Kanban ao qual o tópico pertence.
Número de artigos: Tipo de número, quantidade de artigos contidos no tópico.
Todas as tabelas foram desenhadas, mas o desenho do banco de dados ainda não está completo, então ainda precisamos estabelecer relacionamentos entre as tabelas, para que o banco de dados possa realizar algumas verificações de correlação para evitar erros de dados. Outro benefício de estabelecer relacionamentos entre tabelas é que consultas JOIN complexas podem ser facilmente estabelecidas por meio dele.
Normalmente quando operamos um banco de dados em ASP, utilizamos consultas geradas durante a execução, que são então passadas ao banco de dados para interpretação e execução. E aqui vamos usar consultas armazenadas. Os procedimentos armazenados têm mais vantagens do que as consultas em tempo de execução.
Ele é armazenado no banco de dados e é independente do código do programa ASP, facilitando sua criação e modificação, e a eficiência da consulta é maior e mais rápida. Pode ser depurado e posteriormente utilizado na página ASP, o que pode evitar muitos problemas. E o código do programa ASP que usa consultas armazenadas é mais fácil de ler e modificar. Talvez todo mundo fique incomodado com o uso de consultas SQL em ASP, principalmente aquelas vírgulas, ponto e vírgula, etc., que podem causar erros se você não tomar cuidado. Depois de usar consultas armazenadas, você não precisa se preocupar com esses problemas. Claro, há algumas coisas que você precisa prestar atenção ao usar programas pré-armazenados. Explicarei como usá-los em detalhes mais tarde. É muito fácil criar um programa armazenado no ACCESS, por isso não falarei mais sobre isso aqui. Aqui forneço apenas o código do programa de instrução SQL para cada consulta.
Salvei todas as consultas para serem usadas no banco de dados como programas pré-armazenados. As principais são as seguintes:
(1) Consultar artigos por ID:
SELECT título da tabela como nome do tópico, lista Kanban. Índice.*
FROM tabela de tópicos INNER JOIN (tabela de conteúdo INNER JOIN lista kanban ON tabela de conteúdo.kanban ID = lista kanban.ID) ON tabela de tópicos.ID = tabela de conteúdo.topic ID
WHERE (((content table.ID)=[articleid]));
(2) Consulta de senha do moderador:
SELECT Kanban list.Board proprietário, autor table.Password
FROM tabela de autores INNER JOIN lista kanban ON tabela de autores.ID = lista kanban.proprietário do quadro
WHERE (((kanban list.ID)=[id];
(3) Consulte o autor:
SELECT author table.*
DA tabela do autor
WHERE (((tabela de autor.ID)=[id]));
(4) Lista de artigos publicados:
SELECT [Tabela de conteúdo].[ID], [Tabela de conteúdo].[Título], [Tabela de conteúdo].[ID do autor]. ] AS autor, [índice].[data], [índice].[recomendação], [índice].[número de cliques] AS número de cliques.
DO índice
=
[Índice do tópico])
E (([Índice].[Publicado])=True));
id, tabela de tópicos.ID AS id do tópico, tabela de tópicos.título AS tópico, tabela de conteúdo.título AS título, tabela de conteúdo.autor ID AS autor, tabela de conteúdo.data AS data
FROM tabela de tópicos INNER JOIN tabela de conteúdo ON tabela de tópicos.ID = tabela de conteúdo.topic ID
WHERE (((Tabela de conteúdo. Publicar)=Falso) AND ((Tabela de conteúdo. ID Kanban)=[boardid])
)
;
FROM lista kanban INNER JOIN tabela de tópicos ON lista kanban.ID = tabela de tópicos.kanban
WHERE (((topic table.kanban)=[boardIndex]));
Existem também algumas consultas, porque a maioria delas são semelhantes, não vou listá-las uma por uma.
Na instrução de consulta acima, você pode ver algumas coisas cercadas por "[" e "]", que são parâmetros de consulta. O valor do parâmetro precisa ser fornecido durante a execução e, em seguida, o valor do parâmetro é trazido para a instrução de consulta antes de poder ser executado. Outra coisa a observar é que ao estabelecer essas consultas INNER JOIN, você precisa adicionar o relacionamento entre as tabelas à visualização de design, caso contrário, a instrução de consulta INNER JOIN não poderá ser gerada automaticamente.
Neste ponto, o design do banco de dados está concluído e o próximo trabalho é ASP.
2. Construção
1. Para construir o formulário principal
, você deve primeiro fornecer um formulário que permita aos internautas inserir informações de registro. Esses são conteúdos HTML e deixe-os de lado. Vamos dar uma olhada no script ASP que implementa o registro.
(1) Altere as aspas simples nas informações para duas aspas simples e adicione aspas simples antes e depois
Função SqlStr(dados)
SqlStr = "'" & Substituir(dados,"'", "''" ) & "'"
a função final
: Esta é uma função personalizada usada para converter aspas simples (') na entrada do usuário em duas aspas simples (''). No ASP, uma string é colocada entre aspas duplas, então o "'" acima representa uma string com apenas uma aspa simples. A razão pela qual você precisa substituir uma aspa simples por duas aspas simples é porque nas instruções SQL, aspas simples são usadas para representar variáveis. Para evitar confusão, as aspas simples na string devem ser representadas por duas aspas simples. Todas as entradas do usuário devem ser incorporadas na instrução SQL como variáveis, portanto esta função é essencial.
(2) Preparação para armazenamento
id=Solicitação("id")
senha=Solicitação("senha")
apelido=Solicitação("apelido")
email=Solicitação("email")
sexo=pedido("sexo")
Nota: Não é necessário salvar o conteúdo do formulário de entrada do usuário em uma variável, mas facilita a leitura e a gravação.
if Request("nome")=""then nome=" " else nome=request("nome")
if Request("phone")=""then phone=" " else phone=request("phone")
Porque esse conteúdo não precisa ser preenchido, para evitar que o usuário não insira nada e cause erros de operação do banco de dados , deve ser Substitua os campos não preenchidos por espaços.
(3) Estabelecer conexão
Definir conexão = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Nota: Esta seção é para estabelecer uma conexão de banco de dados. O nome do banco de dados é bbssystem.mdb. Nesta seção, a única coisa a observar é a aplicação da função Server.MapPath. De modo geral, sempre que um diretório específico estiver envolvido, não use o nome do diretório diretamente, mas sim a função Server.MapPath. Fazer bom uso de funções como Server.MapPath e Request.ServerVariables() pode tornar sua aplicação WEB mais portátil.
Set cmd = Server.CreateObject("ADODB.Command")
(4) Consultar se o autor já existe
Definir cmd.ActiveConnection = conexão
cmd.CommandText = "Autor da consulta"
ReDim param(0) 'Declara array de parâmetros
param(0) = CStr(id) ' Cint não pode ser ignorado
Set rs = cmd.Execute(,param)
Nota: Esta seção é usada para executar o programa armazenado. Há muitas maneiras de executar consultas no ADO, mas para procedimentos armazenados você só pode usar o objeto Command. Primeiro, crie um objeto Command chamado cmd, em seguida, defina o objeto de conexão conn para a propriedade ActiveConnection do objeto cmd, defina o nome da consulta a ser executada "Query Author" para a propriedade CommandText e, em seguida, atribua valores ao parâmetros de consulta. Declaramos um array de parâmetros param(0), pois existe apenas um parâmetro na consulta "Autor da Consulta", portanto o array possui apenas um componente. Geralmente, se houver vários parâmetros em uma consulta, uma matriz de parâmetros com um número correspondente de componentes deverá ser declarada. E a ordem em que os parâmetros aparecem corresponde à ordem dos componentes do array. No processo de utilização da consulta de parâmetros, atenção especial deve ser dada ao fato de que os tipos de parâmetros devem corresponder estritamente, caso contrário ocorrerá um erro, portanto a função de conversão de tipo CStr() acima é indispensável.
se não (rs.eof ou rs.bof) então
response.write "Erro, o número de identificação que você digitou está ocupado, tente outro!"
outro
sql = "Inserir na tabela autor (id, apelido, e-mail, senha, nome, escola, departamento, sexo, número de telefone) Valores("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(apelido) & ","
sql = sql & SqlStr(e-mail) & ","
sql = sql & SqlStr(senha) & ","
sql = sql & SqlStr(nome) & ",&", "
sql = sql & SqlStr(sexo) & ","
sql = sql & SqlStr(telefone) & ")"
conn.Execute sql
usa uma instrução SQL Insert para inserir dados no banco de dados. Na verdade, essa consulta também pode ser feita em um programa pré-armazenado e colocada no banco de dados. Fiquei com um pouco de preguiça :-) Porém, em comparação, você também pode ver os benefícios do programa pré-armazenado. problemático escrever a consulta durante a execução.
2. Construa o módulo de exibição de artigos
Conforme mencionado anteriormente, um artigo específico pertence ao quadro de avisos e ao corpo principal. Portanto, ao exibir artigos, você deve percorrer as duas páginas da lista do quadro de avisos e da lista de assuntos antes de obter a lista de artigos de um tópico específico.
(1) Página de exibição da lista do quadro:
<html>
<cabeça>
<título>Lista Kanban</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) Abra a conexão e exiba a lista Kanban
<%Definir conexão = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "selecione * da lista Kanban"
definir rs = conn.execute (sql)
%>
Nota: Uma consulta SQL simples retorna todas as informações sobre o quadro kanban para o conjunto de registros RS. A tarefa a seguir é exibir o conteúdo gravado e criar um link para exibir o tópico do quadro no nome do quadro correspondente.
<corpo bgcolor="#FFFFFF">
<h2 alinhar="centro">Lista Kanban</h2>
<largura da tabela="60%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td height="35" width="25%">Nome do Scanboard</td>
<td height="35" width="21%">Moderador</td>
<td height="35" width="23%">Número de tópicos</td>
<td height="35" width="31%">Login do moderador</td>
</tr>
Nota: Esta parte é para exibir o título de cada coluna da tabela. Aqui não utilizo uma função unificada para exibir o conteúdo do registro RS, pois isso permite mais controle sobre a aparência e estilo da tabela. . Uso Embora seja um pouco complicado de levantar, é mais flexível.
<%
fazer
id do tabuleiro=rs("id")
nome da placa=rs("nome")
boardmanager=rs("Proprietário do Conselho")
response.write "<tr><td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
Nota: Esta linha é É importante ressaltar que ao clicar no nome de cada quadro, você pode se conectar à página que exibe o tema do quadro. O código do programa parece um pouco complicado. Vou decompô-lo e explicá-lo para você, e você entenderá. Após clicar, o navegador solicita a página qBoard.asp com um parâmetro boardid, que representa o número de identificação da placa a ser exibida. Um ponto de interrogação (?) é utilizado para separar a página de solicitação e o parâmetro. Boardid é a variável definida anteriormente, que contém o número ID do cartão correspondente. Esta conexão também contém outro parâmetro boardname, que é usado para passar o nome da placa para a página qBoard.asp. Use "&" para separar vários parâmetros. Este parâmetro não é necessário. Ele é passado para evitar usar boardid novamente para consultar o nome da placa em qBorad.asp. De modo geral, as operações de banco de dados devem ser utilizadas o mínimo possível, o que pode melhorar o desempenho das páginas ASP. Como a instrução Response.Write usa strings como parâmetros, o caractere de conexão "&" é usado entre as strings e variáveis acima. O resultado final da explicação da página ASP deve ser assim
<td>< a href=qBoard.asp?boardid=1&boardname=Placa de sistema>Placa de sistema</a><td>.
resposta.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
response.write "< td>" &rs("número de tópicos") & "< /td>"
response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">Processamento da placa< /a></td>< /tr>"
Nota: Nesta tabela, além da conexão Exibindo o conteúdo do tema kanban, há também uma parte de consulta em mosaico e uma parte de processamento de serviço de placa. A consulta do moderador pode ser implementada por meio de qAuthor.asp. Ele simplesmente recupera as informações do autor do banco de dados e as exibe. Disse. O processamento da placa é feito pela página managerlogin.asp. Isso pertence ao módulo de revisão de artigos, que explicarei em detalhes posteriormente.
rs.movnext
loop até rs.eof
%>
Nota: Através de um loop do..., todas as mensagens no conjunto de registros são exibidas.
</tabela>
<div align="center"><br>
Clique no nome do fórum para obter a lista de tópicos, clique no nome do proprietário do fórum para ver as mensagens do proprietário do fórum
</div>
</corpo>
</html>
<%
definir rs = nada
conexão.fechar
definir conn = nada
%>
(3) Crie a página qBaord.asp:
<%
boardid=request("boardid") 'Obtém o número de ID da placa passado da página anterior
Definir conexão = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Definir cmd = Server.CreateObject("ADODB.Command")
Definir cmd.ActiveConnection = conexão
cmd.CommandText = "Lista de tópicos"
ReDim param(0) //Nota: declara matriz de parâmetros
param(0) = CLng(boardid)//Nota: CLng não pode ser ignorado
Definir rs = cmd.Execute(,param)
%>
<html>
<cabeça>
<título>Lista de tópicos</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#FFFFFF">
<h1 align="center"><%=rs("nome kanban")%>Lista de temas do quadro</h1>
<largura da tabela="80%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td largura="89%" altura="21">Tema</td>
<td largura="11%" altura="21">Número de artigos</td>
</tr>
<%
fazer
tópico=rs("id")
nomedotópico=rs("título")
sum=rs("número de artigos")
resposta.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
resposta.write "< td>" &sum & "< /td>< /tr>"
rs.movnext
loop até rs.eof
%>
</tabela>
</corpo>
</html>
Nota: qBoard.asp lista todos os tópicos de um determinado fórum. Depois de clicar no nome do tópico, você entrará na lista de artigos do tópico correspondente. Esta lista é implementada pelo script ASP qTopic.asp. O código do programa Qtopic.asp é quase igual ao qBoard.asp em essência, mas há diferenças em seus respectivos detalhes, e não vou entrar em mais detalhes aqui.
(4) Após clicar no título do artigo na lista de artigos, você entrará na página de navegação do conteúdo do artigo article.asp:
<%
id do artigo=solicitação("id do artigo")
Definir conexão = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Definir cmd = Server.CreateObject("ADODB.Command")
Definir cmd.ActiveConnection = conexão
cmd.CommandText = "Consultar artigos por id"
ReDim param(0) 'Declaração
param(0) = CLng(articleid) ' Cint não pode ser ignorado
Definir rs = cmd.Execute(,param)
autor=rs("autorid")
título=rs("título")
dados=rs("Data")
taxa=rs("grau recomendado")
boardid=rs("kanbanid")
tópico=rs("tópico")
boardname=rs("nome do tabuleiro")
topicname=rs("nome do tópico")
conteúdo=rs("conteúdo")
conteúdo=substituir(conteúdo,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
Nota: Isso é algo a ser observado. Na exibição de HTML, o caractere de nova linha (ou seja, a constante vbCrlf) deve ser substituído pelo símbolo de parágrafo HTML. Desta forma, a ligação entre os parágrafos não perturbará o formato de entrada original. Se quiser projetar melhor, você pode usar CSS para redefinir a tag <P> e definir seu atributo test-indent para obter um espaço no início de cada parágrafo.
(5) Adicione um ao número de cliques
sql="Atualizar tabela de conteúdo Definir número de cliques=número de cliques+1Onde ID=" & articleid
conn.execute sql
Nota: Há uma instrução SQL aqui quando a página é exibida, o campo de contagem de cliques na tabela correspondente será incrementado em um, para que o número de visualizações do artigo possa ser contado e classificado em ordem. Ao executar a instrução do artigo, descobri que: originalmente na instrução SQL, o nome da variável incorporada deveria ser distinguido por aspas simples, mas não adicionei aspas simples à variável articleid aqui, e ela realmente passou, e eu escrevi assim sempre causou erros no passado. Gostaria de saber se é por causa da nova versão do ADO.
definir cmd = nada
%>
<html>
<cabeça>
<título>Documento sem título</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#E9E9E4">
<largura da tabela="89%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td>Autor:<font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>Data de publicação: < cor da fonte="#FF3333"><%=dados%>< /fonte>
Quadro Kanban:< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>Recomendação do proprietário do conselho:< font color="#FF3333">#rate#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>Título:<cor da fonte="#FF3333"><%=título%>
Tópico: < a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr valign="topo">
<td>
<h>
< font color="#FF3366">Conteúdo do artigo: < /font>< br>
<br>
< font color=blue>< %response.writecontent%>< /font>
<br>
<br>
</td>
</tr>
<tr valign="topo">
<td altura="18">
<largura da tabela="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<tr>
<largura td="0%"> < /td>
<td width="65%">Sobre este tópico<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">Deixe um comentário< /a></td>
Esta conexão permite que os internautas expressem suas próprias opiniões sobre o tema deste comentário. É sobre isso que falaremos no próximo módulo, por isso não vou mencioná-lo aqui.
</tr>
</tabela>
</td>
</tr>
</tabela>
</corpo>
</html>
<%
definir rs = nada
conexão.fechar
definir conn = nada
%>
Neste ponto, a parte de exibição do artigo também está concluída. Vamos dar uma olhada em como a parte de publicação de artigos é implementada.
3. Construa a parte de publicação de artigos
O módulo de publicação de artigos possui apenas duas páginas, uma é o submit.asp mencionado anteriormente, que é usado para fornecer o formulário de entrada, e a outra é subresult.asp, que é usado para processar o formulário. entrada. A página anterior é muito simples. É basicamente um formulário HTML. Não há muito o que falar.
<html>
<cabeça>
<título>Publicar artigo</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#FFFFFF">
<%
autor=solicitação("autor")
senha=solicitação("senha")
topicid=request("topicida")
boardid=solicitação("boardid")
conteúdo=solicitação("conteúdo")
title=request("title")
Nota: Esta seção retira o conteúdo da tabela enviado em submit.asp e o coloca na variável correspondente.
<html>
<cabeça>
<título>Publicar artigo</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#FFFFFF">
<%
autor=solicitação("autor")
senha=solicitação("senha")
topicid=request("topicida")
boardid=solicitação("boardid")
conteúdo=solicitação("conteúdo")
title=request("title")
(1) Consultar se o autor existe
cmd.CommandText = "selecione * da tabela de autores onde id='" & autor &"'"
Defina rs = cmd.Execute()
(2) Verifique as permissões
cmd.CommandText = "selecione * da tabela de autores onde id='" & autor &"'"
Set rs = cmd.Execute()
Nota: Esta seção verifica as permissões do autor e trata os erros adequadamente se a conta não existir ou a senha estiver incorreta. Aqui você pode ver o uso de response.end, que é usado para finalizar o script ASP atual. Combinados com instruções if, os erros esperados no programa podem ser tratados. Em uma boa aplicação WEB, o tratamento de erros é essencial.
(3) Altere as aspas simples nas informações para duas aspas simples e adicione aspas simples antes e depois
Função SqlStr(dados)
SqlStr = "'" & Substituir(dados,"'", "''" ) & "'"
Função final
'Escreve no banco de dados
sql = "Inserir na tabela de conteúdo (ID do quadro, ID do tópico, ID do autor, título, conteúdo)Valores( "
sql = sql & SqlStr(topicid) & ","
sql = sql & SqlStr(boardid) & ","
sql = sql & SqlStr(autor) & ","
sql = sql & SqlStr(título) & ","
sql = sql & SqlStr(conteúdo) & ")"
conexão.Executar sql
%>
<h2>O artigo foi enviado para a base de dados e poderá ser visto após a revisão do moderador <h2>
</corpo>
</html>
Neste ponto, o artigo foi salvo no banco de dados. No entanto, não pode ser exibido imediatamente e requer a aprovação do moderador. A seguir, vamos dar uma olhada na parte de gerenciamento do fórum.
4. A parte de gestão do fórum
é o núcleo do nosso fórum, mas não há nada de especial na sua implementação. Ainda é a mesma coisa: processamento de formulários, consulta de banco de dados e uso de ASP para combiná-los organicamente. Ao entrar no modo de revisão de artigos (o processamento do fórum mencionado anteriormente), o mais importante deve ser verificar a identidade do moderador. Vamos dar uma olhada na página de login do moderador:
<%
boardid=solicitação("boardid")
(Nota: O boardid é passado pela conexão a esta página e é o ID da placa a ser processada. Somente através dele podemos saber qual placa está sendo processada.)
Definir conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Definir cmd = Server.CreateObject("ADODB.Command")
Definir cmd.ActiveConnection = conexão
cmd.CommandText = "Consulta de senha do moderador"
Parâmetro ReDim (0)
param(0) = CLng(boardid) //Nota: CLng não pode ser ignorado
Definir rs = cmd.Execute(,param)
boardmanager=rs("Proprietário do Conselho")
definir cmd = nada
%>
<html>
<cabeça>
<título>Documento sem título</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#FFFFFF">
< p>Somente o proprietário do conselho < %=boardmanager%> pode entrar neste local </p>
<p>Por favor, insira a senha de verificação e, para manter a autenticação, ative os Cookies do seu navegador. </p>
<form método="post" action="managerloginrest.asp">
<tipo de entrada="senha" nome="senha">
< tipo de entrada="oculto" nome="boardid"value=< %=boardid%>>
<tipo de entrada = "enviar" nome = "Enviar" valor = "OK">
</formulário>
Nota: Esta página é apenas para login. Após obter a senha inserida pelo Mozhu, ele não poderá realizar a verificação. Em vez disso, o trabalho de verificação será realizado na próxima página. Na verdade, o trabalho de entrada e verificação da senha pode ser concluído em uma página, mas a organização estrutural do código do programa é um pouco problemática.
</corpo>
</html>
<%
definir rs = nada
conexão.fechar
definir conn = nada
%>
Agora que o ID do moderador e a senha inserida foram obtidos, o seguinte é o trabalho de verificação managerloginrest.asp. Ele aceita o conteúdo do formulário no arquivo acima e executa o processamento relacionado:
<%
response.buffer=true
Nota: Configure o buffer para permitir o uso. De modo geral, este item deve ser adicionado ao cabeçalho de cada página ASP, o que pode melhorar o desempenho da página ASP. Depois de abrir o buffer, existem alguns usos especiais correspondentes no ASP, que serão mencionados mais adiante.
boardid=solicitação("boardid")
senha=solicitação("senha")
Definir conexão = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Definir cmd = Server.CreateObject("ADODB.Command")
Definir cmd.ActiveConnection = conexão
cmd.CommandText = "Consulta de senha do moderador"
ReDim param(0) 'Declaração
param(0) = CLng(boardid)//Nota: CLng não pode ser ignorado
Definir rs = cmd.Execute(,param)
boardmanager=rs("Proprietário do Conselho")
se senha<>rs("senha")então %>
<html>
<cabeça>
<título>Autenticação</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#FFFFFF">
Senha incorreta</corpo>
</html>
<%
outro
session("beenthere")=boarded
Nota: Usar Session para manter a identidade do moderador requer que os cookies do navegador do cliente estejam ativados. Porque a Sessão é implementada através de cookies. Aqui, atribua o ID do fórum à variável Session beenthere, indicando que o moderador passou na autenticação de identidade. Em cada página de processamento de versão subsequente, verifique se o estado corresponde ao ID da versão correspondente.
url="boardmanager.asp?boardid="& boardid
de URL Response.redirect
: Quando aprendi ASP pela primeira vez, sempre fiquei confuso com o método response.redirect e fiquei insatisfeito com ele. Agora, deixe-me contar algumas técnicas. Antes de usá-lo, você deve passar response.buffer=true para permitir que a página ASP use o buffer. Neste momento, antes de o ASP ser interpretado no código do programa HTML, ele é colocado no buffer e não é enviado diretamente ao navegador do cliente. Outra coisa que deve ser conhecida é: antes de usar o response.redirect, nenhum código de programa HTML real pode ser enviado ao navegador do cliente, caso contrário ocorrerá um erro. Claro, existem soluções alternativas. Se o código do programa HTML foi interpretado antes de response.redirect, você pode usar o método response.clear para limpar o buffer e, em seguida, usá-lo para redefinir.
terminar se
%>
Nota: O seguinte é o destino de redefinição após a autenticação acima ser aprovada: boardmanager.asp. Ele listará todos os artigos que foram processados.
<%
boardid=solicitação("boardid")
if session("beenthere")<>boardidthen response.redirect "forums.asp"
Obs: É aqui que a identidade do moderador é verificada, pois ele foi marcado no navegador da Bamboo através de cookies, e agora podemos passar seesion Vamos identificar o moderador. Se as tags não corresponderem, ele retornará à página de login original por meio de response.redirect. Se o cookie do navegador do moderador não estiver ativado, o valor de seesion ("beenthere") ficará vazio e esta página também não estará acessível.
Definir conexão = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Definir cmd = Server.CreateObject("ADODB.Command")
Definir cmd.ActiveConnection = conexão
sql="selecione o nome da lista do quadro whereid=" & boardid
definir rs = conn.execute (sql)
nome da placa=rs("nome")
cmd.commandtext="Lista de artigos não publicados"
Parâmetro ReDim (0)
param(0) = CLng(boardid)//Nota: Clng não pode ser ignorado
Definir rs = cmd.Execute(,param)
definir cmd = nada
%>
<html>
<cabeça>
<título>Processamento de publicação</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeça>
<corpo bgcolor="#FFFFFF">
< H1 align = "Center" ><%= nome da placa%> Gestão pública < /H1 >
< hr >
< %
Se rs.eof ou rs.Bof, então Response.Write "< H2 > Não há artigos para processar </h2 >"
resposta.fim
%>
NOTA: Se nenhum novo artigo for publicado pelos internautas, isso fornecerá um prompt correspondente e usará a resposta. END para encerrar a exibição desta página.
< Tabela Width = "90%" Border = "0" CellSpacing = "0" CellPadding = "0" align = "Center" >
< tr bgcolor = "#ffffcc" >
< td width = "40%" altura = "20" > tema </td >
< TD Width = "40%" altura = "20" > Título do artigo </TD >
< TD Width = "8%" Height = "20" > Autor </Td >
< TD Width = "12%" altura = "20" > Data </td >
</tr>
< %
fazer
tópica = rs ("tópico")
ArtigoId = RS ("ArtigoId")
dados = rs ("data")
DATASTR = CSTR (ano (dados)) & "-" & cstr (mês (dados)) & "-" & cstr (dia (dados))
autor = rs ("autor")
articleName = rs ("título")
tópiconame = rs ("tópico")
Response.write "< tr >< td >< a href = qtopic.asp? tópica (" & tippaD & ">" & tópicoName & "< /a >< /td >"
Response.write "< td >< a href = gerentearticle.asp?
Response.Write "< td >< a href = qauthor.asp? Autor =" & Autor & ">" & Autor & "< /a >< /td >"
Response.Write "< Td >" e Datatr & "< /td >< /tr >"
rs.movnext
Faça um loop até Rs.eof
%>
</tabela>
</html >
< %
definir rs = nada
conexão.fechar
definir conn = nada
%>
</Corpo >
Quando você clicar no link do artigo correspondente, você inserirá o artigo de processamento da página de gerenciamento.asp:
< %
ArtigoId = Solicitação ("ArtigoId")
BoardId = solicitação ("BoardId")
Se sessão ("Beenthere") <> Boardidhen Response.Redirect "Fórums.asp"
Definir Conn = Server.CreateObject ("Adodb.Connection")
Conn.open "Driver = {Microsoft AccessDriver (*.mdb)}; dbq =" & server.mappath ("bbsSystem.mdb")
Set cmd = server.createObject ("adodb.command")
Definir CMD.ActiveConnection = Conn
cmd.CommandText = "Artigos de consulta por id"
Redim Param (0)
param (0) = clng (articleId) // Nota: CLNG não pode ser ignorado
Definir rs = cmd.execute (, param)
autor = rs ("autorid")
título = rs ("título")
dados = rs ("data")
taxa = rs ("grau recomendado")
BoardId = Rs ("Kanbanid")
tópica = rs ("tópico")
Boardname = RS ("Nome da placa")
tópiconame = rs ("nome do tópico")
Content = RS ("Conteúdo")
Content = substituir (conteúdo, vbcrlf, "</p >< p >")
Content = "< P >" e conteúdo e "< /p >"
Defina CMD = nada
%>
< Html >
<cabeça>
< Título > Documento sem título </Título >
< meta http-equiv = "content-type" content = "text/html; charset = gb2312">
</cabeça>
< Body bgcolor = "#e9e9e4" >
< Tabela Width = "89%" Border = "0" CellSpacacing = "0" CellPadding = "0" align = "Center" >
< tr bgcolor = "#cccccc" >
< TD > Autor: < Fonte Color = "#ff3366" >< a href = "qauthor.asp? Autor = < %= autor %>" >< %= autor %> < /a >< /font > Data publicada: < Fonte Color = "#FF3333" ><%= Dados%>< /Fonte >
Conselho Kanban: < Fonte Color = "#ff3333" >< a href = "qboard.asp? BoardId = < %= BoardID %>" >< %= Boardname %>< /A >< /Fonte > Recomendação do proprietário da placa: < font color = "#ff3333">#taxa#< /font >< /td >
</tr>
< tr bgcolor = "#cccccc" >
< TD > Título: < Font Color = "#FF3333" ><%= Título%>
Tópico: < a href = "qtopic.asp? TopicId = <%= tópica%>" > <%= tópiconame%>< /a > < /font >< /td >
</tr>
< TR VALIGN = "TOP" >
< TD >
< hr >
< Font Color = "#ff3366" > Conteúdo do artigo: < /font >< br >
<br>
< Fonte Color = Azul >< %Resposta.WritEContent %>< /Fonte >
<br>
< hr >
</td>
</tr>
< TR VALIGN = "TOP" >
< Form Metod = "Post" Action = "Gerenteesult.asp" >
< TD Hight = "18" >
< Tabela Width = "100%" Border = "1" CellSpacing = "1" CellPadding = "1" >
<tr>
< TD Width = "29%">
< Div align = "Right" >
< Tipo de entrada = "Hidden" Nome = "BoardId" Value = "< %= BoardId %>" >
< Tipo de entrada = "Hidden" Nome = "Topicid" Value = "< %= Topicid %>" >
< Tipo de entrada = "Hidden" Name = "ArtigoId" Value = "< %= ArtigoId %>" >
Processamento de artigo: < /div >
</td>
< TD Width = "12%" BorderColor = "#006666"> Delete:
< Entrada Tipo = "Radio" Nome = "Gerenciar" Valor = 1 >
</td>
< TD Width = "30%" BorderColor = "#006666"> Postado por:
< Entrada Tipo = "Radio" Nome = "Gerenciar" Valor = 2 >
Nível de recomendação < Selecione Nome = "Selecione" >
< Valor da opção = "1" > 1 </Opção >
< Valor da opção = "2" > 2 </Opção >
< Valor da opção = "3" selecionado > 3 </Opção >
< Valor da opção = "4" > 4 </Opção >
< Valor da opção = "5" > 5 </Opção >
</Selecione >
</td>
< td width = "20%" borderColor = "#006666"> Processo mais tarde:
< Entrada Tipo = "Radio" Nome = "Gerenciar" Valor = 3 >
</td>
< TD Width = "9%" >
< Tipo de entrada = "submeter" name = "submeter" value = "ok" >
</td>
</tr>
</tabela>
</td>
</formulário>
</tr>
</tabela>
</corpo>
</html >
< %
definir rs = nada
conexão.fechar
definir conn = nada
%>
NOTA: Esta página é basicamente a mesma que o Artigo.asp no módulo de exibição do artigo.
Em seguida, precisamos modificar as partes correspondentes do banco de dados de acordo com o processo de processamento do moderador.
<%Response.Buffer = True%>
< Html >
<cabeça>
< Título > Processamento do artigo </Título >
< meta http-equiv = "content-type" content = "text/html; charset = gb2312">
</cabeça>
< Body bgcolor = "#e9e9e4" >
< %
ArtigoId = Solicitação ("ArtigoId")
BoardId = solicitação ("BoardId")
tópica = solicitação ("tópico")
gerenciar = request ("gerenciar")
'Aceite o conteúdo do formulário
Response.Write Manage 'Show Buzhu ID
Se sessão ("Beenthere") <> Boardidhen Response.Redirect "Fórums.asp"
Definir Conn = Server.CreateObject ("Adodb.Connection")
Conn.open "Driver = {Microsoft AccessDriver (*.mdb)}; dbq =" & server.mappath ("bbsSystem.mdb")
De acordo com a operação do moderador na página anterior, o processamento correspondente será realizado abaixo.
Se clng (request ("gerenciar")) = 1 então
sql = "Excluir da tabela de conteúdo onde id =" & ArtigoId
Conn.Execute sql
Response.Write "< H1 > Artigo foi excluído </h1 >"
Response.Write "< a href = > de volta </a>"
elseif clng (request ("gerenciar")) = 2then
sql = "Atualizar conteúdo tabela Conjunto de tabela publicish = true whereid =" & articleId
Conn.Execute sql
sql = "Atualizar tópica Tabela Conjunto de artigos = número de artigos+1 lugar id =" & tipicID
Conn.Execute sql
Response.Write "< H1 > Artigo foi publicado </H1 >"
Response.Write "< a href = > de volta </a>"
outro
Response.clear
Response.Redirect "BoardManager.asp? BoardId =" e embarcado
terminar se
%>
</corpo>
</html >
< %
conexão.fechar
definir conn = nada
%>
Após as etapas acima, todas as peças são basicamente concluídas. Se você deseja usá -lo, precisa se esforçar mais em design de layout, verificação de dados do cliente, etc. Mas todo esse é o conteúdo HTML e tem pouco a ver com ASP, por isso não vou entrar em detalhes aqui.