BoGaS Posted June 16, 2006 at 12:24 AM Report #33214 Posted June 16, 2006 at 12:24 AM 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
joninho Posted June 17, 2006 at 03:55 PM Report #33455 Posted June 17, 2006 at 03:55 PM 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?
kingless Posted June 17, 2006 at 04:17 PM Report #33461 Posted June 17, 2006 at 04:17 PM 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.
BoGaS Posted June 21, 2006 at 11:13 PM Author Report #34180 Posted June 21, 2006 at 11:13 PM 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....
kingless Posted June 22, 2006 at 02:25 AM Report #34186 Posted June 22, 2006 at 02:25 AM 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!!
BoGaS Posted June 23, 2006 at 12:03 AM Author Report #34345 Posted June 23, 2006 at 12:03 AM 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
M6 Posted June 23, 2006 at 10:39 AM Report #34381 Posted June 23, 2006 at 10:39 AM 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."
joninho Posted June 24, 2006 at 03:53 AM Report #34535 Posted June 24, 2006 at 03:53 AM 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">
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now