Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Salgado

Contador de Visitas com BD

Recommended Posts

Código simples, será necessário:

Um BD ACESS no exemplo "Visitas", com uma tabela "Contador" com os campos: Visitas (num), Ultimo_Visitante (Data), IP (Num) e ID (Num).

<%@ Language=VBScript %>
<!--
********************
*_Contador de Visitas _*
*__Por: Alex Salgado__*
*____18/07/2003_____*
********************
-->
<!--#include file="adovbs.inc"-->
<%
if session("Visitas")="" or session("Visitas")=0 or session("ip")="" or session("ip")=0 or session("ip")<>Request.ServerVariables("REMOTE_ADDR") or session("id")="" or session("id")=0 or session("id")<>session.SessionID then ' Verifica se o usuário já foi contado, evita que seja contado com um refresh
set conn = server.createObject("ADODB.Connection")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Visitas.mdb") & ";"
sql="select Top 1 from Contador order by Visitas desc" 'Seleciona o ultimo visitante
Set Contador = server.CreateObject("ADODB.RecordSet")
Contador.Open sql,conn,adOpenDynamic,adLockOptimistic,adCmdTable

Visitas=cint(cint(Contador("Visitas"))+1)
session("Visitas")=Visitas
Session("UltimaVisita")=Contador("Ultimo_visitante")
session("IP")=Request.ServerVariables("REMOTE_ADDR")
session("ID")=session.SessionID

Contador.addnew
Contador("Visitas")=cint(Visitas)
Contador("Ultimo_visitante")=cdate(Now())
Contador("IP")=session("IP")
Contador("ID")=session("ID")
Contador.update

Contador.Close
set Contador= nothing
conn.Close
set conn= nothing
end if
%>
Visitas= <%=session("Visitas")%><br>
Ultima Visita= <%=session("UltimaVisita")%><BR>
Ultimo IP= <%=session("IP")%><BR>
Ultimo ID= <%=session("ID")%>

Pode ser mais aprimorado, mas é um contador simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ele adiciona o ip de todos os visitantes?

 

Se tiver 1000 visitas ele vai ter 1000 ips?

Fiz esse pensando em um Histórico de visitas, tipo IP tal visitou tantas vezes.

Mas para não armazenar cada visita e só a ultima, é substituir Aqui:

sql="select Top 1 from Contador order by Visitas desc" 'Seleciona o ultimo visitante

Por:

sql="Contador"

, E comentar essa linha:

Contador.addnew
, que ele pára de adicionar registros e somente atualiza o, se assim for desde o inicio, primeiro e unico registro.

Obrigado pela observação D.eleete!

 

 

Valeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

;) q isso salgado.. eh q eu ja viajei com a sua idéia, mas eu to no trampo.. se eu chegar em casa eu posto aqui a ideia q eu tive pensando no seu codigo! :D abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

;) Tranquilo D.eleete, até gostei do seu comentário, pois havia esquecido de mencionar que ele grava cada visita, e como fazer para isso não ocorrer!

 

 

Valeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal, fiz hj um desses..... mais ou menos assim o código..

<!--#include file="conexao.asp"--><%ip = request.servervariables("REMOTE_ADDR")site = request.Servervariables("SERVER_NAME")data = day(now)&"/"&month(now)&"/"&year(now)sql = "select * from contador2 where ip = '"&ip&"' and site = '"&site&"'"set rs = conexao.execute(sql)if rs.eof then	sql2 = "insert into contador2(site,ip,contador,data) values('"&site&"','"&ip&"',1,'"&data&"')"	conexao.execute(sql2)else	if (strcomp(rs("data"),data,1)= 0) then  sql3 = "update contador2 set contador = contador + 1 where ip = '"&ip&"' and site = '"&site&"'"  conexao.execute(sql3)	else  sql4 = "insert into contador2(site,ip,contador,data) values('"&site&"','"&ip&"',1,'"&data&"')"  conexao.execute(sql4)	end ifend if%>

deu certo aqui pra mim........... agora vou fazer a parte pra listar como consulta...

ps: nao gosto muito de colocar códigos meus prontos nao, pq assim o cara que tá aprendendo não se interessa em fazer, só pega pronto ...

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe o q eu pensei salgado.. o seguinte:Criar uma tabela pra colocar somente o numero de visitas.. tipo 2000 visitas . . e uma outra tabela com as ultimas 100 visitas detalhadas com IP por exemplo... . . ai da um select count.. e toda vez q tiver 100 ele pega a primeira e deleta :angry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salgado estou tentando usar este código seu de contador de visitas, mas como sou leigo estou tendo dificuldades.

 

Estou testando direto no servidor de hospedagem do www.libihost.net.

 

Eu preciso colocar no servidor aquele arquivo adovbs.inc ?

E se estou testando direto no servidor de hospedagem eu preciso igual criar uma fonte de dados odbc no meu pc ?

 

O erro que está dando quando acesso direto a página (www.libihost.net/joaogil/contador.asp) é esse:

 

Microsoft OLE DB Provider for ODBC Drivers erro '80040e14'

 

[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na cláusula FROM.

 

/joaogil/contador.asp, line 16

 

Ajude-me por favor !!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com relação ao ADOVBS.inc, fiz uma pequena alteração para não ser preciso seu uso.

<%@ Language=VBScript %>
<!--
********************
*_Contador de Visitas _*
*__Por: Alex Salgado__*
*____18/07/2003_____*
********************
-->
<%
if session("Visitas")="" or session("Visitas")=0 or session("ip")="" or session("ip")=0 or session("ip")<>Request.ServerVariables("REMOTE_ADDR") or session("id")="" or session("id")=0 or session("id")<>session.SessionID then ' Verifica se o usuário já foi contado, evita que seja contado com um refresh
set conn = server.createObject("ADODB.Connection")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Visitas.mdb") & ";"
sql="select Top 1 * from Contador order by Visitas desc" 'Seleciona o ultimo visitante
Set Contador = server.CreateObject("ADODB.RecordSet")
Contador.Open sql,conn,3,3

Visitas=cint(cint(Contador("Visitas"))+1)
session("Visitas")=Visitas
Session("UltimaVisita")=Contador("Ultimo_visitante")
session("IP")=Request.ServerVariables("REMOTE_ADDR")
session("ID")=session.SessionID

Contador.addnew
Contador("Visitas")=cint(Visitas)
Contador("Ultimo_visitante")=cdate(Now())
Contador("IP")=session("IP")
Contador("ID")=session("ID")
Contador.update

Contador.Close
set Contador= nothing
conn.Close
set conn= nothing
end if
%>
Visitas= <%=session("Visitas")%><br>
Ultima Visita= <%=session("UltimaVisita")%><BR>
Ultimo IP= <%=session("IP")%><BR>
Ultimo ID= <%=session("ID")%>

Não é preciso criar álias pelo ODBC esse contador usa string de conexão. Com relação ao erro, seu BD segue exatamente a estrutura que passei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os ampos do meu BD está do jeito que você falou e na mesma ordem:

 

Visitas (num)

Ultimo_Visitante (data)

IP (num)

ID (num)

 

Todos os campos com iniciais maiúsculas e sem chave primária.

 

Inclusive mudei esses campos em negrito abaixo por maiúscula:

 

if session("Visitas")="" or session("Visitas")=0 or session("IP")="" or session("IP")=0 or session("IP")<>Request.ServerVariables("REMOTE_ADDR") or session("ID")="" or session("ID")=0 or session("ID")<>session.SessionID then

 

O erro agora é esse:

 

Microsoft OLE DB Provider for ODBC Drivers erro '80040e14'

 

[Microsoft][Driver ODBC para Microsoft Access] A instrução SELECT inclui uma palavra reservada ou um nome de argumento que está incorreto ou faltando, ou a pontuação está incorreta.

 

/joaogil/contador.asp, line 15

 

Eu acho que é essa linha:

 

set conn = server.createObject("ADODB.Connection")

Compartilhar este post


Link para o post
Compartilhar em outros sites

você diz em todo o Server?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele me retornou este erro, Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][Driver ODBC para Microsoft Access] A entrada de uma consulta deve ter pelo menos uma tabela ou consulta./Marcio_Leandro/pesquisa/ASP/contador c bd/contador.asp, line 15pode me judar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.