Jump to content

Contador de visitas web


BoGaS

Recommended Posts

Boas!

Estou a fazer um contador de visitantes de páguinas, mas isto está-me a dar um problema parvo, quando o testo numa páguina em branco (apenas com o contador) ele funciona, quando o aplico a uma páguina feita em dreamweaver ele não funciona bem, por cada visita ele conta 2.

O codigo é o seguinte: (assim funciona bem, mas se meter este mesmo codigo no meio de outro já não)

<?php
// Função que devolve o resto da divisão inteira do valor passado por 10;
function rest_div_int($x)
{
$x = $x % 10;
return $x;
}

/* Função que devolde o seguinte array:
	[unidade] => unidade do valor passado
	[dezena] => dezena do valor passado
	[centena] => centena do valor passado
	[milhar] => milhar do valor passado
	[dezena_milhar] => dezena de milhar do valor passado
*/
function separa_nums($x)
{
$array["dezena_milhar"] = floor($x / 10000);
$array["milhar"] = rest_div_int(floor($x / 1000));
$array["centena"] = rest_div_int(floor($x / 100));
$array["dezena"] = rest_div_int(floor($x / 10));
$array["unidade"] = rest_div_int($x);
return $array;
}

/* Função que devolve o seguinte array: 
	[unidade] => 9
	[dezena] => 9
	[centena] => 9
	[milhar] => 9
	[dezena_milhar] => 9
*/
function excesso_casas()
{
$array["dezena_milhar"] = $array["milhar"] = $array["centena"] = $array["dezena"] = $array["unidade"] = 9;
return $array;
}


// Contador de visitas web

$limite_contador = 99999;
include"conexao.php"; // Faz a ligação com a base de dados
$sgl = mysql_query("SELECT * FROM lagartos_contador");
$dados = mysql_fetch_array($sgl);
$num_visitantes = $dados['num'];
$num_visitantes++;
$up = mysql_query("UPDATE lagartos_contador set num='$num_visitantes'");
mysql_close($conexao);

if($num_visitantes <= $limite_contador)
{$nums = separa_nums($num_visitantes);}
else
{$nums = excesso_casas();}
?>

<td><img src="imagens/numeros/<?php echo $nums["dezena_milhar"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["milhar"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["centena"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["dezena"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["unidade"]; ?>.gif" border="0" height="19" width="15"></a></td>

Não consigo perceber pk é k aplicado a uma páguina já construida funciona mal, o k me parece é k a páguina executa o codigo duas vezes, mas não o devia fazer.

Alguma sugestão?

Tks

Link to comment
Share on other sites

Boas!

Estou a fazer um contador de visitantes de páguinas, mas isto está-me a dar um problema parvo, quando o testo numa páguina em branco (apenas com o contador) ele funciona, quando o aplico a uma páguina feita em dreamweaver ele não funciona bem, por cada visita ele conta 2.

O codigo é o seguinte: (assim funciona bem, mas se meter este mesmo codigo no meio de outro já não)

<?php
// Função que devolve o resto da divisão inteira do valor passado por 10;
function rest_div_int($x)
{
$x = $x % 10;
return $x;
}

/* Função que devolde o seguinte array:
	[unidade] => unidade do valor passado
	[dezena] => dezena do valor passado
	[centena] => centena do valor passado
	[milhar] => milhar do valor passado
	[dezena_milhar] => dezena de milhar do valor passado
*/
function separa_nums($x)
{
$array["dezena_milhar"] = floor($x / 10000);
$array["milhar"] = rest_div_int(floor($x / 1000));
$array["centena"] = rest_div_int(floor($x / 100));
$array["dezena"] = rest_div_int(floor($x / 10));
$array["unidade"] = rest_div_int($x);
return $array;
}

/* Função que devolve o seguinte array: 
	[unidade] => 9
	[dezena] => 9
	[centena] => 9
	[milhar] => 9
	[dezena_milhar] => 9
*/
function excesso_casas()
{
$array["dezena_milhar"] = $array["milhar"] = $array["centena"] = $array["dezena"] = $array["unidade"] = 9;
return $array;
}


// Contador de visitas web

$limite_contador = 99999;
include"conexao.php"; // Faz a ligação com a base de dados
$sgl = mysql_query("SELECT * FROM lagartos_contador");
$dados = mysql_fetch_array($sgl);
$num_visitantes = $dados['num'];
$num_visitantes++;
$up = mysql_query("UPDATE lagartos_contador set num='$num_visitantes'");
mysql_close($conexao);

if($num_visitantes <= $limite_contador)
{$nums = separa_nums($num_visitantes);}
else
{$nums = excesso_casas();}
?>

<td><img src="imagens/numeros/<?php echo $nums["dezena_milhar"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["milhar"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["centena"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["dezena"]; ?>.gif" border="0" height="19" width="15"></a></td>
<td><img src="imagens/numeros/<?php echo $nums["unidade"]; ?>.gif" border="0" height="19" width="15"></a></td>

Não consigo perceber pk é k aplicado a uma páguina já construida funciona mal, o k me parece é k a páguina executa o codigo duas vezes, mas não o devia fazer.

Alguma sugestão?

Tks

mal como?

Link to comment
Share on other sites

mal como?

Por cada vez que a páguina é vizitada o contador incrementa o seu valor em duas unidades, quando devia incrementar apenas em uma unidade.

BoGas tenta colocar o código num ficheiro exemplo: contador.php  e na pagina onde querem o contador fazer um include_once("Contador.php");

Se não funcionar tenta tira os "return" das functions porque o return faz parar o script e voltar para onde foi chamado o script.

Já coloquei num ficheiro separado e não funcionou, já agora qual a diferença entre um include e um include_once?

Quanto a tirar os returns também experimentei mas deixou de funcionar, então fiz outra experiencia que foi não utilizar as funções, aplicando-as sempre que era necessario, e mesmo assim o contador incrementa duas vezes...

Mas o que eu estranho é que consigo por o contador a funcionar numa páguina em branco, mas se o incluir noutra páguina que só tem tabelas imagens e links ja não funciona bem....

Link to comment
Share on other sites

o include inclui um ficheiro sempre que ele for chamado, o include_once só inclui uma vez mesmo que for chamado outra vez.

Acho que é mais ou menos isso!!

Eu depois tb tive a ler no manual de php e é exactamente isso k disses-t.

Quanto ao problema ja o resolvi, criei a páguina onde estava a inserir o contador de novo, e agora ja funciona bem.

Tks

Link to comment
Share on other sites

Cuidado com esse contador que isso tem um buraco ao nível do acesso concorrente.

Para garantires atomicidade e não fazers uma sub contagem usa transacções.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Eu fiz assim um.. a usar o teu +/-

<?php

function rest_div_int($x)
{
$x = $x % 10;
return $x;
}



function separa_nums($x)
{
$array["dezena_milhar"] = floor($x / 10000);
$array["milhar"] = rest_div_int(floor($x / 1000));
$array["centena"] = rest_div_int(floor($x / 100));
$array["dezena"] = rest_div_int(floor($x / 10));
$array["unidade"] = rest_div_int($x);
return $array;
}





// Contador de visitas web


$limite_contador = 99999;

include"conexao.php"; // Faz a ligação com a base de dados

$sql = mysql_query("SELECT * FROM `contador` WHERE 1");

$dados = mysql_num_rows($sql);

$ip = GetHostByName($REMOTE_ADDR);
$query= "SELECT `ip` FROM `contador` WHERE ip = '$ip'";
$query=mysql_query($query);

if (mysql_num_rows($query)==0){
mysql_query("INSERT INTO `contador` (`ip`) VALUES('$ip')");
}


$lol = separa_nums($dados);



mysql_close($db);

?><style type="text/css">
<!--
body {
background-color: #000000;
}
-->
</style>

<img src="imagens/numeros/<?php echo $lol["dezena_milhar"]; ?>.GIF" height="19" width="15">
<img src="imagens/numeros/<?php echo $lol["milhar"]; ?>.GIF"  height="19" width="15">
<img src="imagens/numeros/<?php echo $lol["centena"]; ?>.GIF"  height="19" width="15">
<img src="imagens/numeros/<?php echo $lol["dezena"]; ?>.GIF"  height="19" width="15">
<img src="imagens/numeros/<?php echo $lol["unidade"]; ?>.GIF"  height="19" width="15">
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.