Foros del Web » Programando para Internet » PHP »

contador por click no cuenta...!!!!

Estas en el tema de contador por click no cuenta...!!!! en el foro de PHP en Foros del Web. Saludos tengo un sistema de productos que posee un contador el cual suma las visitas por cada productos por individual... lo q pasa es q ...
  #1 (permalink)  
Antiguo 09/07/2008, 07:46
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
De acuerdo contador por click no cuenta...!!!!

Saludos
tengo un sistema de productos que posee un contador el cual suma las visitas por cada productos por individual...
lo q pasa es q no esta contando... trate de hacer una comprobacion por IP para restringir el acceso cada 24 horas pero no me anda... no me da error ni nada pero siempre las visitas me las muestra en 0
aqui les dejo el codigo
Código PHP:
<?php require_once('Connections/multisillas.php'); 

if (!
function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$colname_Recordset1 "-1";
if (isset(
$_GET['id'])) {
  
$colname_Recordset1 $_GET['id'];
}
mysql_select_db($database_multisillas$multisillas);
$query_Recordset1 sprintf("SELECT * FROM productos WHERE id = %s"GetSQLValueString($colname_Recordset1"int"));
$Recordset1 mysql_query($query_Recordset1$multisillas) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);

$producto_ID $_GET['id'];

$sqlQuery mysql_query("SELECT * FROM productos
                         WHERE id = '$producto_ID'"
)
                         or die(
mysql_error());
$row mysql_fetch_array($sqlQuery);

if(!empty(
$producto_ID)){
    
$ip $_SERVER['REMOTE_ADDR'];
    
$hitProductoID $row['id']; 
    
$hitIP ip2long($ip);   
    
$date date("F j, Y, g:i a");
    
$sqlInsert mysql_query("INSERT INTO hits (hitIP, date, hitProductoID)
                              VALUES ('$hitIP', '$date', '$hitProductoID')"
)
    or die(
mysql_error());
}

$sqlHitsQuery mysql_query("SELECT * FROM hits
                             WHERE hitProductoID = '$producto_ID'"
)
                             or die(
mysql_error());
$hits mysql_num_rows($sqlHitsQuery);

$comprobarIP "SELECT hitIP FROM hits where hitIP = '$hitIP'" ;  
$res mysql_query($comprobarIP) or die(mysql_error());   

if (
mysql_num_rows($res) == 0) {   

$suma = (hitTotal 1);

mysql_query("UPDATE hits SET hitTotal = '$suma'") or die(mysql_error()); 
}  ;

?>
Gracias
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #2 (permalink)  
Antiguo 09/07/2008, 08:07
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

Hola T4ke0veR

no te veo definir cuanto vale la variable hitTotal
Intentalo asi, pero ten en cuenta que si las IP´s
dinamicas, en mi pais casi todas, siempre estan cambiando, creo que usar IP´s es un sistema no fiable, aunque valido, de hacer conteos de visita, porque al cambiarle la IP a un usuario, esa IP la coge otro que nunca estuvo visitando tu pagina, y no le contara la visita aunque sea nueva.
Es dificil ese tipo de coincidencias, pero creo que es asi.



Código PHP:

$comprobarIP 
"SELECT hitIP FROM hits where hitIP = '$hitIP'" ;   
$res mysql_query($comprobarIP) or die(mysql_error());    

if (
mysql_num_rows($res) == 0) {    



mysql_query("UPDATE hits SET hitTotal = hitTotal + 1") or die(mysql_error());  
}  ; 
Un saludo

Última edición por jaronu; 09/07/2008 a las 08:22
  #3 (permalink)  
Antiguo 09/07/2008, 08:31
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

Hola Jaronu.. gracias por tu respuesta!!!
ya me funciona... pero como bien dices las IP son dinámicas y quizas no sea un metodo fiable... pero q otras opciones podemos usar???
yo trato de validar y de = manera no hace nada!!!!
Código PHP:
<?php require_once('Connections/multisillas.php'); 

if (!
function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$colname_Recordset1 "-1";
if (isset(
$_GET['id'])) {
  
$colname_Recordset1 $_GET['id'];
}
mysql_select_db($database_multisillas$multisillas);
$query_Recordset1 sprintf("SELECT * FROM productos WHERE id = %s"GetSQLValueString($colname_Recordset1"int"));
$Recordset1 mysql_query($query_Recordset1$multisillas) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);

$producto_ID $_GET['id'];

$sqlQuery mysql_query("SELECT * FROM productos
                         WHERE id = '$producto_ID'"
)
                         or die(
mysql_error());
$row mysql_fetch_array($sqlQuery);

if(!empty(
$producto_ID)){
    
$hitIP $_SERVER['REMOTE_ADDR'];
    
$hitProductoID $row['id'];    
    
$date gettimeofday ();
    
$sqlInsert mysql_query("INSERT INTO hits (hitIP, hitProductoID)
                              VALUES ('$hitIP', '$hitProductoID')"
)
    or die(
mysql_error());
}

$sqlHitsQuery mysql_query("SELECT * FROM hits
                             WHERE hitProductoID = '$producto_ID'"
)
                             or die(
mysql_error());
$hits mysql_num_rows($sqlHitsQuery);


mysql_query("UPDATE hits SET hitTotal = '$suma'") or die(mysql_error()); 
  

?>
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #4 (permalink)  
Antiguo 09/07/2008, 08:36
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

No entendi lo ultimo que escribiste, no decias que funcionaba?

yo trato de validar y de = manera no hace nada!!!!
  #5 (permalink)  
Antiguo 09/07/2008, 08:39
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

lo del IP... te inserta el ip... pero si refresco sigue contando :S
fijate aqui
http://indexa.com.ve/multisillas/ficha_prod.php?id=40
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #6 (permalink)  
Antiguo 09/07/2008, 08:52
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

Es cierto, pero en el primer codigo que posteaste, tenias un query y un IF, que ahora, en este segundo codigo que pusiste, no haces la consulta a la BBDD para saber si existe la IP
y tampoco el IF para comprobar si el numero de resultados es cero

Me LIO

Un saludo
  #7 (permalink)  
Antiguo 09/07/2008, 09:03
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

aaaah perdon ... ya lo acomodo... yo solo me hice un lio jeje
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #8 (permalink)  
Antiguo 09/07/2008, 09:07
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

listo...
te cuento.. con el segundo codigo q t mostre .. cuenta... y con este q es el primero agregando lo q me dijiste.. no cuenta
Código PHP:
<?php require_once('Connections/multisillas.php'); 

if (!
function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$colname_Recordset1 "-1";
if (isset(
$_GET['id'])) {
  
$colname_Recordset1 $_GET['id'];
}
mysql_select_db($database_multisillas$multisillas);
$query_Recordset1 sprintf("SELECT * FROM productos WHERE id = %s"GetSQLValueString($colname_Recordset1"int"));
$Recordset1 mysql_query($query_Recordset1$multisillas) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);

$producto_ID $_GET['id'];

$sqlQuery mysql_query("SELECT * FROM productos
                         WHERE id = '$producto_ID'"
)
                         or die(
mysql_error());
$row mysql_fetch_array($sqlQuery);

if(!empty(
$producto_ID)){ 
    
$ip $_SERVER['REMOTE_ADDR']; 
    
$hitProductoID $row['id'];  
    
$hitIP ip2long($ip);    
    
$date date("F j, Y, g:i a"); 
    
$sqlInsert mysql_query("INSERT INTO hits (hitIP, date, hitProductoID) 
                              VALUES ('$hitIP', '$date', '$hitProductoID')"

    or die(
mysql_error()); 


$sqlHitsQuery mysql_query("SELECT * FROM hits 
                             WHERE hitProductoID = '$producto_ID'"

                             or die(
mysql_error()); 
$hits mysql_num_rows($sqlHitsQuery); 

$comprobarIP "SELECT hitIP FROM hits where hitIP = '$hitIP'" ;    
$res mysql_query($comprobarIP) or die(mysql_error());     

if (
mysql_num_rows($res) == 0) {     



mysql_query("UPDATE hits SET hitTotal = hitTotal + 1") or die(mysql_error());   
}  ;  
?>
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #9 (permalink)  
Antiguo 09/07/2008, 09:10
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

Yo tambien me estoy liando ahora.

Si eres tu el que lo comprueba, sin apagar el router y el PC, estaras con la misma IP, y solo contaria 1 visita.

pero que es lo que pasa, que no te cuenta nisiquiera una??

Y el segundo codigo que posteaste e imposible que sume si nunca defines la variable $suma

Un saludo
  #10 (permalink)  
Antiguo 09/07/2008, 09:11
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

exacto..ni una sola
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #11 (permalink)  
Antiguo 09/07/2008, 10:15
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

No se, prueba asi

<?php

$comprobarIP = "SELECT hitIP FROM hits where hitIP = '$hitIP'" ;
$res = mysql_query($comprobarIP) or die(mysql_error());

$resultado = mysql_fetch_array ($res);
$cuantos = count ($resultado);

if ($cuantos == 0 ) {



mysql_query("UPDATE hits SET hitTotal = hitTotal + 1") or die(mysql_error());
} ;




?>
  #12 (permalink)  
Antiguo 09/07/2008, 10:20
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

ok ya cuenta.. esta lioso eso de el ip... pues me sigue insertando los click indefinidamente.. habia hecho una condicion parecia donde decia
if ($hitIP == 0){

hiciera el insert q tngo de hits... pero tampoco me funciono tendra algo q ver con el ip2long?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #13 (permalink)  
Antiguo 09/07/2008, 17:04
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

La verdad es que no alcanzo a comprender por que te inserta indefinidamente,
debe ser la forma de comparar string´s de php, estas comparando numeros seguidos de puntos (168.345.65.56)

A lo mejor se han de comparar de otra manera.
Yo tambien he intentado comparar IP´s en local y no lo he conseguido, tambien me inserta indefinidamente, aunque la IP este en la BBDD.
A ver si los expertos del foro nos ayudan a resolver el problema.



Un saludo
  #14 (permalink)  
Antiguo 09/07/2008, 21:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: contador por click no cuenta...!!!!

¿Mmm me podría s/n explicar un poco que es lo que desan hacer?

Saludos.
  #15 (permalink)  
Antiguo 10/07/2008, 04:25
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

Hola GatorV

Tratamos de hacer un contador de visitas,

si la IP no esta en la BBDD que sume la visita
y si esta que no sume nada, pero segun hemos provado, aunque la IP este en la BBDD sigue sumando visitas.

Gracias
  #16 (permalink)  
Antiguo 10/07/2008, 08:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: contador por click no cuenta...!!!!

Solo si la IP no esta en la base de datos?, prueba esto:
Tabla ip_hits:
- id autonumeric
- ip int signed

Tabla counter
- id autonumeric
- hits int unsigned

Código PHP:
$ip $_SERVER['REMOTE_ADDR'];
$ip ip2long$ip );
$query "SELECT '1' FROM `ip_hits` WHERE `ip`='$ip' LIMIT 1";
$result mysql_query$query ) or die( "Query: $query, error: " mysql_error() );
if( 
mysql_num_rows$result ) == ) { // no existe en la bdd, insertamos y sumamos
        // insertamos
        
$query "INSERT INTO `ip_hits` (`ip`) VALUES ('$ip')";
        
mysql_query$query ) or die( "Query: $query, error: " mysql_error() );
        
// sumamos
        
$query "UPDATE `counter` SET `hits`=`hits`+1 WHERE `id`=0";
        
mysql_query$query ) or die( "Query: $query, error: " mysql_error() );

Saludos.
  #17 (permalink)  
Antiguo 10/07/2008, 09:26
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

Gracias, ya veo la diferencia,

pero se han de tener dos tablas para sumar las visitas??

no puede ser en la misma tabla?

Y no entiendo lo de signed y unsigned


Un saludo y Gracias
  #18 (permalink)  
Antiguo 10/07/2008, 09:50
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

mmmm seria agregar otra tabla??? yo lo estaba haciendo todo en una =/
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #19 (permalink)  
Antiguo 10/07/2008, 09:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: contador por click no cuenta...!!!!

Mmm no veo porque tenga que ser en una misma, ya que en una tabla vas a guardar las ips y en otra las visitas me supongo, ya que si lo haces en la misma tabla, como controlas las visitas de 2 ips diferentes o donde guardas las cosas, lo que les recomiendo es que hagan muy bien el diseño de datos de lo que quieren hacer, ya que de ahí viene la raíz del porque tuvieron el problema inicial.

Saludos.
  #20 (permalink)  
Antiguo 10/07/2008, 10:00
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: contador por click no cuenta...!!!!

ummmm entiendo.... bueno reestructuro la base de datos y t cuento!!!
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #21 (permalink)  
Antiguo 10/07/2008, 10:42
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: contador por click no cuenta...!!!!

Gracias GatorV

Lo tendre en cuenta

Un saludo
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 10:07.