Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: удаление пользователя через определенный срок.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Как удалить пользователя через 30 дней
ginec
Отправлено: 09 Октября, 2010 - 11:11:58
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Мне необходимо, чтобы пользователь автоматически удалялся из БД, если он не посещал сайт в течении 30 суток и отправить ему на мыло, что он был удален. Как это реализовать? ??? Непонял!
 
 Top
Ch_chov
Отправлено: 09 Октября, 2010 - 11:26:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




c помощью cron
 
 Top
JustUserR
Отправлено: 09 Октября, 2010 - 11:58:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ginec пишет:
Как это реализовать
Для реализации задач автоматизации на web-ресурсах возможно построение схемы использующей исключительно возможности PHP-скриптов без сторонних приложений - суть решения заключаитеся в создании списка задач выполнение которого постепенно происходит в фоновом режиме при обращении к любым из PHP-скриптом вашего сервера - для обеспесчения безопасности необходимо применять дополнительную проверку на максимальное число выполняемых заданий При использовании такой схемы в условиях низкой посещаемости общая эффективност сохраняется - поскольку если в списке задач имеется очень малое число пользователей и посещаемость равно нулю то их скорое удаление не принципально - в любом другом случае удаление старных пользователей будет проихводится пропорционально


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Пит
Отправлено: 09 Октября, 2010 - 12:02:22
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




кроном, как посоветовали. сделай скрипт на проверку числа и, например 1 раз в день, проверяй всю таблицу юзерей на "> 30 дней с посещения". т.е. когда открывается новая сессия, или неважно кто заходит на сайт запускается скрипт, выбирающий из базы данных или из файла всего 1 булевское поле, означающее, что сегодня уже база данных чистилась/нет. если скрипт видит, например true - чистилась, завершает свое выполнение, если нет, запускает модуль очистки всех неактивных более n дней юзверей. правда, при втором варианте, хоть он и платформонезависим (от крона) тот, на кого выпадет честь запустить этот скрипт своим заходом на сайт, может долговато ждать прогрузки страницы, если БД большая Улыбка
 
 Top
JustUserR
Отправлено: 09 Октября, 2010 - 12:08:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Пит пишет:
Кроном, как посоветовали
Для реализации указанной задачи использование планировщика cron является не более приоритетеным решением чем создание списка выполняемых дейтсивий - поскольку предложенная схема является адаптивной и распределяет нагрузку в соответствии с посещаемость и количетсвом пользователей - в то время как запуск по расписанию не позволяет достичь адатиационного эффекта Многие системы web-сервисов такие как torren-tracker хотя и требуют постоянного обновления - но реализуют это путем реакции на клиентские запросы и списк очереди


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Valdemar
Отправлено: 09 Октября, 2010 - 14:37:33
Post Id



Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




ginec пишет:
Мне необходимо, чтобы пользователь автоматически удалялся из БД, если он не посещал сайт в течении 30 суток и отправить ему на мыло, что он был удален. Как это реализовать? ??? Непонял!


Алгоритм приблизительно следующий:

1. Получаем текущую дату и время в unix-формате ($thisdate);
2. Получаем дату и время (опять же в unix) - (минус) 30 дней ($lastdate);
3. Из БД выбираем пользователей, у которых дата последнего посещения меньше чем $lastdate;
4. В цикле производим удаление всех пользователей, кто посещал сайт месяц или более назад;
5. Отправляем письмо с оповещением об удалении пользователя;

PHP:
скопировать код в буфер обмена
  1.  
  2. // получаем текущую дату и время в unix-формате
  3. $thisdate = time() + ( 360 * 60 );
  4.  
  5. // кол-во дней (лучше прописать где-нибудь в конфиге)
  6. $month = 30;
  7.  
  8. // Получаем дату и время (опять же в unix) - (минус) 30 дней
  9. $lastdate = $thisdate - ( intval( $month ) * 3600 * 24 );
  10.  
  11. // из базы выбираем пользователей, которые посещали сайт месяц и более месяца назад. Здесь же добавлю, что время последнего посещения хранить в unix (varchar (20))
  12. $query = "SELECT * FROM `users` WHERE `lastvisit` < '" . $lastdate . "'";
  13. $res = mysql_query( $query );
  14.  
  15. // В цикле производим удаление всех пользователей, кто посещал сайт месяц или более месяца назад
  16. while( $rows = mysql_fetch_array( $res ) )
  17.  {
  18.    $sql = "DELETE FROM `users` WHERE `member_id` = '" . $rows['member_id'] . "'";
  19.    $res = mysql_query( $sql );
  20.  
  21.    // отправляем письмо с оповещением об удалении
  22.    // ................
  23.  
  24.  }
  25.  
  26.  


ИМХО, удалять пользователей после 30 дней непосещения несколько нецелесообразно. Пользователь может отсутствовать в виду серьезных неприятностей, серьезной болезни и т.д. и т.п. Лучше всего удалять через 60-90 дней. Хотя, все дело в предпочтениях... Улыбка

(Отредактировано автором: 09 Октября, 2010 - 14:52:29)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Октября, 2010 - 15:05:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Valdemar пишет:
4. В цикле производим удаление всех пользователей, кто посещал сайт месяц или более назад;

зачем?
Можно одним запросом: "DELETE FROM `users` WHERE `lastvisit` < '" . $lastdate . "'"


-----
PostgreSQL DBA
 
 Top
ginec
Отправлено: 09 Октября, 2010 - 15:12:17
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Valdemar спасибо за скрипт! удаление пользователя я привел, как пример и удалять его не буду Голливудская улыбка Как удалять пользователя из БД я знаю, а вот как это сделать, чтобы скрипт запускался автоматом для каждого - не знаю. Про cron узнал только сегодня Подмигивание

(Отредактировано автором: 09 Октября, 2010 - 15:14:06)

 
 Top
Valdemar
Отправлено: 09 Октября, 2010 - 15:12:27
Post Id



Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Мелкий пишет:
Valdemar пишет:
4. В цикле производим удаление всех пользователей, кто посещал сайт месяц или более назад;

зачем?
Можно одним запросом: "DELETE FROM `users` WHERE `lastvisit` < '" . $lastdate . "'"


Так даже проще. Но как будем отправлять письмо с оповещением об удалении конкретному пользователю?

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


В смысле? Так ведь в цикле (while) происходит удаление каждого пользователя из числа тех, кто посещал сайт месяц и более назад.

Либо вариант, предложенный пользователем Мелкий...

(Отредактировано автором: 09 Октября, 2010 - 15:18:01)

 
 Top
ginec
Отправлено: 09 Октября, 2010 - 15:20:01
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




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


В смысле?

скрипт ведь должен запуститься. Я же не буду открывать его каждый час сам, тем более если будет важен каждый час.
Теперь буду выполнять такие задачи с помощью cron. Буду запускать php-скрипт через определенное время.

(Отредактировано автором: 09 Октября, 2010 - 15:26:04)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Октября, 2010 - 15:30:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Valdemar пишет:
Так даже проще. Но как будем отправлять письмо с оповещением об удалении конкретному пользователю?

Таки до запроса на удаление остаётся запрос на выборку с тем же условием.
3) выбрать непосещающих
4) разослать оповещения
5) удалить всех разом

А если оповещение не надо, то вообще 1 мелким запросом удаляются. Но ни в коем случае не запросами в цикле - накладные расходы жуткие.

(Отредактировано автором: 09 Октября, 2010 - 15:35:21)



-----
PostgreSQL DBA
 
 Top
ginec
Отправлено: 09 Октября, 2010 - 15:51:20
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)





Мелкий, у меня такая ситуация. Юзер загружает картинки, причем сколько их - я не знаю. Когда скрипт загружает картинки в цикле, то формируется массив $img[имя_файла] = размер_файла; Есть таблица с полями id name size. Я все это пихаю в цикле foreach:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach ($img as $k=>$v) {
  2. $query = "INSERT INTO `images`(`name`, `size`) VALUES('$k', '$v')";
  3. //отправляем запрос
  4. }

Можно обойтись как-то без цикла?
 
 Top
Мелкий Супермодератор
Отправлено: 09 Октября, 2010 - 16:01:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Легко:
PHP:
скопировать код в буфер обмена
  1. $query = "";
  2. foreach ($img as $k=>$v) {
  3. $query .= "('$k', '$v'),";
  4. }
  5. if ($query) mysql_query("INSERT INTO `images`(`name`, `size`) VALUES ".trim($query,","));
  6. //проверка, если массив оказался пуст, то и выполнять нечего
  7.  

(Отредактировано автором: 09 Октября, 2010 - 16:02:52)



-----
PostgreSQL DBA
 
 Top
ginec
Отправлено: 09 Октября, 2010 - 16:46:39
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Всем спс, cron - решение проблемы! Мелкий отдельное спасибо за запрос Превосходно ! Долго же я переживал за нагрузку!
 
 Top
JustUserR
Отправлено: 09 Октября, 2010 - 21:45:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ginec пишет:
Скрипт ведь должен запуститься. Я же не буду открывать его каждый час сам, тем более если будет важен каждый час.
В случае если разрабатываемый вами служебный PHP-скрипт подразумевает выполнение действий - связанных с обслуживанием сайта проводимым относительно имеющейся нагрузки и включающие в себя фоновую или завершительную обработку информации полученной от пользователей - то применение планировщика cron является неэффективным решением Дело в том что число требуемых операций явно зависит от конкретной нагрузки web-ресурса - и следовательно выбранный вами статический интервал запуска служебного процесса не адаптирован по отношению к реальным условиями - и в случае если инкрементация роста ресурсоемкости PHP-скрипта осуществляется относительно требуемого пакета обрабатываемой информации - то (D)DoS-атака произведенная на ваши ресурсы с учетом требуемых операций для формирования списка планирования - приведет к возможному сбою в работе PHP-скрипта без его автоматического последующего восстановленя - при практической реаолизации возникновение такой схемы возможно в силу отсутствия отмизиации PHP-скриптов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB