Como criar um fórum básico em ASP - parte 2: índice de tópicos

Agora que já criamos o banco de dados (veja aqui), vamos fazer o script que acessa os tópicos.

Esse script terá os links de cada tópico apontando para um segundo script que exibirá os textos do tópico selecionado.

Vamos acessar o banco de dados para começar:

<%@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=*******;"
%>

Em seguida eu já vou verificar se o usuário está tentando salvar um novo tópico. Caso tenha sido enviado o título do novo tópico, ele será salvo no banco. Assim o novo título salvo já constará quando eu listar todos os tópicos, em seguida.

<%
If Request("topico") <> "" Then
sqlTopico = "INSERT INTO foruns (topico, descricao, ultimaMensagem, postagens) VALUES ('" & Request("topico") & "', '" & Request("descricao") & "', '', '')"
conn.Execute(sqlTopico)
End If
%>

Agora vamos começar a produzir o HTML para a página. Este exemplo foi atualizado para HTML5:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="iso-8859-1">
<title>Fórum básico em ASP</title>
</head>
<body>
<div class="conteudo">
</div>
</body>
</html>

Já temos uma página vazia e uma div com a classe "conteudo", que poderá ser estilizada mais tarde através de um arquivo CSS. Dentro desta div vai o nosso conteúdo, que consistirá da lista de tópicos e do formulário para salvar um novo tópico.

<%
' 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>

Para mostrar os tópicos disponíveis, utilizamos uma nova consulta sql. Porém desta vez, armazenamos o resultado da consulta no objeto RecordSet que eu chamei de rs. Como resultado teremos todos os registros que o banco retornou, ou seja, os tópicos existentes no nosso sistema.

Inicia-se um loop While que se repetirá até percorrermos todos os registros do nosso objeto rs. Tudo o que está dentro do loop While será executado e repetido até que a expressão Not rs.EOF retorne True, indicando que chegamos ao final da consulta.

Atenção para um erro comum: 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.

Em seguida, 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.