ASP - Criando um livro de visitas

 
Vamos começar 2002 usando ASP e acesso a Banco de dados com ADO ; Vamos mostrar como implementar uma funcionalidade usada em muitas páginas web:o livro de visitas.
 
A coisa funciona da seguinte maneira: Ao visitar um site que disponibiliza um livro de visitantes, podemos assinar o livro , deixar nosso e-mail e colocar alguma mensagem característica. Vamos mostrar como criar as rotinas para implementar um livro de visitas em seu site.

Para testar o livro clique aqui : livro de visitas

Basicamente iremos precisar de uma base de dados na qual iremos armazenar os registros feitos pelos visitantes: Vamos armazenar os seguintes dados:
ID
O código de identificação do assinante
nome
o nome do usuário que assinou o livro
email
o email do assinante
mensagem
a mensagem do visitante
data
a data da assinatura do livro
Será necessário criar uma base de dados com uma tabela com os campos acima mencionados, usaremos então o Access para criar o banco de dados visita.mdb e a tabela visitantes com a estrutura mencionada.(Ver figura abaixo)

O acesso a base de dados pode ser feito de 3 maneiras :

1- ) Usando um provedor OLE DB (iremos usar esta forma de acesso a base de dados). Neste método usamos o seguinte código:

'cria uma instancia do objeto connection 
Set Conn = Server.CreateObject("ADODB.Connection") 
DB = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="& _          
Server.MapPath("/visitas/visita.mdb") 
Conn.Open DB 

2-) A segunda forma é usar um driver ODBC ( existem servidores que não suportam provedores OLE DB ). Neste caso o código é o seguinte:

'cria uma instancia do objeto connection Set 
Conn = Server.CreateObject("ADODB.Connection") 
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &_                        
Server.MapPath("/visitas/visita.mdb") 

3-) Podemos usar ainda um DSN ( Data Source Name) para acessar os dados via objeto connection da ADO. Como exemplo podemos criar o DSN com o nome de visitantes e usá-lo para o acesso a base de dados.

'cria uma instancia do objeto connection 
Set Conn = Server.CreateObject("ADODB.Connection")                                   
Conn.open "DSN=visitantes;uid=;pwd=;" 
Nosso projeto usara somente um arquivo de script asp , o arquivo visitas.asp será o responsável pela funcionalidade do nosso livro de visitas e um arquivo onde iremos reunir todas as funções JavaScript usadas para validar os dados ; o arquivo funcoes.asp que será um arquivo de inclusão. (veja artigo anterior)

O arquivo ajuda.htm também será usado para exibir o conteúdo da ajuda ao usuário.

O código do arquivo funcoes.asp é o seguinte:

<script language="JavaScript">
function verifica_dados(form) {
var tamanho_pesquisa = new String()
tamanho_pesquisa = document.enviar.mensagem.value

if(EmBranco(form.nome) == true) {
alert("Por favor informe o seu nome.");
form.nome.focus();
return false;
}

if(EmBranco(form.email) == true) {
alert("O seu e-mail apresenta um formato inválido.");
form.email.focus();
return false;
}

if(tamanho_pesquisa.length > 200 ){
AvisoInvalido(document.enviar.mensagem,'ATENÇÃO: Sua mensagem deve conter no máximo 200 caracteres!\n\n');
return false;
}

if(EmBranco(form.mensagem) == true) {
alert("Deixe pelo menos uma palavra");
form.mensagem.focus();
return false;
}
} // fim da função

// Verifica se os campos foram preenchidos
function EmBranco(campo) {
if(campo.value == "")
return true;
else
return false;
}

/************************************************
* function AvisoInvalido
* Gera um alerta para o usuário
* volta o foco p/campo
* Input: theField - campo do formulário com problema
* warnText - texto a ser mostrado no alert
************************************************/

function AvisoInvalido (theField, warnText) {
theField.focus()
theField.select()
alert(warnText)
return false
}
</script>

<script language="JavaScript">
// funcao para obter ajuda
function ajuda(){
window.open(
'ajuda.htm','explica','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no, _ resizable=no,copyhistory=no,width=270,height=310,top=40,left=150');
}
</script>
As funções do arquivo fazem a validação da entrada de dados nos campos do formulário do site.
 
Ao acessar a página do nosso livro de visitas iremos mostrar os usuários que já assinaram o livro e a seguir mostraremos o formulário que permitirá ao usuário informar os dados para assinar o livro.
 
A tela do nosso site com o livro de visitas é mostrada a seguir:

O nome e o email do usuário e a mensagem são de preenchimento obrigatório e limitamos as mensagens a 200 caracteres. Se o usuário não informar o nome ou o email ou se tentar inserir um mensagem em branco as funções em JavaScript não permitirão a gravação . Se ainda o usuário ultrapassar o limite de 200 caracteres para sua mensagem receberá um aviso para abreviar a mensagem.

O usuário pode clicar no nome do visitante que já assinou o livro para lhe enviar uma mensagem, pode também clicar sobre o ícone do livro para obter ajuda resumida de como proceder para assinar o livro.

Veja a seguir o código do arquivo visitas.asp comentado:
<%option explicit %>
<!--#include file="funcoes.asp" --> 
<%
'declara as variaveis 
Dim nome 
Dim email
Dim mensagem
Dim homepage
Dim conn
Dim DB
Dim rst
Dim SQL

'cria uma instancia do objeto connection
Set Conn = Server.CreateObject("ADODB.Connection")

DB = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="& _
Server.MapPath("/visitas/visita.mdb")
Conn.Open DB

'2-)Acesso usando um driver ODBC
'conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/visitas/visita.mdb") 

'3-)Acesso usando um DSN chamado visitantes
'Conn.open "DSN=visitantes;uid=;pwd=;" 

'cria uma instancia do objeto recordset
Set rst = Server.CreateObject("ADODB.Recordset") 

if Request.ServerVariables("CONTENT_LENGTH")> 0 THEN
SQL = "SELECT * FROM visitantes"
rst.Open SQL,Conn,1,2
rst.AddNew
rst("nome") = Request.form("nome")
rst("email") = Request.form("email")
rst("mensagem") = Request.form("mensagem")
rst("data") = day(now) & "/" & month(now) & "/" & year(now)
rst.Update
rst.close
end if

'ordenar o recordset pelo nome dos visitantes
SQL = "SELECT * FROM visitantes ORDER BY nome"
rst.Open SQL,Conn,1,2
%>

<HTML>
<HEAD>
<TITLE>Relação dos Visitantes</TITLE>
</HEAD>
<CENTER>
<body bgcolor="#00FFFF">
<table border="0">
<tr>
<td><img src="logo_vb.gif" width="320"
height="49"><font face="Comic Sans MS"><em></em></font><font
color="#004080" face="Comic Sans MS"><em>Jcm</em></font><font
color="#FF0000" face="Comic Sans MS"><em>Soft</em></font><font
color="#808040" face="Comic Sans MS"><em> / </em></font><font
height="49"><font face="Comic Sans MS"><em> </em></font><font
color="#004080" face="Comic Sans MS"><em>Banco </em></font><font
color="#FF0000" face="Comic Sans MS"><em>de</em></font><font
color="#004080" face="Comic Sans MS"><em> </em></font><font
color="#808040" face="Comic Sans MS"><em>Dados</em></font><font
color="#004080" face="Comic Sans MS"><em> </em></font><font
color="#0080FF" face="Comic Sans MS"><em>na </em></font><font
color="#FF8000" face="Comic Sans MS"><em>WEB</em></font></td>
</tr>
</table>
<hr>
<p><font size="5" face="Comic Sans MS">Livro de Visitantes</font>
<A href="javascript:ajuda()"><IMG border=0<img src="livro.gif" width="67" height="39"></p></A>
<table border="0" width="90%"> 
<tr> 
<td width="100%"> 
<div align="center"> 
<center> 
<table border="0" width="90%"> 
<% 
While Not rst.EOF 
%> 
<tr> 
<td width="100%" bgcolor="#CDCDCD"> 
<font face="Arial" size="2" color="green"> 
Assinado em</font><font color="black"><em> 
<%=rst("data")%></em></font> 
<font face="Verdana" color="blue">por</font> 
<font color="pink"><em><a href="mailto:<%=rst("email")%>"> 
<%=rst("nome")%></a><br></em></font> 

<div align="center"><center> 
<table border="0" width="70%"> 
<tr> 
<td width="100%"><p align="center"> 
<font color="black" size="2" face="Arial"> 
<i><%=rst("mensagem")%></i>
</font></td></tr> 
</table></center></div></td></tr> 
<% 
rst.MoveNext 
wend 
rst.close 
conn.close
set rst=nothing
set conn=nothing
%> 
</table> 
</center></div> 
</td></tr> 
</table> 
</center> 
</div> 
<% 'inicializa as variáveis
nome="" 
email="" 
mensagem="" 
homepage=""
%> 
<form name="enviar" method="POST" action="<%=Request.ServerVariables("SCRIPT_NAME")%>" _
onsubmit="return verifica_dados(this);">
<center>
<Table bgcolor="aqua" border="0">
<tr><td>
<b>Nome (*): </b>
<input type="text" size="60" name="nome" value="<%=nome%>"> 
</td></tr>
<tr><td>
<b>E-Mail(*): </b>
<input type="text" size="60" name="email" value="<%=email%>"> 
</td></tr>
<tr></tr>
<tr><td>
<b>Mensagem : <font color=blue>Obs: (*) Preenchimento obrigatório</font></b>
<textarea rows="3" name="mensagem" value="<%=mensagem%>" cols="60"></textarea> 
</td></tr><tr>
<td> 
<input type="submit" value="Assinar" name="B1"> 
<input type="reset" value="Limpar" name="B2"> 
</td></tr>
</table>
</form> 
</center>
<hr></body> 
</html> 

Como funciona ?

1-) <%option explicit %> - Esta instrução obriga a que declaremos todas a variáveis usadas no projeto. ( boa prática )

2-) <!--#include file="funcoes.asp" --> - Aqui estamos incluindo o arquivo funcoes.asp na página visitas.asp , com isto o código fica mais claro e a manutenção também.

3-) A seguir criamos um objeto Connection e definimos uma string de conexão. Vamos usar o banco de dados visitas.mdb localizado no diretório database.( Como estou hospedando os arquivos no servidor Phidji.com sou obrigado a usar o diretório database ). A seguir abrimos a conexão com o banco de dados.

'cria uma instancia do objeto connection
Set Conn = Server.CreateObject("ADODB.Connection")

DB = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="& _ 
Server.MapPath("/database/visita.mdb")
Conn.Open DB

4-) Set rst = Server.CreateObject("ADODB.Recordset") - criamos a variável recordset - rst.

5-) O código abaixo irá fazer a inclusão dos dados do formulário na tabela visitantes.

if Request.ServerVariables("CONTENT_LENGTH")> 0 THEN
  SQL = "SELECT * FROM visitantes"
  rst.Open SQL,Conn,1,2
  rst.AddNew
  rst("nome") = Request.form("nome")
  rst("email") = Request.form("email")
  rst("mensagem") = Request.form("mensagem")
  rst("data") = day(now) & "/" & month(now) & "/" & year(now)
  rst.Update
  rst.close
end if

6-) A seguir usamos a instrução : While Not rst.EOF / Wend para percorrer a tabela e exibir todos os registros na tela do site.

7-) O formulário para preencher os dados é montado usando o seguinte código:(Observe o uso das tags <%=campo%> )

<form name="enviar" method="POST" action="<%=Request.ServerVariables("SCRIPT_NAME")%>" _
onsubmit="return verifica_dados(this);">
<center>
<Table bgcolor="aqua" border="0">
<tr><td>
<b>Nome (*): </b>
<input type="text" size="60" name="nome" value="<%=nome%>"> 
</td></tr><tr><td>
<b>E-Mail(*): </b>
<input type="text" size="60" name="email" value="<%=email%>"> 
</td></tr><tr></tr>
<tr><td>
<b>Mensagem : <font color=blue>Obs: (*) Preenchimento obrigatório</font></b>
<textarea rows="3" name="mensagem" value="<%=mensagem%>" cols="60"></textarea> 
</td></tr><tr><td> 
<input type="submit" value="Assinar" name="B1"> 
<input type="reset" value="Limpar" name="B2"> 
</td></tr>
</table>
</form> 

Acabei... Agora é só você deixar a sua mensagem : livro de visitas

Referências:


José Carlos Macoratti