[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удоление в регистрации
asim
Лазил по этому форуму и наткнулся урок о "Регистрации и входе"
Все там бало описано хорошо и понятно. Но вот я очем задумался, а как удолять тех пользователей которые долгое время не заходят в на сайт. Т.е человек зарегистрировался 1 сентбря и пропал,а програма его автоматом удалила через неделю(8-ого),другой зарегестрировался 3-его и тоже пропал, а 11-ого его удалили.
Если у кого-то есть идеи поделитесь пожалуйста.



Спустя 4 минуты, 10 секунд (14.11.2009 - 01:16) MainVoid написал(а):
В базе надо хранить время последней авторизации.
Потом просто делаешь скрипт, который посылает запрос к базе и выбирает всех пользователей, дата посл. авторизации у которых не удовлетворяет твоему фильтру.
Да, и удАление пишеться через "а" 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 написал(а):
Что-то похожее я реализовывал таким образом:

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 .

Спустя 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

Спустя 5 часов, 12 минут, 20 секунд (15.11.2009 - 00:09) asim написал(а):
УРАААААААААААААААА user posted image Все работает пипец как супер. MainVoid ты молодец.
Теперь буду разбиратся с CRON.

Спустя 1 час, 59 минут, 11 секунд (15.11.2009 - 02:08) MainVoid написал(а):
Рад за тебя. Удачи в дальнейших делах
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.