Foros del Web » Programando para Internet » ASP Clásico »

Ultimas visitas reales...

Estas en el tema de Ultimas visitas reales... en el foro de ASP Clásico en Foros del Web. Hola compañeros! Desde hace tiempo vi un código el cual contada las 10 últimas visitas de la página, pues bien, estoy intentando adaptarlo para que ...
  #1 (permalink)  
Antiguo 08/04/2003, 10:19
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Ultimas visitas reales...

Hola compañeros!

Desde hace tiempo vi un código el cual contada las 10 últimas visitas de la página, pues bien, estoy intentando adaptarlo para que me diga las 10 ultimas visitas en nuestro site en general, colocando parte del codigo en el global.asa.

(el problema del codigo que encontré hace tiempo es que sólo cuenta en las 10 ultimas visitas si entras en la página aquella, por eso quise adaptarlo en forma global)

Tengo esto en el Global.asa:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sub Session_OnStart() 'SENTENCIAS QUE SE EJECUTAN CADA VEZ QUE ENTRA UN USUARIO.

' ########################### Contador de últimas 10 visitas ###########################
Application.lock
IF NOT isArray( Application( "Ultimos10" ) ) THEN
Dim Array ( 10, 2 )
Application("Ultimos10") = Array
End If
Ultimos10 = Application("Ultimos10")
Application.unlock

If Ultimos10( 9, 0 ) <> "" THEN
For i= 0 to 9
Ultimos10( i, 0 ) = Ultimos10 ( i + 1, 0 )
Ultimos10( i, 0 ) = Ultimos10 ( i + 1, 1 )
Ultimos10( i, 0 ) = Ultimos10 ( i + 1, 2 )
Next
End If

For i= 0 to 9
If Ultimos10( i, 0 ) = "" THEN
Ultimos10( i, 0 ) = Request.ServerVariables( "REMOTE_ADDR" )
Ultimos10( i, 1 ) = Request.ServerVariables( "HTTP_USER_AGENT" )
Ultimos10( i, 2 ) = Now()
EXIT FOR
END IF
NEXT

Application.Lock
Application( "Ultimos10" ) = Ultimos10
Application.UnLock
' ####################### Fín del contador de últimas 10 visitas #######################

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(ENTRE OTRAS COSAS EVIDENTEMENTE )

Pues después tengo otra página llamada "visitados_por.asp"
con este texto:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<% Ultimos10 = Application("Ultimos10") %>
<html><head>

<title>Últimas 10 Visitas recibidas...</title>
<meta name="author" content="Francesc Mula Calleja">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<Meta http-equiv="imagetoolbar" Content="no">

<link href="public/estilos.css" rel="stylesheet" type="text/css">
<SCRIPT language="JavaScript" src="public/seleccion.js"></SCRIPT>

</head>

<body oncontextmenu="return false">
<p align="center"><font color="#000000" size="4" face="Verdana, Arial, Helvetica, sans-serif" class="T&iacute;tulo1">&Uacute;ltimas
10 visitas a nuestra web</font></p>
<center>
<table border=1 cellpadding=3 cellspacing=0 bordercolor="#000000" bgcolor="#ccccc">
<tr bordercolor="#333333">
<td bgcolor="#F0F0F0"> <div align="center"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Visitas</font></strong></div></td>
<td bgcolor="#F0F0F0"> <div align="center"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Dirección
IP</font></strong></div></td>
<td bgcolor="#F0F0F0"> <div align="center"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Navegador</font></strong></div></td>
<td bgcolor="#F0F0F0"> <div align="center"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Hora
de Visita</font></strong></div></td>
</tr>
<%
FOR i = 0 TO 9
IF Ultimos10( i, 0 ) <> "" THEN
%>
<tr bordercolor="#333333" bgcolor="#FFFFFF">
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><small><%=i + 1%></small></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><small><%=Ultimos10( i, 0 )%>
</small></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><small><%=Ultimos10( i, 1 )%></small></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><small><%=Ultimos10( i, 2 )%></small></font></td>
</tr>
<%
END IF
NEXT
%>
</table>
</center>
</body></html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

En cierta parte, estoy contento con el resultado, pues este se muestra satisfactorio hasta que el array es recorrido en su totalidad ( es decir, cuando ya HEMOS RECIBIDO 10 ULTIMAS VISITAS) éste se trastorna y muestra cosas erroneas como la hora en la ip.

Espero que me entiendan y si quieren verlo en funcionamiento entren en mi humilde web que tiene mucho que envidiar a todas las demás, y visiten el link de "ultimas visitas" verán que se agrega bien hasta que se complete el listado, una vez completo (cuando hayan 10 ultimas visitas) éste listado empieza a deformarse.
Pueden hacer la prueba entrando hasta 10 veces en el site.


Gracias por adelantado y perdon por el TEXTO tan amplio que dejo :-p .

Saludos!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #2 (permalink)  
Antiguo 08/04/2003, 10:44
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Resumen :

Al tener este codigo colocado donde se dice, éste es correcto hasta que las 1o últimas visitas son completas (el array) y entonces en las siguientes visitas se muestra mal (haciendo que la hora de visita salga en la ip del usuario).

Sabe alguien porque? me puede alguien ayudar? dar alternativas?

Gracias de antemano!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #3 (permalink)  
Antiguo 08/04/2003, 14:08
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Ven algo anormal? raro?....

En fín...estoy fustrado por una tonteria.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #4 (permalink)  
Antiguo 08/04/2003, 17:12
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
SEGURO QUE ALGUIEN PUEDE AYUDARME...

Insisto demasiado, pero el refrán dice: quien insiste...algo consigue

Miren, con todo el código que he posteado en el anterior mensaje, consigo obtener resultados como éste:



Aqui se observa que el funcionamiento es correcto, el array esta bien recorrido, está recién completado las 10 últimas visitas.

El problema es ahora, que un nuevo usuario entra en el site provocando este caos en la tabla, lo cual no entiendo y agradecería que me ayudaran:



Aquí se muestra el conflicto que intenté explicar anteriormente.
Yo supongo que es algún error de array, que debido que soy nulo en ese sector... no sé donde pillar el asunto.

Gracias por leer...

¡Saludos!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #5 (permalink)  
Antiguo 08/04/2003, 17:57
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 2 meses
Puntos: 1
Yo tengo un sistema igual de estadisticas pero cada visitante lo escribo en una tabla de una base de datos.
Uso las variables del servidor para capturar fecha, hora, IP, navegador, etc.

Despues puedes consultarlo de forma sencilla haciendo una SQL y ordenando o mostrando solo los 10 ultimos:
SQL="select top 10 * from tu_tabla order by fecha desc"

Me imagino que tal vez haya problemas al crear las variables de sesion mientras entran diferentes usuarios.
De todas formas si reinicias el servidor perderas la lista de visitas y tampoco puedes mantener un historico.

Mi consejo es que metas un #INCLUDE con la pagina que captura los datos y los añade a la base, en la pagina donde quieras hacer esas estadisticas.
En esa misma pagina usa otro #include o directamente una SQL para poner los datos.

Mira como tengo yo hecho esto.
http://bicicletasblanco.com/estadisticas.asp
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #6 (permalink)  
Antiguo 08/04/2003, 18:11
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Maestro, quiero entenderte (gracias por contestar)

En el global asa creo variables de session con el valor de cada uno y lo introduzco en una base de datos a mi gusto, ¿no?

.....
session("ip_usuario") = Request.ServerVariables( "REMOTE_ADDR" )
.... (y siguientes)

y entonces ésta la introduzco en la base de datos?
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #7 (permalink)  
Antiguo 08/04/2003, 18:18
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Si es así, entonces desde global.asa se puede ejecutar y grabar en una BD, no?

De antemano gracias, no haré más preguntas hasta que haya intentado algo.

Maestro axias.
Salu2!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #8 (permalink)  
Antiguo 08/04/2003, 19:37
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 2 meses
Puntos: 1
Efectivamente puedes meter codigo en la seccion ON_START del global.asa
Yo sin embargo lo que hago es meterle un #include y con el mismo codigo capturo las visitas en cualquier pagina que quiera "trackear"

Esto es un ejemplo de lo que se puede hacer:

<%
set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("visitas.mdb")


IP=Request.ServerVariables("Remote_Addr")
fecha=date
hora=time
navegador=Request.ServerVariables("HTTP_USER_AGENT ")
idioma=Request.ServerVariables("HTTP_ACCEPT_LANGUA GE")
procedencia=Request.ServerVariables("HTTP_REFERER" )
' Trabajamos sobre una tabla llamada visitantes
SQL="SELECT * FROM visitantes"
rs.Open SQL, oConn,1,2

'A partir de aqui escribo los datos
rs.addnew
rs("fecha")=fecha
rs("hora")=hora
rs("IP")=IP
rs("idioma")=idioma
rs("navegador")=navegador
rs("procedencia")=procedencia
rs.update
rs.close
%>
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net

Última edición por maestro; 08/04/2003 a las 19:40
  #9 (permalink)  
Antiguo 09/04/2003, 01:38
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Gracias, probaré durante esta semana y te diré que tal.

Salu2!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #10 (permalink)  
Antiguo 09/04/2003, 11:22
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Hola de nuevo chic@s:

He realizado todo esto y bien... salvo una pequeña pregunta que quisiera me ayudaran:

' ~~~~ Guardamos las visitas en la BD ~~~~
Application.Lock()
IP_Usuario = Request.ServerVariables( "REMOTE_ADDR" )
Soft_Usuario = Request.ServerVariables( "HTTP_USER_AGENT" )
Hora_Usuario = Now()

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("ConexionContadores")
SQLQuery1 = " INSERT INTO Visitantes (IP_Usuario, Soft_Usuario, Hora_Usuario) VALUES ('"&IP_Usuario&"', '"&Soft_Usuario&"', '"&Hora_Usuario&"') "
Conn.EXECUTE(SQLQuery1)
Application.Unlock()
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ese es el código que he empleado para salvar las visitas desde el global.asa en una BD.
Todo es correcto, va añadiendo registros en la tabla de visitantes correctamente...

Pero cuando quiero mostrar el número de visitas que he recibido, no consigo imprimirlo en pantalla como antes.

Utilizo esto:


SQLQuery2 = " SELECT Count(Id) FROM Visitantes "
Set RS2 = Conn.EXECUTE(SQLQuery2)
' e intento convertirlo en una variable o que?
' Acá supongo que tengo el número de visitas totales, pero no se conservarlo en una variable para poder imprimirlo.

session("Visitas") = RS2

' y entonces desde donde quiera imprimirlo....

Visitas = session("Visitas")

pero esto no resulta.


Gracias de antemano.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #11 (permalink)  
Antiguo 09/04/2003, 12:09
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Para que me entiendan...

Al tener en la tabla VISITANTES X registros con una fila de Id (numerando las visitas)

Como puedo imprimir en pantalla el numero de visitas que llevo?
(es decir, el ultimo registro o la cuenta de ellas)

Gracias
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #12 (permalink)  
Antiguo 09/04/2003, 12:28
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 2 meses
Puntos: 1
SQL="select top 1 * from tu_tabla order by id desc"

Eso te devuelve solo el primer ID ordenado descendentemente, es decir, el numero mas grande o la ultima visita.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #13 (permalink)  
Antiguo 09/04/2003, 12:38
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 23 años
Puntos: 1
Gracias maestro, era lo que buscaba....

Sin embargo... jejeje encontré unas alternativas justo antes de tu mensaje, lo posteo para que la gente lo tenga en cuenta.

Gracias eh maestro


SQLQuery = "SELECT MAX(id) AS TOTAL from visitantes "

o

SQLQuery = "SELECT COUNT(id) AS TOTAL from visitantes "

y a estos le pongo:

session("visitas") = rs("total").

Lo dejo para quien lo quiera saber.

Saludos!


MAESTRO, sin embargo, he observado que en tu anterior POST ponías esta linea de código entre tu conexión, la cual no entiendo y agradecería que me dijeras para que es:

set rs=Server.CreateObject("ADODB.Recordset")

Salu2!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #14 (permalink)  
Antiguo 09/04/2003, 15:46
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 2 meses
Puntos: 1
Es para crear el objeto RECORDSET que te permite recorrer tu tabla, sin el no puedes hacer una consulta SQL.

Mas info
http://aspfacil.com/articulos/verarticulo.asp?id=65
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:44.