Como criar um fórum básico em ASP - parte 2
Agora que já criamos o banco de dados (
veja aqui), vamos fazer o script que acessa os fóruns. Você pode acessar o
fórum de exemplo aqui.
Esse script terá os links de cada fórum apontando para um segundo script que exibirá os textos do fórum selecionado.
Código completo de
foruns.asp
- <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
- <%
- ' Conexão aberta
- Set conn = Server.CreateObject("ADODB.Connection")
- Set rs= Server.CreateObject("ADODB.RecordSet")
- ' Altere a linha abaixo com os dados do seu banco de dados
- conn.Open "Driver=MySQL ODBC 5.1 Driver; DATABASE=nomeDoBancoDeDados; SERVER=seuServidor; UID=seuID; PASSWORD=*******;"
- ' Se um tópico novo foi enviado, será adicionado na tabela foruns
- If Request("topico") <> "" Then
- sqlTopico = "INSERT INTO foruns (topico, descricao, ultimaMensagem, postagens) VALUES ('" & Request("topico") & "', '" & Request("descricao") & "', '', '')"
- conn.Execute(sqlTopico)
- End If
- %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>Fórum básico em ASP</title>
- <style>
- p, li, td, div{font-family:arial, helvetica, sans-serif;font-size:10pt;}
- fieldset{padding:20px;line-height:25px;}
- input, textarea{font-family:arial, helvetica, sans-serif;font-size:8pt;padding:3px;}
- label{display:block;width:160px;text-align:right;float:left;padding:0 5px;}
- #conteudo{display:block;width:760px;margin:0 auto;}
- #foruns{display:block;clear:both;list-style:none;padding:0;}
- #foruns li{float:left;width:310px;margin:10px;padding:20px;border:solid 1px #CCCCCC;}
- #foruns span, #foruns a{display:block;}
- #foruns a{font-size:12pt;}
- #foruns span{font-style:italic;color:#90F;}
- </style>
- </head>
- <body>
- <div id="conteudo">
- <%
- ' Consulta que abre a tabela foruns
- sqlForuns = "SELECT * FROM foruns"
- ' Armazena a consulta no objeto rs
- Set rs = conn.Execute(sqlForuns)
- ' Inicia a lista de fóruns (tópicos)
- Response.Write "<ul id=""foruns"">"
- ' Loop que percorre os registros da tabela foruns enquanto não chegar ao final da consulta
- While Not rs.EOF
- Response.Write "<li>"
- Response.Write "<a href=""mensagens.asp?id=" & rs("forumID") & """>"
- Response.Write rs("topico") & "</a>"
- Response.Write rs("descricao")
- Response.Write "<span>Última Mensagem: " & rs("ultimaMensagem") & "</span> (" & rs("postagens") & " postagens)"
- Response.Write "</li>"
- rs.MoveNext
- Wend
- ' Fim da lista
- Response.Write "</ul>"
- %>
- <form action="foruns.asp" method="post" name="addForum">
- <fieldset><legend>Adicionar um tópico</legend>
- <p><label for="topico"> Título </label>
- <input name="topico" type="text" size="70" maxlength="255" />
- </p>
- <p>
- <label for="descricao"> Descrição</label>
- <textarea name="descricao" cols="60" rows="5"> </textarea>
- <input name="submit" type="submit" value="Criar" />
- </p>
- </fieldset></form>
- </div>
- </body>
- </html>
Vale lembrar que as linhas estão numeradas apenas para facilitar a observação dos detalhes. Se você copiar o código para usar em algum lugar, não esqueça de tirar a numeração.
Analisando o código
Nas linhas de 12 a 15 fazemos o teste se está sendo enviado o título e texto para criar um novo fórum/tópico. Se a expressão na linha 12 retornar
True é porque foi enviado um título através do formulário "Adicionar um tópico", e na linha 13 será criada a consulta sql para adicionar um novo registro à tabela foruns, com base nos dados enviados pelo formulário.
A linha 14 executa essa consulta, que poderia ser passada diretamente para o método
Execute(), mas eu costumo separar as coisas assim pra ficar mais fácil de corrigir a consulta, se for necessário.
Essa verificação não é essencial. Eu coloquei ali, mas você pode fazer um script à parte, protegido por senha, ou adicionar os fóruns direto no banco de dados como quiser. Contudo, acho que um fórum deve ser um ambiente colaborativo e todo mundo deve ajudar a organizar o espaço informacional. Questões alheias à programação à parte, vamos ao que interessa.
Para mostrar os fóruns que estão disponíveis, na linha 45 utilizamos uma nova consulta sql. Porém desta vez, armazenamos o resultado da consulta no objeto
rs (sigla para RecordSet, mas você pode usar o nome que quiser nos seus scripts) já criado na linha 6. Como resultado teremos todos os registros que o banco retornou, ou seja, os fóruns/tópicos existentes no nosso sistema.
Na linha 51 inicia-se um loop
While que se repetirá até percorrermos todos os registros do nosso objeto
rs. Tudo o que está entre as linhas 51 e 59 será executado e repetido até que a expressão "Not rs.EOF" retorne
True, ou seja, até que tenhamos atingido o final da consulta. A linha 58 é importante para que o loop funcione corretamente. Sem o comando
MoveNext do objeto RecordSet, o cursor do objeto continuará apontando para o mesmo registro, e o loop nunca chegará ao seu fim, gerando um erro no script.
Nas linhas 65 a 75 temos o formulário HTML que aponta de volta para a mesma página com os dados para adicionar um novo fórum. Se preferir, retire-o da página para que somente pessoas autorizadas possam moderar o seu fórum.
Em breve, a parte 3: a página de mensagens dos fóruns.
Veja um exemplo aqui.