Как лучше сделать склерозник?

Статус
Закрыто для дальнейших ответов.

Nesn

Member
Регистрация
17.02.2010
Сообщения
10
Подскажите пожалуйста новичку, как лучше всего сделать склерозник (напоминалку)?

Покупатель купил расходный материал в интернет магазине. Его занесли в базу, (например, е-майл, телефон, имя, дата покупки). Через полгода ему нужно напомнить, что пришло время снова покупать.
Мысль такая. При занесении в базу сразу высчитываем полгода и заносим там же в таблицу.
Далее, скрипт запускается и прошаривает таблицу и сравнивает с текущим временем. +- столько-то дней и запись в файл или отправка уведомления на почту.
Как запускать скрипт? Через mкtime ? Еще была мысль запуска скрипта при заходе например в админ часть. То, есть появилось чего-то в $_GET скрипт пошел...

Может кто-то делал похожее, или подскажет как лучше?
 

Кирилл Меньков

Well-Known Member
Регистрация
17.02.2011
Сообщения
93
Cron используй.
Раз в день, к примеру.
В скрипте запрос к базе, который возвращает список мэйлов, которые делали заказ больше, чем полгода назад (ну или прочие условия).
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Подскажите пожалуйста новичку, как лучше всего сделать склерозник (напоминалку)?

Покупатель купил расходный материал в интернет магазине. Его занесли в базу, (например, е-майл, телефон, имя, дата покупки). Через полгода ему нужно напомнить, что пришло время снова покупать.
Мысль такая. При занесении в базу сразу высчитываем полгода и заносим там же в таблицу.
Далее, скрипт запускается и прошаривает таблицу и сравнивает с текущим временем. +- столько-то дней и запись в файл или отправка уведомления на почту.
Как запускать скрипт? Через mкtime ? Еще была мысль запуска скрипта при заходе например в админ часть. То, есть появилось чего-то в $_GET скрипт пошел...

Может кто-то делал похожее, или подскажет как лучше?
Скрипт запускать когда время истечет. Делаешь запрос к базе данных и сравниваешь дату которая указана в БД и которая сейчас:
Код:
<?php
header("Content-type: text/html; charset=utf-8");
# ...
# $array = запрос из базы данных mysql_fetch_assoc
$dateFromDB = $array["date"];
$toDate = date("Y.n");

$toDate = explode(".",$toDate);
$dateFromDB = explode(".",$dateFromDB);

$diffY = abs($toDate[0]-$dateFromDB[0]);
$diffM = abs($toDate[1]-$dateFromDB[1]);

echo "Осталось $diffY лет и $diffM месяцов";
?>
А потом просто когда оба: месяц и год равно нолю, то сделай функцию которая будет обрабатывать посылку письма на ящик.
Я в подробности не вдавался, намек ясен?
 

Кирилл Меньков

Well-Known Member
Регистрация
17.02.2011
Сообщения
93
Подскажите пожалуйста новичку, как лучше всего сделать склерозник (напоминалку)?

Покупатель купил расходный материал в интернет магазине. Его занесли в базу, (например, е-майл, телефон, имя, дата покупки). Через полгода ему нужно напомнить, что пришло время снова покупать.
Мысль такая. При занесении в базу сразу высчитываем полгода и заносим там же в таблицу.
Далее, скрипт запускается и прошаривает таблицу и сравнивает с текущим временем. +- столько-то дней и запись в файл или отправка уведомления на почту.
Как запускать скрипт? Через mкtime ? Еще была мысль запуска скрипта при заходе например в админ часть. То, есть появилось чего-то в $_GET скрипт пошел...

Может кто-то делал похожее, или подскажет как лучше?
Скрипт запускать когда время истечет. Делаешь запрос к базе данных и сравниваешь дату которая указана в БД и которая сейчас:
Код:
<?php
header("Content-type: text/html; charset=utf-8");
# ...
# $array = запрос из базы данных mysql_fetch_assoc
$dateFromDB = $array["date"];
$toDate = date("Y.n");

$toDate = explode(".",$toDate);
$dateFromDB = explode(".",$dateFromDB);

$diffY = abs($toDate[0]-$dateFromDB[0]);
$diffM = abs($toDate[1]-$dateFromDB[1]);

echo "Осталось $diffY лет и $diffM месяцов";
?>
А потом просто когда оба: месяц и год равно нолю, то сделай функцию которая будет обрабатывать посылку письма на ящик.
Я в подробности не вдавался, намек ясен?
Я бы поспорил с твоим решением - удобнее в SQL запросе условие вставить, чтобы от базы получить уже удовлетворяющие поиску данные.
У тебя же поиск строк выполняется после извлечения ВСЕХ строк, что не есть хорошо.
Индексы, грамотный запрос и все будет ок :)
На php достаточно написать лишь один foreach, который из результирующих строк соберет все email'ы, ну и вызвать функцию mail(). Остальное все я бы скинул на БД.
 

Nesn

Member
Регистрация
17.02.2010
Сообщения
10
Я бы поспорил с твоим решением - удобнее в SQL запросе условие вставить, чтобы от базы получить уже удовлетворяющие поиску данные. У тебя же поиск строк выполняется после извлечения ВСЕХ строк, что не есть хорошо. Индексы, грамотный запрос и все будет ок На php достаточно написать лишь один foreach, который из результирующих строк соберет все email'ы, ну и вызвать функцию mail(). Остальное все я бы скинул на БД.
Кирилл, в запросе сравнение времени с текущей датой?


Кстати, спасибо за подсказку с cron, но как-то не хочется зависеть от хостинга
 

Кирилл Меньков

Well-Known Member
Регистрация
17.02.2011
Сообщения
93
Я бы поспорил с твоим решением - удобнее в SQL запросе условие вставить, чтобы от базы получить уже удовлетворяющие поиску данные. У тебя же поиск строк выполняется после извлечения ВСЕХ строк, что не есть хорошо. Индексы, грамотный запрос и все будет ок На php достаточно написать лишь один foreach, который из результирующих строк соберет все email'ы, ну и вызвать функцию mail(). Остальное все я бы скинул на БД.
Кирилл, в запросе сравнение времени с текущей датой?


Кстати, спасибо за подсказку с cron, но как-то не хочется зависеть от хостинга
Я бы сначала вычислил дату, с которой надо сравнивать.
Например, если это полгода, то:
(сегодня - полгода) >= дата_покупки ? отправляем уведомление : полгода еще не прошло
При этом, если уведомления высылаются 1 раз, то я бы еще завел таблицу, куда заносил ящики, на которые уведомления отправлены, либо просто бы удалял эти ящики из базы.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Подскажите пожалуйста новичку, как лучше всего сделать склерозник (напоминалку)?

Покупатель купил расходный материал в интернет магазине. Его занесли в базу, (например, е-майл, телефон, имя, дата покупки). Через полгода ему нужно напомнить, что пришло время снова покупать.
Мысль такая. При занесении в базу сразу высчитываем полгода и заносим там же в таблицу.
Далее, скрипт запускается и прошаривает таблицу и сравнивает с текущим временем. +- столько-то дней и запись в файл или отправка уведомления на почту.
Как запускать скрипт? Через mкtime ? Еще была мысль запуска скрипта при заходе например в админ часть. То, есть появилось чего-то в $_GET скрипт пошел...

Может кто-то делал похожее, или подскажет как лучше?
Скрипт запускать когда время истечет. Делаешь запрос к базе данных и сравниваешь дату которая указана в БД и которая сейчас:
Код:
<?php
header("Content-type: text/html; charset=utf-8");
# ...
# $array = запрос из базы данных mysql_fetch_assoc
$dateFromDB = $array["date"];
$toDate = date("Y.n");

$toDate = explode(".",$toDate);
$dateFromDB = explode(".",$dateFromDB);

$diffY = abs($toDate[0]-$dateFromDB[0]);
$diffM = abs($toDate[1]-$dateFromDB[1]);

echo "Осталось $diffY лет и $diffM месяцов";
?>
А потом просто когда оба: месяц и год равно нолю, то сделай функцию которая будет обрабатывать посылку письма на ящик.
Я в подробности не вдавался, намек ясен?
Я бы поспорил с твоим решением - удобнее в SQL запросе условие вставить, чтобы от базы получить уже удовлетворяющие поиску данные.
У тебя же поиск строк выполняется после извлечения ВСЕХ строк, что не есть хорошо.
Индексы, грамотный запрос и все будет ок :)
На php достаточно написать лишь один foreach, который из результирующих строк соберет все email'ы, ну и вызвать функцию mail(). Остальное все я бы скинул на БД.
Я б не стал пользоватся е*анутой функциией mail(). Уж лучше использовать класс PHPMailer через SMTP и свой ящик чем mail();
 
Статус
Закрыто для дальнейших ответов.
Верх Низ