можно как то сделать курлом запуск только как на Php проверить прошла ли эта дата ?
Спустя 18 минут, 42 секунды (23.02.2012 - 17:39) Rand написал(а):
В таблице создается поле для даты, которая хранит время в формате UNIX.
Далее при запуске скрипта, делаем удаление, таким запросом:
Далее при запуске скрипта, делаем удаление, таким запросом:
DELETE FROM table WHERE UNIX_TIMESTAMP() - date >= 86400
Спустя 53 минуты, 14 секунд (23.02.2012 - 18:32) OneFinal написал(а):
вот смотри пример скрипта, или мне его на курл поставить ? не вьехал чуть )
<?php
$ip=$_POST['ip'];
$name=$_POST['name'];
$db = "pkfor148";
$val = base64_encode($name);
$date = date("m.d.y");
if (!$conn = mysql_connect("localhost","",""))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);
if(empty($ip))
{
echo "<font color=\"red\"><h1><center>Пустой ип!</center></h1><br></font>";
}
if(empty($name))
{
echo "<font color=\"red\"><h1><center>Пустое имя!</center></h1></font><br>";
}
else
{
$result=mysql_query("INSERT INTO `nprotect`(`id`, `ip`, `key`, date) VALUES ('$name','$ip','FFCCAA','$date')");
echo mysql_error();
//Если запрос пройдет успешно то в переменную result вернется true
echo "<br><center><input type=\"text\" size=\"20\" VALUE=\"$val\" readonly ></center>";
echo "<br><center><font color = \"red\" size = \"6\">Удачно то что вверху скопировать в файл gg_sys.ini</font>";
}
?>
Спустя 23 минуты, 47 секунд (23.02.2012 - 18:56) Kuliev написал(а):
OneFinal
Возможно Вы имели ввиду CRON а не CURL
Возможно Вы имели ввиду CRON а не CURL
Спустя 9 минут, 47 секунд (23.02.2012 - 19:06) OneFinal написал(а):
да )
Спустя 48 минут, 25 секунд (23.02.2012 - 19:54) Rand написал(а):
Ну вот, как я говорил, время я бы хранил в unix-time. Для этого нужно изменить запрос на вставку так:
Поле date в базе должно быть типа INT(10) UNSIGNED, т.к. UNIX_TIMESTAMP - это число секунд, прошедших с 1970 года до настоящего времени. Теперь создаешь скрипт для удаления:
При желании можно обойтись без Cron. Для этого можно добавить этот скрипт в начало index.php к примеру. Т.е. он будет выполнятся при каждой загрузке страницы, но строка удалится только тогда, когда наступит время. Но лучше конечно Cron.
mysql_query("INSERT INTO `nprotect`(`id`, `ip`, `key`, `date`) VALUES ('$name', '$ip', 'FFCCAA', UNIX_TIMESTAMP())");
Поле date в базе должно быть типа INT(10) UNSIGNED, т.к. UNIX_TIMESTAMP - это число секунд, прошедших с 1970 года до настоящего времени. Теперь создаешь скрипт для удаления:
<?phpВсё. Даем задание планировщику Cron запускать этот скрипт каждый час и при запуске будут удаляться все строки с момента добавления которых прошло 86400 секунд (сутки).
//TODO: Чтобы не дублировать код, параметры подключения лучше вынести в отдельный файл
$db = "pkfor148";
if (!$conn = mysql_connect("localhost","",""))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);
mysql_query('DELETE FROM `nprotect` WHERE UNIX_TIMESTAMP() - `date` >= 86400');
При желании можно обойтись без Cron. Для этого можно добавить этот скрипт в начало index.php к примеру. Т.е. он будет выполнятся при каждой загрузке страницы, но строка удалится только тогда, когда наступит время. Но лучше конечно Cron.
Спустя 3 часа, 8 минут, 21 секунда (23.02.2012 - 23:03) OneFinal написал(а):
спасибо все понятно но ещё один вопрос например у меня не все клиенты будут попадать под удаление через 1 день, я создаю ещё одно поле например test если там 1 то удаление происходит если 0 то нет, так вот как поставить 2 условия WHERE??
Спустя 11 минут, 33 секунды (23.02.2012 - 23:14) OneFinal написал(а):
вот смотрите что у меня получилось,
вроде все верно
mysql_select_db($db);
if(empty($ip))
{
echo "<font color=\"red\"><h1><center>Пустой ип!</center></h1><br></font>";
}
if(empty($name))
{
echo "<font color=\"red\"><h1><center>Пустое имя!</center></h1></font><br>";
}
else
{
$result=mysql_query("INSERT INTO `nprotect`(`id`, `ip`, `key`, date,test) VALUES ('$name','$ip','FFCCAA', UNIX_TIMESTAMP(),'$test')");
mysql_query('DELETE FROM `nprotect` WHERE UNIX_TIMESTAMP() - `date` >= 86400' and 'test' == '1');
echo mysql_error();
//Если запрос пройдет успешно то в переменную result вернется true
echo "<br><center><input type=\"text\" size=\"20\" VALUE=\"$val\" readonly ></center>";
echo "<br><center><font color = \"red\" size = \"6\">Удачно то что вверху скопировать в файл gg_sys.ini</font>";
вроде все верно
Спустя 5 минут, 57 секунд (23.02.2012 - 23:20) OneFinal написал(а):
upd, провтычил перенес удаление из "условий" по выше над условиями. )
Спустя 8 часов, 43 минуты, 46 секунд (24.02.2012 - 08:04) twin написал(а):
Rand
А зачем в UNIX? Чем обычный тип DATE не угодил?
А зачем в UNIX? Чем обычный тип DATE не угодил?
Спустя 32 минуты, 9 секунд (24.02.2012 - 08:36) McLotos написал(а):
У меня сделано так:
Т.е. если запись создана больше 20и минут назад, то она удаляется. Можно легко переделать под 1 день
DELETE FROM table
WHERE date < NOW() - INTERVAL '20' MINUTE"
Т.е. если запись создана больше 20и минут назад, то она удаляется. Можно легко переделать под 1 день
Спустя 2 часа, 23 минуты, 59 секунд (24.02.2012 - 11:00) Rand написал(а):
OneFinal, после 86400 лишняя кавычка.
twin DATE не хранит время, только дату. Если запись будет добавлена в 23.59, то через минуту она удалится. Можно использовать DATETIME - но для него требуется 8 байт против 4-х в INT. Плюс ещё проблемы при переносе базы на сервер с другой временной зоной - если вы не учли, что дата записывается как есть, а не в UTC. Вместо INT можно использовать TIMESTAMP.
twin DATE не хранит время, только дату. Если запись будет добавлена в 23.59, то через минуту она удалится. Можно использовать DATETIME - но для него требуется 8 байт против 4-х в INT. Плюс ещё проблемы при переносе базы на сервер с другой временной зоной - если вы не учли, что дата записывается как есть, а не в UTC. Вместо INT можно использовать TIMESTAMP.