Ir para conteúdo

Arquivado

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

soaresra

Limitador de tempo em um insert

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

<?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 time <= '$time_limite'");
	
	if (mysql_num_rows($query) == 0) {
		mysql_query("INSERT INTO tb_historico_acessos (cod_login, time) VALUES ('$id_cliente', '$time_atual')");
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por JoaoSilva75
      pessoal
       
      esses sites que tem na internet para registro de dominio internacional .com
      cobram um valor no primeiro mes e depois é bem mais caro
       
      o dominio que eu queria registrar o site diz que ta liberado e custa $19,99 no primeiro ano depois diz que custa $ 1499,00 
      não entendi
       
      Domain Purchase $1,499.00* Premium Domain *First Year Cost. Renews at $19.99/year Privacy + Protection 1 Year $8.99    
      não entendi essa oferta
       
      existe um site para registro de dominio .com semelhante ao registro.br ???
       
      uma vez registrei um dominio no ig e custou 11 reais, faz tempo e agora o ig não esta mais registrando
      vcs me indicam algum site para eu registrar um dominio .com ???
       
      Abraço a vcs
    • Por Luiz Henrique
      Olá,
       
      Preciso fazer uma inserção no DB de registros referente a pagamentos, quando for no crédito será realizado o insert com sua respectiva data de compensação e valor da parcela exemplo:
       3 parcelas de 100.00 e cada registro em seu devido mês:
      INSERT INTO tabela (valor, data) VALUES (100, 2022-08-17),(100, 2022-09-17),(100, 2022-10-17) É mais eficiente fazer da forma acima ou colocar 3 INSERT?
      Ou existe forma melhor de fazer isso?
       
      Obrigado.,
       
    • Por Carlos Antoliv
      Senhores, bom dia.
       
      tenho um campo status. Então, a ideia é mudar o status. Consigo alterar o status quando necessário. Daí, pensei em todas vez que alterar, salvar o id do usuário, data, hora, o último status alterado...
      consigo fazer isso com INSERT, depois do UPDATE.
       
      Nao uso trigger. Até tentei fazer, mas não saiu como eu queria.
       
      Então, para os maiores entendedores do assunto, a melhor prática seria a TRIGGER ou INSERT ? Melhor prática ou o que mais funciona na prática ?
       
      Alguém poderia dissertar sobre isso ?
      Vlw..abço
    • Por Kefatif
      Prezados, boa tarde.
       
      Utilizo um banco de dados Mysql + Programação PHP e HTML.
       
      Preciso que no filtro do sql ele não me traga o estoque do CNES "0000000", como eu poderia ta excluindo ele do filtro?
       
       
      $sqlestoque = "select A.ID_ESTOQUE, D.CNES, D.NOME_UNIDADE, B.COBERTURA, A.QTD, C.DATA_REGISTRO FROM lesao_rel_estoque_coberturas A INNER JOIN lesao_coberturas B ON A.ID_COBERTURA = B.ID_COBERTURA INNER JOIN lesao_estoque C ON A.ID_ESTOQUE = C.ID_ESTOQUE INNER JOIN unidades D ON C.CNES = D.CNES WHERE C.ID_ESTOQUE = (SELECT MAX(E.ID_ESTOQUE) FROM lesao_estoque E WHERE E.CNES = C.CNES) ORDER BY A.ID_ESTOQUE DESC";  
      Agradeço a ajuda desde já.
       
      Muito obrigado!
    • Por unset
      Olá, estou com uma falha de lógica pegando aqui se alguém puder ajudar
       
      Eu tenho um formulário tranquilo, como abaixo
      <label for="cidades" class="form-label">Cidades</label> <select class="form-select mb-3" name="cidades[]" id="cidades" multiple="multiple"> <option value="1">Cidade 1</option> <option value="2">Cidade 2</option> <option value="3">Cidade 3</option> <option value="4">Cidade 4</option> <option value="5">Cidade 5</option> </select>  
      Blz eu recebe os dados do formulário ou seja os ids da cidade certinho em um array 
       
      array(3) { [0]=> string(1) "2" [1]=> string(2) "3" [1]=> string(1) "5" }
      <?php $dados = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRIPPED); var_dump($dados); ?> Agora como inserir todos os ids no banco? utilizando um for? um while? algum exemplo?
       
      Pergunto pq ao tentar inserir no banco somente um registro é inserido e não todos do select
       
×

Informação importante

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