Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Link w mailu dopisujący odbiorcę do bazy newslettera
Forum PHP.pl > Forum > PHP
Tomaan
Witam wszystkich,

chciałem zapytać czy do zrobienia kodu dopisującego adresata maila do bazy newsletera w sklepie internetowym jest długi i trudny?

Chodzi mi o to, że ktoś kilka w link w mailu (html) i ten przenosi go do strony (to musi być chyba php) dopisując do bazy subskrybentów. Ewentualnie wiadmość "Twój adres został dopisany!".

Dużo z tym zabawy? Nie znam się kompletnie na PHP, można przerobić jakiś gotowy skrypt do tego celu?

A może ktoś z Was zrobiłby to za parę złotych?

Proszę o info! Pozdrawiam.
plurr
nie jest to trudne, raczej chodzi Ci o pewnego rodzaju autoryzację. Najpierw delikwent musi pozostawić swój adres email w formularzu, następnie wysyłamy potwierdzenie (link) na podany adres z odpowiednim tokenem - po kliknięciu, dodajemy adres do bazy newsletterowej.

Dla doświadczonego programisty napisanie tego, to robota na góra godzinę - większość z nas miała do czynienia z wysyłaniem maili, rejestracją, autoryzacją itp. Oczywiście inna rzeczą jest dodanie takiego gotowego mechanizmu do sklepu, który już posiadasz - może się okazać, że Twój sklep jest napisany w sposób przedpotopowy - wtedy zajmie to większą ilość czasu.

Jak widzisz, wszystko od czegoś zależy smile.gif
Tomaan
Hej, dzięki za info. Tzn. bez potwierdzenia, link w mailu będzie miał anchor np. "Zgadzam się na dopisanie do listy subskrybentów (...)" i po jego kliknięciu już potwierdzenia nie potrzebuję, cała treść, fragment ustawy i takie tam będa w treści maila.

Chodzi o to, żeby po kliknięciu w htmlu mail dopisał się do bazy lub do byle jakiego pliku, bo to będzie łatwiejsze na pewno.

Wykona ktoś to dla mnie za pare złotych? Nie ważne jak, byle działało, może być nawet bałagan w kodzie.

Nie musi być super, chodzi o efekt, można nawet wykorzystać formularz newslettera, który jest na klapie, nie wiem, byle pobrać adres maila i go dopisać do listy.

Skrypt sklepu to niestety Shoper.pl

Adres sklepu podam przez PW.

Jeśli chodzi o formularz subskrypcji na sklepie to znalazłem w pliku index.php takie coś:

  1. $timer->start('subsc.inc');
  2. if (isset($_REQUEST['subsc']) || (isset($_GET['action']) and isset($_POST['email'])) ||
  3. isset($_GET['verifyorder']) || isset($_GET['verify_code']))
  4. include ('subsc.inc');
  5. $timer->stop('subsc.inc');


Poniżej zawartość pliku subsc.inc:

  1. <?php
  2. /*****************************************************************************
  3. * *
  4. * Sumcart.com,Shoper.pl *
  5. * Copyright (c) 2005 DEVAREA s.c. *
  6. * *
  7. ****************************************************************************/
  8. $session = Zend_Registry::get('session');
  9. $db = Zend_Registry::get('db');
  10.  
  11. if (isset($_POST['subsc']))
  12. {
  13. if (isset($_POST['email']))
  14. {
  15. if (verifyEmail($_POST['email']))
  16. {
  17. $adres_email = emailFiltr($_POST['email']);
  18.  
  19. $select = $db->select()->from(DB_PREFIX . 'subscribers', '*')->where('sub_email = ?',
  20. $adres_email);
  21.  
  22. $result_sub = $select->query()->fetchAll();
  23.  
  24. $uri = Zend_Uri::factory(CONF_SHOP_URL);
  25. if(isset($_SERVER['HTTP_HOST']) && strlen($_SERVER['HTTP_HOST'])>3)
  26. {
  27. $uri->setHost($_SERVER['HTTP_HOST']);
  28. }
  29.  
  30. // jezeli nie istnieje to generuje unikalna liczbe
  31. if (count($result_sub) == 0)
  32. {
  33. $losowa = md5(uniqid(rand(), true));
  34. $wiadomosc = SUBSC_HELLO_TO . ' (' . $adres_email . ') ' . SUBSC_PLEASE_ADD;
  35. $action = 'add';
  36. if (substr((string)$uri, -1) != "/")
  37. {
  38. $slash = "/";
  39. } else
  40. {
  41. $slash = "";
  42. }
  43. $link = (string)$uri . $slash . "index.php?verify_code=" . $losowa . "&email=" .
  44. $adres_email . "&action=" . $action;
  45.  
  46. $select = $db->select()->from(DB_PREFIX . 'mail', '*')->where('mail_lang = ?', $session->
  47. lang)->where('mail_name = ?', 'MAIL_SUBSC_ADD');
  48.  
  49. $mailSettings = $select->query()->fetch();
  50.  
  51. $lista_zam = array('_link', '_shop_name');
  52. $lista_ok = array($link, CONF_SHOP_NAME);
  53. $body = str_replace($lista_zam, $lista_ok, $mailSettings['mail_content']);
  54. $mailTitle = str_replace($lista_zam, $lista_ok, $mailSettings['mail_title']);
  55.  
  56. // dodaje do bazy
  57. $insertData = array('sub_email' => $adres_email, 'active' => 0, 'verify_code' =>
  58. $losowa, 'dateadd' => date("Y-m-d H:i:s"));
  59.  
  60. $db->insert(DB_PREFIX . 'subscribers', $insertData);
  61. } else
  62. {
  63. // sprawdza czy podany email juz istnieje w bazie
  64. $wiadomosc = SUBSC_HELLO_TO . ' (' . $adres_email . ') ' . SUBSC_PLEASE_DELETE;
  65.  
  66. $select = $db->select()->from(DB_PREFIX . 'subscribers', 'verify_code')->where('sub_email = ?',
  67. $adres_email)->limit(1);
  68. $result_code = $select->query();
  69.  
  70. $Aresult_code = $result_code->fetch();
  71. $losowa = $Aresult_code['verify_code'];
  72. $action = 'delete';
  73. if (substr((string)$uri, -1) != "/")
  74. {
  75. $slash = "/";
  76. } else
  77. {
  78. $slash = "";
  79. }
  80. $link = (string)$uri . $slash . "/index.php?verify_code=" . $losowa . "&email=" .
  81. $adres_email . "&action=" . $action;
  82.  
  83. $select = $db->select()->from(DB_PREFIX . 'mail', '*')->where('mail_lang = ?', $session->
  84. lang)->where('mail_name = ?', 'MAIL_SUBSC_DEL');
  85.  
  86. $mailSettings = $select->query()->fetch();
  87.  
  88. $lista_zam = array('_link', '_shop_name');
  89. $lista_ok = array($link, CONF_SHOP_NAME);
  90. $body = str_replace($lista_zam, $lista_ok, $mailSettings['mail_content']);
  91. $mailTitle = str_replace($lista_zam, $lista_ok, $mailSettings['mail_title']);
  92. }
  93. } else
  94. {
  95. $wiadomosc = SUBSC_NOT_EMAIL;
  96.  
  97. }
  98. $smarty->assign('notify', $wiadomosc);
  99.  
  100. if (isset($action))
  101. {
  102. // mail to custommer subsc
  103. try
  104. {
  105. sendEmail($adres_email, $mailTitle, $body, $mailSettings["mail_from"], $mailSettings["mail_from_name"]);
  106. }
  107. catch (exception $e)
  108. {
  109. $error = PROBLEM_WITH_MAIL . " " . $e->getMessage();
  110. $smarty->assign('notify', $error);
  111. }
  112. }
  113. }
  114.  
  115.  
  116. $smarty->assign('main_page', 'subsc.tpl');
  117.  
  118. }
  119.  
  120. if (isset($_GET['action']))
  121. {
  122. // sprawdza czy podany kod istnieje w bazie
  123. $select = $db->select()->from(DB_PREFIX . 'subscribers', '*')->where('verify_code = ?',
  124. $_GET['verify_code'])->where('sub_email = ?', $_GET['email'])->limit(1);
  125.  
  126. $result_check_code = $select->query();
  127.  
  128. if (count($result_check_code) == 1)
  129. {
  130. if ($_GET['action'] == 'add')
  131. {
  132. $d = $db->select()->from(TABLE_SUBSCIRBERS)->where('verify_code=?', (string )$_GET['verify_code'])->
  133. where('sub_email=?', (string )$_GET['email'])->query()->fetch();
  134.  
  135. if ($d !== null)
  136. {
  137. if ($d['active'] == 0)
  138. {
  139. $db->query("UPDATE " . DB_PREFIX .
  140. "subscribers SET `active` = 1 WHERE `verify_code` = ?", array($_GET['verify_code']));
  141. $wiadomosc = SUBSC_EMAIL_ADDED;
  142. } else
  143. {
  144. $wiadomosc = SUBSC_EMAIL_ALREADY_CONFIRMED;
  145. }
  146. } else
  147. {
  148. $wiadomosc = SUBSC_EMAIL_NOT_EXISTS;
  149. }
  150.  
  151. }
  152.  
  153. if ($_GET['action'] == 'delete')
  154. {
  155. $d = $db->select()->from(TABLE_SUBSCIRBERS)->where('verify_code=?', (string )$_GET['verify_code'])->
  156. where('sub_email=?', (string )$_GET['email'])->query()->fetch();
  157.  
  158. if ($d !== null)
  159. {
  160. $db->delete(DB_PREFIX . 'subscribers', $db->quoteInto('sub_email = ?', $_GET['email']));
  161.  
  162. $wiadomosc = SUBSC_EMAIL_DELETED;
  163. } else
  164. {
  165. $wiadomosc = SUBSC_EMAIL_NOT_EXISTS;
  166. }
  167. }
  168. } else
  169. {
  170. $wiadomosc = SUBSC_AUTH_ERROR;
  171. }
  172.  
  173. $smarty->assign('notify', $wiadomosc);
  174. $smarty->assign('main_page', 'subsc.tpl');
  175.  
  176. }
  177.  
  178. if (isset($_GET['subsc']))
  179. {
  180. $wiadomosc = SUBSC_CONFIRM;
  181.  
  182. $smarty->assign('notify', $wiadomosc);
  183. $smarty->assign('main_page', 'subsc.tpl');
  184. }
  185.  
  186. // Potwierdzanie zamowienia
  187. if (is_numeric($_GET['verifyorder']) and isset($_GET['verifycode']))
  188. {
  189. $affected = $db->update(DB_PREFIX . "orders", array('confirm' => 1), array($db->
  190. quoteInto("code = ?", $_GET['verifycode']), $db->quoteInto("order_id = ?", $_GET['verifyorder'])));
  191.  
  192. if ($affected > 0)
  193. {
  194. $notify = ORDER_CONFIRM_OK . $_GET['verifyorder'];
  195. } else
  196. {
  197. $notify = ORDER_CONFIRM_ERROR;
  198. }
  199.  
  200. $smarty->assign('notify', $notify);
  201. $smarty->assign('main_page', 'notify.tpl');
  202. }
  203.  
  204. ?>
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.