Home Page Johny Lab
Link para a página de contato Fale comigo

siga-me: @JohnyLab

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
  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
  2. <%
  3. ' Conexão aberta
  4. Set conn = Server.CreateObject("ADODB.Connection")
  5. Set rs= Server.CreateObject("ADODB.RecordSet")
  6. ' Altere a linha abaixo com os dados do seu banco de dados
  7. conn.Open "Driver=MySQL ODBC 5.1 Driver; DATABASE=nomeDoBancoDeDados; SERVER=seuServidor; UID=seuID; PASSWORD=*******;"
  8. ' Se um tópico novo foi enviado, será adicionado na tabela foruns
  9. If Request("topico") <> "" Then
  10.    sqlTopico = "INSERT INTO foruns (topico, descricao, ultimaMensagem, postagens) VALUES ('" & Request("topico") & "', '" & Request("descricao") & "', '', '')"
  11.    conn.Execute(sqlTopico)
  12. End If
  13. %>
  14. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  15. <html xmlns="http://www.w3.org/1999/xhtml">
  16. <head>
  17. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  18. <title>Fórum básico em ASP</title>
  19. <style>
  20. p, li, td, div{font-family:arial, helvetica, sans-serif;font-size:10pt;}
  21. fieldset{padding:20px;line-height:25px;}
  22. input, textarea{font-family:arial, helvetica, sans-serif;font-size:8pt;padding:3px;}
  23. label{display:block;width:160px;text-align:right;float:left;padding:0 5px;}
  24. #conteudo{display:block;width:760px;margin:0 auto;}
  25. #foruns{display:block;clear:both;list-style:none;padding:0;}
  26. #foruns li{float:left;width:310px;margin:10px;padding:20px;border:solid 1px #CCCCCC;}
  27. #foruns span, #foruns a{display:block;}
  28. #foruns a{font-size:12pt;}
  29. #foruns span{font-style:italic;color:#90F;}
  30. </style>
  31. </head>
  32. <body>
  33. <div id="conteudo">
  34. <%
  35. ' Consulta que abre a tabela foruns
  36. sqlForuns = "SELECT * FROM foruns"
  37. ' Armazena a consulta no objeto rs
  38. Set rs = conn.Execute(sqlForuns)
  39. ' Inicia a lista de fóruns (tópicos)
  40.    Response.Write "<ul id=""foruns"">"
  41. ' Loop que percorre os registros da tabela foruns enquanto não chegar ao final da consulta
  42. While Not rs.EOF
  43.    Response.Write "<li>"
  44.    Response.Write "<a href=""mensagens.asp?id=" & rs("forumID") & """>"
  45.    Response.Write rs("topico") & "</a>"
  46.    Response.Write rs("descricao")
  47.    Response.Write "<span>Última Mensagem: " & rs("ultimaMensagem") & "</span> (" & rs("postagens") & " postagens)"
  48.    Response.Write "</li>"
  49. rs.MoveNext
  50. Wend
  51. ' Fim da lista
  52.    Response.Write "</ul>"
  53. %>
  54. <form action="foruns.asp" method="post" name="addForum">
  55. <fieldset><legend>Adicionar um tópico</legend>
  56. <p><label for="topico"> Título </label>
  57. <input name="topico" type="text" size="70" maxlength="255" />
  58. </p>
  59. <p>
  60. <label for="descricao"> Descrição</label>
  61. <textarea name="descricao" cols="60" rows="5"> </textarea>
  62. <input name="submit" type="submit" value="Criar" />
  63. </p>
  64. </fieldset></form>
  65. </div>
  66. </body>
  67. </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.

johnylab.net © 2010 - - Contato - Facebook - Twitter - LinkeIn