Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Contar las visitas solo una vez con php

Hola a todos,
Espero me puedan ayudar. Siguiendo el tutorial de Zeus me ha surgido una duda a la hora de implementar un contador de visitas real para cada página.
Necesito saber las visitas recibidas en cada post, teniendo en cuenta las cookies. Es decir, contar solo la primera vez que accede a la página y si la refresca que no se actualice, ya que de esta manera se estaría incrementando el número de visitas y sería falso. También quiero que se agregue el contador para cada post en la BD.
Espero haberme explicado bien y puedan ayudarme.
Muchas gracias,
0
Puntos
2950
Visitas
7
Resp
Por Irmerov hace 56 meses
Principiante
Respuesta #1
en principio si una persona visita dos veces la misma pagina son dos visitas por ejemplo en youtube funciona así si recargas la pagina cuenta dos reproducciones

dicho esto claro que se puede contar una visita por usuario como? mediante la ip que puedes obtener como ya bien sabes con esto
$ip=$_SERVER['REMOTE_ADDR'];
tendrías que hacer una tabla solo para las visitas y guardar las ip del visitante y después mediante una condicional (if y else) pedirle al servidor que te haga el UPDATE siempre y cuando se cumpla una condición

para que te cuente solo la primera tendrías que poner una columna en tu tabla visitas con un estado por ejemplo si el estado es 0 que cuenta la visita si es 1 que no la cuente, por supuesto tendrás que hacer que al contar la primera visita el campo estado pase de 0 a 1

si es algo lioso y por supuesto que lo puedes hacer de 1000 maneras yo te doy la idea
0
Puntos
Por zeuskx hace 56 meses
Administrador Sitio web
Respuesta #2
la idea que te a dado zeus es la correcta tienes que hacer una tabla solo para las visitas si quieres tenerlas controladas de otra manera, no olvides guardar la id de cada articulo en esa tabla para hacer la comprobación en cada pagina de las 2 cosas: la ip y la id.

yo opino que el tema de las visitas si un usuario visita mi articulo hoy por ejemplo y mañana vuelve son 2 visitas te pongo un ejemplo:
Una mañana voy a un centro comercial que esta a 50 kilometros y me compro una camiseta resulta que llego casa me la pruebo y no me convence, al día siguiente voy otra vez a cambiarla y hago otros 50 kilometros, cuantas visitas eh dado a la tienda?== 2

pero bueno son conceptos cada uno controla si sitio como mas le gusta espero que sirva de ayuda xd
0
Puntos
Por alber hace 56 meses
Administrador
Respuesta #3
Gracias a los dos por contestar. Pero yo me refería a que tal y como esta si el usuario o alguien con mala intención se le ocurre la idea de refrescar la pagina un millón de veces el numero de visitas aumenta y no es real.
0
Puntos
Por Irmerov hace 56 meses
Principiante
Respuesta #4
Olvidaba una cosa. Si se hace por ip y los usuarios que se conectan pertenecen a una red general, por ejemplo de una o fina, solo me detectaría 1 visita en vez de por ejemplo 10 usuarios que han visitado la pagina
0
Puntos
Por Irmerov hace 56 meses
Principiante
Respuesta #5
en teoría cada red tiene su ip por ejemplo si en una misma casa hay dos ordenadores la dirección ip de su isp es la misma y solo te contaría una visita claro, de todos modos la idea de guardar la ip te sirve para guardar otra cosa como una cookie o que se yo.

Sobre el tema de los usuarios mal intencionados que refresquen la pagina tendrías que hacer una especie de conteo de seguridad por ejemplo youtube cuando el contador de un vídeo llega a 301 se congela y hasta que no revisan que son ip's diferentes no las cuentan como buenas

con lo que tienes puedes jugar un poco para adaptarlo como mas te guste
0
Puntos
Por zeuskx hace 56 meses
Administrador Sitio web
Respuesta #6
Si, estoy en ello. Muchas gracias
0
Puntos
Por Irmerov hace 56 meses
Principiante
Respuesta #7
crea una tabla y la llamas visitas por ejemplo con 3 columnas id (int), visitante (varchar/100) y idpost (int), en la pagina ver post pones el siguiente script:
<?php 

	$visitante=$_SERVER['REMOTE_ADDR'];
	$iddelpost=$_GET['idpost'];
	
	//Comprueba si el usuario con esa ip ya a visitado esa pagina
	mysql_select_db($database_conexion, $conexion);
	$query_Visitas = sprintf("SELECT * FROM visitas WHERE visitante = %s AND idpost = %s", 
	GetSQLValueString($visitante, "text"),
	GetSQLValueString($iddelpost, "int"));
	
	$Visitas = mysql_query($query_Visitas, $conexion) or die(mysql_error());
	$row_Visitas = mysql_fetch_assoc($Visitas);
	$totalRows_Visitas = mysql_num_rows($Visitas);
	
	
	//Si no encuentra nada es por que el usuario con esa ip no a visitado esa pagina y suma una visita
	if ($totalRows_Visitas==0){
		
		  $insertSQL = sprintf("INSERT INTO visitas (visitante, idpost) VALUES (%s, %s)",
                       GetSQLValueString($visitante, "text"),
                       GetSQLValueString($iddelpost, "int"));

  mysql_select_db($database_conexion, $conexion);
  $Result1 = mysql_query($insertSQL, $conexion) or die(mysql_error());
		
	}
	
	
	mysql_free_result($Visitas);
	
	//Para sacar la cantidad de visitas reales
	
	mysql_select_db($database_conexion, $conexion);
	$query_VisitaReal = sprintf("SELECT * FROM visitas WHERE idpost = %s", 
	
	GetSQLValueString($iddelpost, "int"));
	
	$VisitaReal = mysql_query($query_VisitaReal, $conexion) or die(mysql_error());
	$row_VisitaReal = mysql_fetch_assoc($VisitaReal);
	$totalRows_VisitaReal = mysql_num_rows($VisitaReal);
	
	
	//Total visitas ip única
	echo $totalRows_VisitaReal;
	
	mysql_free_result($VisitaReal);



?>
espero que sea los mas claro posible, básicamente lo que hace es sumar 1 visita solo si la ip es única es decir no a visitado esa pagina

Saludos Irmerov
0
Puntos
Por zeuskx hace 53 meses
Administrador Sitio web
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate