ASP Básico - Implementando um contador em suas páginas ASP

 
Que tal um contador em sua página para indicar o número de acessos ? É bem mais simples do que você pensa. Vamos usar um arquivo texto para armazenar o número de acessos e incrementá-lo a cada requisição do usuário á nossa página.
 
As etapas envolvidas são as seguintes:
 
1-) Criamos o objeto que permite o acesso a arquivos. Usamos o componente FileSystemObject. (Poderiamos ter usado um banco de dados)
 
2-) Criamos um arquivo texto para armazenar o valor do contador. Fazemos isso usando o nome do arquivo de script acrescido da extensão .cnt.

3-) A cada requisição da página pelo usuário abrimos o arquivo lendo o seu conteúdo e incrementando o valor de uma unidade

4-) Se o arquivo não existir iniciamos o contador do zero( iconta := 0)

5-) A seguir atribuímos o valor a uma variável iconta.

6-) Fechamos os objetos e visualizamos o valor do contador.
 
O código script do arquivo contador.asp é dado a seguir
<%
' Declarando as variaveis usadas
Dim objFSO, objContador     ' variável de acesso a arquivos (FileSystemObject ) e objeto contador
Dim strArqTexto                     ' nome do arquivo texto
Dim iConta                            ' variavel que incrementa o contador
Dim I                                     ' variavel usada no loop

' Monta o nome do arquivo texto com extensão  .cnt a partir do nome do arquivo de script 
strArqtTexto = Server.MapPath(Request.ServerVariables("SCRIPT_NAME") & ".cnt")

'Cria o objeto de acesso ao arquivo texto 
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

' Abre o arquivo texto
Set objContador = objFSO.OpenTextFile(strArqTexto, 1, True)

' Le o conteudo atual do arquivo texto
If Not objContador.AtEndOfStream Then
	' determina o valor do contador
	iConta = CLng(objContador.ReadAll)
Else
	' se o arquivo nao existe inicia com zero
	iConta = 0
End If

' Fecha  o arquivo e destroi o objeto
objContador.Close
Set objContador = Nothing

' incrementa o contador
iConta = iConta + 1

' Sobrescreve o arquivo texto existente 
Set objContador = objFSO.CreateTextFile(strArqTexto, True)

' Salva e Atualiza o contador
objContador.Write iConta

' fecha e destroi o objeto
objContador.Close
Set objContador = Nothing

' Destroi o objeto  FSO 
Set objFSO = Nothing

‘escreve o  numero de acessos
Response.Write iConta
%>
Podemos implementar o script acima usando a diretiva include em uma página ASP. A sintaxe é dada a seguir:

<!-- #INCLUDE FILE="contador.asp" -->

Iremos aproveitar o exemplo anterior e incluir o arquivo contador.asp usando a diretiva include. O ínicio do script já com a diretiva include fica assim:

<html>
<head>
<TITLE>paginando.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<!--#INCLUDE VIRTUAL="\ADOVBS.INC" -->
<!--#INCLUDE FILE="contador.asp" -->
<%
...
...
...
%>
<hr>
<b>Numero total de registros no Recordset <%=contador%></b><br>
<b>Numero de Acessos a esta página : <%=iconta%></b>

</BODY>
</HTML>

O resultado do processamento deste script é o seguinte:

Implementando um contador de páginas usando um banco de dados
 
Vamos fazer o mesmo serviço feito no exemplo anterior , com uma diferença, vamos usar um banco de dados para armazenar o nome da página e o número de acessos que a mesma recebeu. Pode parecer um exagero usarmos um banco de dados para tal tarefa , afinal a utilização de componentes COM consome mais recursos do servidor, mas você pode pensar em um arquivo para estatísticas para justificar o ‘exagero’:
 
Os arquivos usados neste exemplo são:
 
1-) contador.mdb – Um banco de dados para armazenar o nome da página e número de acessos. A tabela acessos , contida em contador.mdb, possui a seguinte estrutura:
Percebemos que a tabela acessos possui os seguintes campos:

a -) n_acessos ( Tipo Número ) – que irá armazenar o número de acessos da página

b-) pagina ( Tipo texto ) – irá armazenar o nome da página
 
2-) contador_db.asp – O arquivo de script Asp onde temos o código que acessa o banco de dados contador.mdb , e, usando uma instrução SQL abre a tabela acessos e incrementa o contador toda vez que a página for acessada.
<%
' Usando uma função evitamos o conflito com nome de variaveis que
' porventura o usuario esteja usando em seu codigo
Function Retorna_Acessos()
’variáveis ADO
Const adOpenKeyset = 1
Const adLockPessimistic = 2
Const adCmdText = &H0001
 
' Variáveis locais
Dim strArquivo
Dim strSQL
Dim rsContador
Dim iContador
 
' cria uma consulta SQL usando o nome do script
strArquivo = Request.ServerVariables("SCRIPT_NAME")
strSQL = "SELECT pagina, n_acessos FROM acessos WHERE pagina='" & strArquivo & "';"
 
' abre um recordset
Set rsContador = Server.CreateObject("ADODB.Recordset")
 
' acesso a uma base de dados Access
rsContador.Open strSQL, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("contador.mdb") & ";", adOpenKeyset, adLockPessimistic, adCmdText
 
'Se não existe registro ainda vamos incluir um registro
If rsContador.EOF Then
rsContador.AddNew
iContador = 0
rsContador.Fields("pagina").Value = strArquivo
Else
'Se já existe registro le o registro a atualiza o contador
rsContador.MoveFirst
iContador = rsContador.Fields("n_acessos").Value
End If
 
' incrementa o contador e atualiza a base de dados
rsContador.Fields("n_acessos").Value = iContador + 1
rsContador.Update
 
' fecha a conexao
rsContador.Close
Set rsContador = Nothing
 
' retorna o contador
Retorna_Acessos = iContador + 1
End Function
%>
3-) pagina1.asp – Uma página script de exemplo onde usamos a instrução – INCLUDE- para incluir o arquivo de script contador_db.asp
<!-- #INCLUDE FILE="contador_db.asp" -->
<html>
<head>
<title>Pagina Um</title>
</head>
<body>
A << PAGINA UM >> ja teve <%= Retorna_acessos() %>
acessos
</body>
</html>
4-) pagina2.asp - Outra página de script de exemplo onde usamos a instrução – INCLUDE- para incluir o arquivo de script contador_db.asp
<!-- #INCLUDE FILE="contador_db.asp" -->
<html>
<head>
<title>Pagina Dois</title>
</head>
<body bgcolor="white" text="blue">
A << PAGINA DOIS >> ja teve <%= Retorna_acessos() %>
Acessos
</body>
</html>
A contagem é feita pelo arquivo contador_db.asp que é incluido nas páginas que desejamos controlar o número de acessos. Cada vez que acessamos a pagina1.asp ou a página2.asp o contador é incrementado as informações armazenadas na tabela acessos do banco de dados contador.mdb. As figuras a seguir ilustram

O arquivo contador_db.asp é uma função que retorna o número de acesso para a página sendo visitada. Para ativar a função basta usar a instrução

<%= Retorna_acessos() %> na página que desejamos controlar.

A gravação é feita usando os métodos Addnew/Update da ADO e a instrução SQL usada é a seguinte:

"SELECT pagina, n_acessos FROM acessos WHERE pagina='" & strArquivo & "';"
 
Onde temos que selecionar (SELECT) a página e o número de acessos da tabela (FROM) acessos onde a pagina for igual a variável strArquivo que armazena o nome do arquivo de script sendo executado.

E estamos conversados , até o próximo artigo da série ASP Básico...


 José Carlos Macoratti