Все там бало описано хорошо и понятно. Но вот я очем задумался, а как удолять тех пользователей которые долгое время не заходят в на сайт. Т.е человек зарегистрировался 1 сентбря и пропал,а програма его автоматом удалила через неделю(8-ого),другой зарегестрировался 3-его и тоже пропал, а 11-ого его удалили.
Если у кого-то есть идеи поделитесь пожалуйста.
Спустя 4 минуты, 10 секунд (14.11.2009 - 01:16) MainVoid написал(а):
В базе надо хранить время последней авторизации.
Потом просто делаешь скрипт, который посылает запрос к базе и выбирает всех пользователей, дата посл. авторизации у которых не удовлетворяет твоему фильтру.
Да, и удАление пишеться через "а"![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
added later:
такой скрипт можно повесить на CRON, чтобы запускался автоматически каждые сутки. О кроне читай на форуме, в help'е у хостера или по поисковикам.
Потом просто делаешь скрипт, который посылает запрос к базе и выбирает всех пользователей, дата посл. авторизации у которых не удовлетворяет твоему фильтру.
Да, и удАление пишеться через "а"
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
added later:
такой скрипт можно повесить на CRON, чтобы запускался автоматически каждые сутки. О кроне читай на форуме, в help'е у хостера или по поисковикам.
Спустя 12 часов, 11 минут, 23 секунды (14.11.2009 - 13:28) asim написал(а):
Я вижу это так. Есть 2-а поля, в одном храним время последнего прихода, в другом время удаления. Разница во времени прим. 7дней. Но вот, что я не могу понять, человек зашел на сайт, в поле прихода занеслось время, в поле удаление занеслось время с разницей в 7дней. Я не понимаю, как сделать эту разницу во времени, ведь она должна иметь календарный характер?!?!?!?!!!
Спустя 3 часа, 41 минута, 46 секунд (14.11.2009 - 17:09) Zenith написал(а):
Что-то похожее я реализовывал таким образом:
Соответственно подключение к ДБ, закрытие соединения, чтение, запись, уничтожение и чистка из БД старых сессий. Когда происходит удаление сессии с значение access (последней таймштамп активности сессии) из соседней таблицы удаляются данные о юзере. Решение частично взято из инета, частично сам дописывал. Если немного подправить последний пункт то может и тебе подойти
.
session_set_save_handler ('_open', '_close', '_read', '_write', '_destroy', '_clean');
function _open()
{
$sqlhost="localhost";
$sqluser="root";
$sqlpass="";
$db="me";
global $_sess_db;
if ($_sess_db=mysql_connect($sqlhost, $sqluser,$sqlpass))
{
return mysql_select_db($db, $_sess_db);
}
return (FALSE);
}
function _close()
{
global $_sess_db;
mysql_close($_sess_db);
}
function _read($id_session)
{
global $_sess_db;
$id_session=mysql_real_escape_string($id_session);
$sql="SELECT data FROM sessions WHERE id_session='".$id_session."'";
if($result=mysql_query($sql, $_sess_db))
{
if (mysql_num_rows($result))
{
$record = mysql_fetch_assoc($result);
return $record['data'];
}
}
return ' ';
}
function _write($id_session, $data)
{
global $_sess_db;
$time_mas=explode(' ',time());
$res=$time_mas[0]+$time_mas[1];
$id_session=mysql_real_escape_string($id_session);
$access=mysql_real_escape_string($res);
$data=mysql_real_escape_string($data);
$sql="REPLACE INTO sessions VALUES ('".$id_session."','".$access."','".$data."')";
return mysql_query($sql, $_sess_db);
}
function _destroy($id_session)
{
global $_sess_db;
$id_session=mysql_real_escape_string($id_session);
$sql_1="DELETE FROM online WHERE id_session='".$id_session."'";
$sql_2="DELETE FROM sessions WHERE id_session='".$id_session."'";
$result=mysql_query($sql_1, $_sess_db);
$result_2=mysql_query($sql_2, $_sess_db);
return $result;
}
function _clean($max=1440)
{
global $_sess_db;
$old=time()-$max;
$old=mysql_real_escape_string($old);
$sql1="DELETE FROM online WHERE id_session IN (SELECT id_session FROM sessions WHERE access <'".$old."')";
$result1=mysql_query($sql1, $_sess_db);
$sql2="DELETE FROM sessions WHERE access <'".$old."'";
$result2=mysql_query($sql2, $_sess_db);
return $result2;
}
Соответственно подключение к ДБ, закрытие соединения, чтение, запись, уничтожение и чистка из БД старых сессий. Когда происходит удаление сессии с значение access (последней таймштамп активности сессии) из соседней таблицы удаляются данные о юзере. Решение частично взято из инета, частично сам дописывал. Если немного подправить последний пункт то может и тебе подойти
![unsure.gif](http://phpforum.ru/html/emoticons/unsure.gif)
Спустя 1 час, 8 минут (14.11.2009 - 18:17) MainVoid написал(а):
Цитата (asim @ 14.11.2009 - 10:28) |
Я вижу это так. Есть 2-а поля, в одном храним время последнего прихода, в другом время удаления. Разница во времени прим. 7дней. Но вот, что я не могу понять, человек зашел на сайт, в поле прихода занеслось время, в поле удаление занеслось время с разницей в 7дней. Я не понимаю, как сделать эту разницу во времени, ведь она должна иметь календарный характер?!?!?!?!!! |
Два поля вовсе не обязательно. Для тебя важно только знать, когда последний раз заходил пользователь. Но это как тебе хочется, хочешь - делай с двумя полями.
Разницу во времени делаешь так:
$delete_day = strtotime("+7 day");
В переменной $delete_day у тебя сохраниться текущее время + 7 дней в unix-формате. Тебе достаточно только преобразовать его в тот вид, в котором он хранится у тебя в базе и записать.
Подробнее о strtotime: http://ru2.php.net/manual/en/function.strtotime.php
Спустя 38 минут, 51 секунда (14.11.2009 - 18:56) asim написал(а):
Спасибо
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Спустя 5 часов, 12 минут, 20 секунд (15.11.2009 - 00:09) asim написал(а):
УРАААААААААААААААА
Все работает пипец как супер. MainVoid ты молодец.
Теперь буду разбиратся с CRON.
![user posted image](http://pharm-forum.ru/smiles/april/hoera.gif)
Теперь буду разбиратся с CRON.
Спустя 1 час, 59 минут, 11 секунд (15.11.2009 - 02:08) MainVoid написал(а):
Рад за тебя. Удачи в дальнейших делах