Как вставить данные через 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();
?>
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
}
?>
Если вы полагаетесь на посещение пользователя, вы можете сначала сделать 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();
}
Надеюсь, это будет полезно для вас
Я понимаю, попробуйте это так:
//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 ...
Зарегистрировать то же самое 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";
}