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.