Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [problem logiczny] Jak zrobic autoresponder ?
Forum PHP.pl > Forum > PHP
Maniek159
Czesć,

Sprawa jest następują - otóż, potrzebuję wykonac tzw autoresponder i mam problem logiczny, bo nie wiem jak ugryźć ten problem.

Mam stronę WWW i na niej formularz do zapisu w formie:

"Wpisz imię oraz adres email, a zostaneisz zapisany" - i ludzie, któzy zatwierdzą formularz zapisują się na kurs przeze mnie prowadzony. Wszystko trzymam w bazie danych i z tym problemu nie mam.

probem jest w tym, że chcę wysyłac co tydzień nowa lekcję do każdego zapisanego. W tym momencie moge słać mailingi masowe, ale ja chcę robić coś takiego, że ktoś zapisze się 1 stycznia i 7 stycznia otrzymuje drugą lekcję, a ktoś zapsize się 2 stycznia, to ósmego stycznia otrzyma drugą lekcję.

Chcę by to działo się schematycznie:

Zapis ze strony WWW + pierwsza lekcja na email
7 dnia od zapisania - 2 leckja na email
14 dnia od zapisania - 3 lekcja na email
21 dnia od zapisania - 4 leckja na email
itd.

Chciałbym, by to ile dni ma iśc przesyłka po przesyłce było niezależne od tego kiedy się kto zarejestrował.

Coś takiego jak implebot.pl (działanie).

Może coś pomożecie ?

Pozdro,
Maniek
tehaha
Czyli rozumiem, że lekcje mają być wysyłane dla każdego użytkownika w innym czasie, co 7dni od daty jego rejestracji
Ja bym spróbował tak:
- pierwszą lekcję wysyłasz od razu po rejestracji
- ustawiasz crona, aby codziennie w nocy sprawdzał czy trzeba komuś coś wysłać, czyli:

1. pobierasz z bazy użytkowników i odejmujesz od obecnej daty datę rejestracji
- możesz to zrobić np. funkcją mysql DATE_DIFF, która zwróci różnicę wyrażoną w dniach -> http://dev.mysql.com/doc/refman/5.1/en/dat...nction_datediff
- lub w php:
  1. $date_diff = round((strtotime("now")-strtotime($row['register_date']))/86400);

2. dla każdego pobranego rekordu sprawdzasz czy ta różnica dzieli się bez reszty przez 7 ( bo chcesz wysyłać raz w tygodniu), jeżeli tak to ten rekord zapisujesz sobie do tablicy oraz zapisujesz wynik dzielenia i dodajesz 1, bo to będzie numer lekcji
  1. $users_for_mailing = array();
  2.  
  3. while($row = mysql_fetch_array($result))
  4. {
  5. $date_diff = $row['date_diff'];
  6. $user_email = $row['user_email'];
  7. $divide = $date_diff/7;
  8. $lesson_number = divide +1;
  9. if(is_int($divide))
  10. {
  11. $users_for_mailing[] = array('user_email'=>"$user_email", 'lesson_number'=>"$lesson_number");
  12. }
  13. }

otrzymasz tablicę z użytkownikami, którzy zapisali się 7,14,21,28.....dni od rejestracji, lesson_number to oczywiście numer lekcji, którą trzeba wysłać temu użytkownikowi
Maniek159
@up - bardzo dziękuję za pomoc, w tym momencie może i by działało, ale co zrobić w momencie kiedy __ miałby postać:

1 lekcja - zaraz po rejestracji
2 lekcja - 3 dni po poprzedniej lekcji
3 lekcja - 8 dni po poprzedniej lekcji
4 lekcja - 4 dni po poprzedniej lekcji
itd.

Czyli nie mamy powiedziane, że jest to 7 dni, a losowa liczba z przedziału 1-10, bo chciałbym dac użytkownikom mozliwość ile dni ma iśc mail po mailu i wszysto ustawiane indywidualnie, i tutaj mam jeszcze wiekszy problem.

Z zaprogramowaniem nie będe miał problemu, tylko jak to __ ugryźć.

Btw: wazne są dla mnie aspekty optymalizacyjne, w bazie mam teraz prawie 12 tys. abonentów.
tehaha
W takim razie zrobiłbym to inaczej, jeżeli każdy user może dowolnie ustawić sobie że np. lekcje 1,2,3,4,5 będą przychodziły sobie w odstępach 5,9,2,6,4 dni , czyli całkowicie niezależnie to stworzyłbym dodatkową tabelę z użytkownikiem, datą wysłania lekcji i numerem lekcji, czyli od razu po tym ustawieniu przez użytkownika wyliczyłbym datę dla każdej lekcji, np:
  1. $lesson_2 = date("Y-m-d", strtotime($register_date) + strtotime("4 days"));
  2. $lesson_3 = date("Y-m-d", strtotime($register_date) + strtotime("2 days"));
  3. $lesson_4 = date("Y-m-d", strtotime($register_date) + strtotime("7 days"));

potem, zapis do tabeli:

Tabela date_lesson_user_assoc
id | user_id | lesson_number | lesson_datetime

i wtedy cronem codziennie pobierasz te rekordy gdzie lesson_datetime = $today, robisz LEFT JOIN na tabelę z użytkownikami, żeby pobrać nazwę użytkownika i adres e-mail, i wysyłasz każdemu co trzeba,

można by jeszcze dodatkowo wprowadzić kolumnę lesson_sent z wartością 1 lub 0, aby po wysłaniu maila zapisać, które maile zostały wysłane,
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.