Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MuitoCurioso

Contador de visitas únicas para site

Recommended Posts

Olá, amigos!

 

Adaptei esse script contador de visitas para links de site. Limita a contagem a 1 a cada 24h por link. Ou deveria funcionar nos diversos links. Ocorre que, ao acessar o primeiro link, ele cria um cookie e o visitante pode passar o restante das 24h acessando outros links (notícias) que não conta visita.

 

Preciso modificar para que o cookie só impeça nova leitura no mesmo id. Nos demais não pode haver restrição alguma. Alguém pode me dar uma luz?

 

Obrigado, desde já.

 

<?php
require("config.php");

       $id = intval($_GET['id']);
$sql = mysql_query("SELECT visitas, id FROM yt WHERE id = '$id'");
       while($linha = mysql_fetch_array($sql)){
       $visitas = $linha['visitas'];
}
        
   if(!isset($_COOKIE['contador'])){

       $contador_visitas = "contador_visitas";
        
       setcookie("contador", $contador_visitas, time()+(24*3600));

       $somar = $visitas + 1;

   $sql = mysql_query("UPDATE yt SET visitas = '$somar' WHERE id = '$id'");

   }elseif(isset($_COOKIE['contador'])){

       //Teste de contagem referente a um determinado id.
       echo "Existem ate agora $visitas neste link";
}


?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem qual é exatamente a dúvida, mas aprimorei seu código. Teste e diga se era isso que você precisava:

 

<?php
require( 'config.php' );
$id = &$_GET[ 'id' ];
$contador = &$_COOKIE[ 'contador' ];
if ( !$contador ) {
    $sql = mysql_query( 'UPDATE `yt` SET `visitas` = `visitas` + 1 WHERE `id` = ' . (int)$id );
    setcookie( 'contador', true, time() + ( 24*3600 ) );
}

Qualquer dúvida, poste.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

A dúvida é a seguinte: o script conta +1 leitura, quando o visitante acessa uma notícia. Ok. Mas, se o visitante visita outra notícia, aí não conta +1 nessa outra notícia. O cookie bloqueia a contagem +1 em todos as notícias. O certo é ele impedir nova contagem, dentro das 24h, numa mesma notícia. É para evitar que o visitante fique dando F5, por exemplo. Vou testar o script modificado por vc, Matheus. Obrigado. Já dou retorno.

 

Matheus, continua com o mesmo problema: se eu acessar dois links, ele conta +1 visita no primeiro e não conta no segundo, devido ao cookie.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só utilizar SESSION ou fazer verificação por IP correspondente ao ID da notícia.

 

Como session ficaria mais ou menos assim o algoritmo, a cada visualização de notícia, você vai verificar se existe o determinado ID da notícia na sessão, se não existir, você atualiza as visualizações no banco, e adiciona o ID na sessão, quando o cara atualizar, já não vai contar novamente.

 

Acho que é por ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh, você quer bloquear por notícia.

Então armazene o ID da notícia dentro de um array na chave do cookie.

Depois basta verificar se existe o ID da notícia, conforme o código que já lhe passei.

 

Você vai precisar da função array_search e do WHERE (mysql), basicamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, Matheus. É isso que estou tentando fazer: armazenar o id da notícia, mas meu conhecimento de PHP ainda é limitado - e não está dando certo.

 

Por session, Andrey, também seria bom. Mas, por IP, não, porque, no caso de uma rede, só contaria um acesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh, você quer bloquear por notícia.

Então armazene o ID da notícia dentro de um array na chave do cookie.

Depois basta verificar se existe o ID da notícia, conforme o código que já lhe passei.

 

Você vai precisar da função array_search e do WHERE (mysql), basicamente.

 

 

Consegui fazer funcionar o script com cookie. Agora, ele permite uma visita por notícia (id) a cada 24h. Testei reduzindo esse tempo para 30 segundos. Nesse período, acessei 3 notícias diferentes, contando 1 acessos em cada uma. Segui a lógica de armazenar o id. Abaixo, o código funcionando:

 

<?php

require( 'config.php' );
$id = &$_GET[ 'id' ];
$contador = &$_COOKIE[ 'contador_'.$id.'' ];
if ( !$contador ) {
    $sql = mysql_query( 'UPDATE `yt` SET `visitas` = `visitas` + 1 WHERE `id` = ' . (int)$id );
    setcookie( 'contador_'.$id.'', true, time() + ( 30 ) );
}
    $sql = mysql_query("SELECT visitas, id FROM yt WHERE id = '$id'");
       while($linha = mysql_fetch_array($sql)){
       $visitas = $linha['visitas'];
}
echo "até agora neste id há $visitas";

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.