Как вставить данные через 48 часов?


Моя система затем регистрирует неконтролируемые данные из него ip.

как я могу сделать так, чтобы этот ip не регистрировал данные, по крайней мере, прошло 48 часов, чтобы он снова регистрировался?

я понимаю, что из предварительного запроса должны быть получены последние вставленные данные:

SELECT visitor_ip FROM visitors_table ORDER BY visitor_date DESC LIMIT 1

но, как я подтверждаю, если я еще не провожу 48 часов, я не вставляю данные, и если я уже провожу 48 часов, которые возвращаются к запишите свои данные.

<?php
require_once('visitors_connections.php');

$visitor_ip = GetIP();
$visitor_browser = getBrowserType($_SERVER['HTTP_USER_AGENT']);
$visitor_date = date("Y-m-d H:i:s");
$visitor_refferer = $refferer;
$visited_page = selfURL();


$stmt = $con->prepare("INSERT INTO visitors_table (visitor_ip, visitor_browser, visitor_date,
 visitor_refferer, visitor_page) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $visitor_ip,$visitor_browser,$visitor_date,$visitor_refferer,$visited_page);
$stmt->execute();
?>

Моя Таблица: introducir la descripción de la imagen aquí

 7
Author: Fernando, 2018-08-10

4 answers

Вы можете сделать запрос, если он существует, ограничив даты последними 48 часами, например:

SELECT visitor_ip, visitor_date
  FROM visitors_table 
  WHERE visitor_date >= DATE_SUB(NOW(),INTERVAL 48 HOUR)
    AND visitor_ip = "290.118.71.19"
  ORDER BY visitor_date DESC
LIMIT 1;

Обратите внимание, что один и тот же IP может иметь несколько подключенных устройств (маршрутизаторов), поэтому было бы удобнее фильтровать также user agent или visitor_browser

SELECT visitor_ip, visitor_date
  FROM visitors_table 
  WHERE visitor_date >= DATE_SUB(NOW(),INTERVAL 48 HOUR)
    AND visitor_ip = "290.118.71.19"
    AND visitor_browser = "Chrome"
  ORDER BY visitor_date DESC
LIMIT 1;

Это будет подсчитывать посещения chrome, но не ipad, например. Если этот запрос не дает результатов, продолжайте делать insert.

Примечание: IP-адреса следует хранить в varchar не менее 45 букв для поддержки IPv6

 `visitor_ip` varchar(45) 

Например, externalhit facebook, который генерирует миниатюры и сводку общей ссылки в социальной сети, будет выглядеть примерно так (IP ,дата, UserAgent):

'2a03:2880:11:8ff4:face:b00c:0:8000', 
'2018-08-09 20:31:48', 
'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)'

Также другим user agent, который может вводить в заблуждение, является CloudFlare

'Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34'

Все вместе:

<?php
require_once('visitors_connections.php');

$visitor_ip = GetIP();
$visitor_browser = getBrowserType($_SERVER['HTTP_USER_AGENT']);
$visitor_date = date("Y-m-d H:i:s");
$visitor_refferer = $refferer;
$visited_page = selfURL();

$stmt = $con->prepare(
 "SELECT visitor_ip, visitor_date
  FROM visitors_table 
  WHERE visitor_date >= DATE_SUB(NOW(),INTERVAL 48 HOUR)
    AND visitor_ip = ?
  ORDER BY visitor_date DESC
  LIMIT 1;
");
$stmt->bind_param("s",$visitor_ip);
$stmt->execute() or die();
$stmt->store_result();
$no_hay_registros = ($stmt->num_rows==0);

if ($no_hay_registros) {
   // Si no hay registros para esa IP en las últimas 48 horas    
  $stmt = $con->prepare(
    "INSERT INTO visitors_table 
        (visitor_ip, visitor_browser, visitor_date, visitor_refferer, visitor_page) 
      VALUES (?, ?, ?, ?, ?)");
  $stmt->bind_param("sssss",
      $visitor_ip,
      $visitor_browser,
      $visitor_date,
      $visitor_refferer,
      $visited_page
  );
  $stmt->execute();
} else {
  // ya hay un registro en las últimas 48 horas
}
?>
 3
Author: alo Malbarez, 2018-09-07 01:38:28

Если вы полагаетесь на посещение пользователя, вы можете сначала сделать select, чтобы увидеть, что такое utlimo зарегистрированное поле, например

SELECT visitor_date FROM visitors_table WHERE  ORDER BY visitor_date DESC limit 1

И результат сохранить его в переменной PHP

Затем сравните его с текущим

$fechaRow = new DateTime($resultadoQuery);
$fechaCliente = new DateTime();

$diferencia = $fechaRow->diff($fechaCliente);

$horas = $diferencia->format('%H');

if((int)$horas > 48 ){

$stmt = $con->prepare("INSERT INTO visitors_table (visitor_ip, visitor_browser, visitor_date,
 visitor_refferer, visitor_page) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $visitor_ip,$visitor_browser,$visitor_date,$visitor_refferer,$visited_page);
$stmt->execute();

}

Надеюсь, это будет полезно для вас

 1
Author: Jose Luis Esparza, 2018-08-10 16:52:24

Я понимаю, попробуйте это так:

//en la consulta debes traer el campo `visitor_date` para comprar
SELECT visitor_ip, visitor_date FROM visitors_table ORDER BY visitor_date DESC LIMIT 1

// al campo que traes le sumas 2 dias que representan las 48 horas que necesitas
$fecha_registro= date("Y-m-d H:i:s",strtotime(visitor_date."+ 2 days"));

//creas la fecha actual
$fecha_hoy = date('Y-m-d H:i:s');

//comparas si es mayor o igual
if (($fecha_registro >= $fecha_hoy) {
    //ejecute la funcion
}

Я оставляю вам ссылку, где вы можете помочь себе немного больше понять

Я надеюсь служить вам и маркировать xD ... ReNiceCode ...

 1
Author: srJJ, 2018-08-10 16:59:28

Зарегистрировать то же самое ip после 48hrs, которое равно 2 días.

Для этого мы можем играть с помощью presente и futuro.

Примеры:

$hoy = "2018-08-12 13:34:08";
$futuro = "2018-08-12 13:34:08";

Затем вы выполняете проверку с помощью if

// == >= <=
if ($hoy >= $futuro) {
    //Aquí agregas la ejecución de la consulta.
    echo "la fecha es igual o mayor";
} else {
    echo "La fecha no es igual";
}

Вы видите, имея в виду идею, вы можете выполнить следующую процедуру:

$stmtIP = $con->prepare("SELECT visitor_ip, visitor_date FROM visitors_table WHERE visitor_ip=? ORDER BY visitor_date DESC LIMIT 1");
$stmtIP->bind_param("s",$visitor_ip);
$stmtIP->execute();
$stmtIP->store_result();
$stmtIP->bind_result($publishers_ip, $publishers_date);
//$stmtIP->fetch();

if ($stmtIP -> fetch()){
  $date_day = date('Y-m-d H:i:s');
  $publishers_date = date('Y-m-d H:i:s', strtotime('+2 days'));
} else {
  //echo "0 registros";
}

if ($date_day >= $publishers_date) {
    //Aquí agregas la ejecución de la consulta.
    echo "la fecha es igual o mayor";
} else {
    echo "La fecha no es igual";
}
 1
Author: Publisere.com, 2018-08-10 20:34:08