• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

BoGaS

Contador de visitas web

8 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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">

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora