Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Tenho um site de quadrinhos, fiz um script para primeiro, fazer uma contagem de visualizações daquela página via update. Está funcionando sem problemas.
A segunda parte do script, tem um insert que grava em uma outra tabela os dados do usuário que fez a leitura daquela página.
Estou tendo um certo inconveniente com o script do insert que não sei se acontece por conta da velocidade da internet no internauta, mas as vezes ele grava os mesmo dados, só que com diferenças de alguns segundos.
Existe alguma forma de eu melhorar esse script fazendo com que os mesmos dados não sejam gravados dentro de um X de tempo? Tipo algo próxima de 10 minutos?
Eu não sou programador nato e montei esse comando com base de outros sistemas
<?php
//Este codigo deve ser colocado no fim de cada pagina final dos HQs e o valor do id_historia deve ser informado
//Exemplo para o Hq com id '33'
$sql = "UPDATE tb_historias SET visualizacoes = (visualizacoes+1) WHERE id_historia = '{$id_historia}';";
$conexao->query($sql);
$sql = mysql_query("SELECT * FROM sistema_quadrinhos WHERE Login = '".$_SESSION['autenticado']['nome_usuario']."' ") or die(mysql_error());
$contasql = mysql_num_rows($sql);
$nome = "";
while($sqlnome = mysql_fetch_array($sql) )
{
$id_cliente = $sqlnome["ID"];
$nome_cliente = $sqlnome["Nome"];
$email_cliente = $sqlnome["email"];
}
echo $nome;
$sql = mysql_query("INSERT INTO tb_historico_acessos
(id,cod_login,nome_cliente,email_cliente,id_historia,nome_historia,data_leitura) VALUES
('','".$id_cliente."','".$nome_cliente."','".$email_cliente."','".$id_historia."','".$titulo_hq."','".date("Y-m-d H:i:s")."')") or die(mysql_error());
$conexao->query($sql);
?>
<?php
// close connection
mysql_close();
?>
Valeu galera, obrigado pelo help.
Hummm vou tentar encaixar aqui....
Valeu mesmo
Wolf,
Acho que não rolou não... dá um look no resultado
'226', '3', 'Ricardo Comtoso', 'ricardo@comtoso.com.br', '161', 'Batman Furia', '2015-07-07 09:10:07'
'225', '3', 'Ricardo Comtoso', 'ricardo@comtoso.com.br', '161', 'Batman Furia', '2015-07-07 09:09:52'
Como ficou o código seguindo suas dicas
<?php
$time_atual = time();
// 600 significa 10 minutos.. 10 * 60 = 600
// o time() cada valor equivale a 1 segundo no servidor
$time_limite = time()-600;
$query = mysql_query("SELECT * FROM tb_historico_acessos WHERE cod_login='$id_cliente' AND data_leitura <= '$time_limite'");
if (mysql_num_rows($query) == 0)
{
mysql_query("INSERT INTO tb_historico_acessos (cod_login, data_leitura) VALUES ('$id_cliente', '$time_atual')");
}
//Este codigo deve ser colocado no fim de cada pagina final dos HQs e o valor do id_historia deve ser informado
//Exemplo para o Hq com id '33'
$sql = "UPDATE tb_historias SET visualizacoes = (visualizacoes+1) WHERE id_historia = '{$id_historia}';";
$conexao->query($sql);
$sql = mysql_query("SELECT * FROM dados_usuarios WHERE Login = '".$_SESSION['autenticado']['nome_usuario']."' ") or die(mysql_error());
$contasql = mysql_num_rows($sql);
$nome = "";
while($sqlnome = mysql_fetch_array($sql) )
{
$id_cliente = $sqlnome["ID"];
$nome_cliente = $sqlnome["Nome"];
$email_cliente = $sqlnome["email"];
}
echo $nome;
$sql = mysql_query("INSERT INTO tb_historico_acessos
(`id`,`cod_login`,`nome_cliente`,`email_cliente`,`id_historia`,`nome_historia`,`data_leitura`) VALUES
('','".$id_cliente."','".$nome_cliente."','".$email_cliente."','".$id_historia."','".$titulo_hq."','".date("Y-m-d H:i:s")."')") or die(mysql_error());
$conexao->query($sql);
?>
<?php
// close connection
mysql_close();
?>Pessoal,
Depois de muito pesquisar eis a solução final para o meu problema.
<?php
date_default_timezone_set("Brazil/East");
//Este codigo deve ser colocado no fim de cada pagina final dos HQs e o valor do id_historia deve ser informado
//Exemplo para o Hq com id '33'
$sql = "UPDATE tb_historias SET visualizacoes = (visualizacoes+1) WHERE id_historia = '{$id_historia}';";
$conexao->query($sql);
$sql = mysql_query("SELECT * FROM leitores WHERE Login = '".$_SESSION['autenticado']['nome_usuario']."' ") or die(mysql_error());
$contasql = mysql_num_rows($sql);
$sqlnome = mysql_fetch_array($sql);
$id_cliente = $sqlnome["ID"];
$nome_cliente = $sqlnome["Nome"];
$email_cliente = $sqlnome["email"];
$sql = "SELECT
IF(data_leitura < DATE_SUB('". date("Y-m-d H:i:s") ."', INTERVAL 1 MINUTE ),'SIM', 'NAO') AS gravar
FROM `tb_historico_acessos`
WHERE cod_login = '{$id_cliente}'
AND id_historia = '{$id_historia}'
ORDER BY data_leitura DESC
LIMIT 0 , 1";
$result = mysql_query($sql);
$gravar = mysql_num_rows($result) == 0;
if(!$gravar){
$result = mysql_fetch_array($result);
$gravar = $result['gravar'] == 'SIM';
}
if( $gravar ){
$sql = "INSERT INTO `tb_historico_acessos`(
`id`,
`cod_login`,
`nome_cliente`,
`email_cliente`,
`id_historia`,
`nome_historia`,
`data_leitura`
) VALUES (
'',
'".$id_cliente."',
'".$nome_cliente."',
'".$email_cliente."',
'".$id_historia."',
'".$titulo_hq."',
'".date("Y-m-d H:i:s")."')";
$conexao->query($sql);
}
// close connection
mysql_close();
?>
Cara vc pode controlar isso com o time()...
Vc antes faz uma busca na tabela e verifica se existe akele usuário cadastrado na tabela com o time() menor que 10 minutos do time() atual.. caso não haja ele faz o insert.. tipo assim: