Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Newsletter
Forum PHP.pl > Forum > Gotowe rozwi±zania
mitp
Witam. Potrzebuje pomocy odno¶nie jednego skryptu (newsletter-a). Otó¿ brakuje w nim blokady tego samego e-maila, tzn ¿e mo¿na dodaæ kilka razy ten sam e-mail, jak równie¿ skrypt pozwala na dodanie pustego pola (pustka). St±d moje skromne ;-) pytanko : co nale¿a³o by dodac, wstawiæ aby za³ataæ t± luke questionmark.gif rolleyes.gif

link do skryptu: Mailinglista napisana w php i oparta o pliki tekstowe

a teraz pliki:

subscribe.php

  1. <?
  2. /* PASTE THIS CODE SOMEWHERE IN YOUR PAGE, CHANGE FORMATTING AT YOUR PLEASURE */
  3. // Displays the form to add emails to list;
  4. $filelist = &#092;"emails.txt\";
  5. if (isset($email)) {
  6.  addEntry($email);
  7. }
  8.  
  9. function displayAddEntryForm() {
  10.  echo &#092;"Subscribe:\";
  11.  echo &#092;"<form name=addEntry action=subscribe.php method=post>\";
  12.  echo &#092;"<input type=text name=email>\";
  13.  echo &#092;"<input type=submit name=submit value=subscribe>\";
  14.  echo &#092;"</form>\";
  15. }
  16.  
  17. // Adds emails to list;
  18. function addEntry($email) {
  19.  $fp = fopen($GLOBALS[&#092;"filelist\"], \"a\");
  20.  $emailsize = strlen($email . &#092;"n\");
  21.  $fw = fwrite($fp, $email . &#092;"n\", $emailsize);
  22.  if ($fw)
  23. echo &#092;"<h2><div align=center>You have subscribed successfully!</div></h2>\";
  24.  else
  25. echo &#092;"Error!\";
  26. }
  27.  
  28. displayAddEntryForm();
  29. ?>



oraz admin_mailing.php

  1. <?
  2. // Some variables;
  3. // Your emails list file;
  4. $filelist = &#092;"emails.txt\";
  5. // Email headers that subscribed users see
  6. // when you send them an email;
  7. $adminmail = &#092;"webmaster@php.inc.ru\";
  8. $emailheaders = &#092;"From: \" . $adminmail . \"nReply-To: \" . $adminmail;
  9. // By default we display entries;
  10. if (!isset($mode))
  11.  $mode = &#092;"unknown\";
  12.  
  13. // Since all administration is in one file,
  14. // we choose what to to do now;
  15. switch ($mode) {
  16.  case &#092;"create\": createList(); break;
  17.  case &#092;"display\": displayEntries($filelist); break;
  18.  case &#092;"add\": addEntry($email); break;
  19.  case &#092;"edit\": displayEditForm($id); break;
  20.  case &#092;"doEdit\": editEntry($email, $oldvalue); break;
  21.  case &#092;"delete\": deleteEntry($id); break;
  22.  case &#092;"send\": sendNews($subject, $message); break;
  23.  default:
  24.  if (file_exists($filelist)) {
  25. displayEntries(); displayAddEntryForm();
  26.  }
  27.  
  28. }
  29.  
  30.  
  31.  
  32. /* THIS IS THE PART WHERE WE CREATE A MAILING LIST FILE AUTOMATICALLY */
  33. /* IGNORE IT IF YOU HAVE CREATED IT MANUALLY (NOTHING WILL BE DISPLAYED */
  34. if (!file_exists($filelist)) {
  35.  echo &#092;"<h2>Please, make sure you have 777 permissions for current
  36.  directory to create the mailing list file and click the button or
  37. create it manually and set 666 permissions on it</h2>&#092;";
  38.  
  39.  echo &#092;"<form name=createFile action=admin_mailing.php method=post>\";
  40.  echo &#092;"<input type=submit name=mode value=create mailing list file>\";
  41.  echo &#092;"</form>\";
  42.  exit;
  43. }
  44.  
  45. function createList() {
  46.  $fp = fopen($GLOBALS[&#092;"filelist\"], \"w\");
  47.  if ($fp) {
  48. echo &#092;"<h2>Mailing list file created successfully!</h2>\";
  49. echo &#092;"<b>\" . $GLOBALS[\"filelist\"] . \"</b>\";
  50. echo &#092;"<meta http-equiv='Refresh' content='1; URL=admin_mailing.php'>\";
  51.  }
  52.  else
  53. echo &#092;"Error!\";
  54. }
  55. /**************************************************************************/
  56.  
  57.  
  58. // Sends news to subscribers;
  59. function sendNews($subject, $message) {
  60.  $filecontents = file($GLOBALS[&#092;"filelist\"]);
  61.  for ($i=0;$i<sizeof($filecontents);$i++) {
  62.  $a = mail($filecontents[$i], $subject, stripslashes($message), $GLOBALS[&#092;"emailheaders\"]);
  63.  if (!$a)
  64.  }
  65.  echo &#092;"Spam sent!;)\";
  66.  echo &#092;"<meta http-equiv='Refresh' content='1; URL=admin_mailing.php'>\";
  67.  exit;
  68. }
  69.  
  70. // Displays the form to add emails to list;
  71. function displayAddEntryForm() {
  72.  echo &#092;"<h1>Add email to list:</h1>\";
  73.  echo &#092;"<form name=addEntry action=admin_mailing.php method=get>\";
  74.  echo &#092;"<input type=text name=email>\";
  75.  echo &#092;"<input type=hidden name=mode value=add>\";
  76.  echo &#092;"<input type=submit name=submit value=add>\";
  77.  echo &#092;"</form>\";
  78. }
  79.  
  80. // Adds emails to list;
  81. function addEntry($email) {
  82.  $fp = fopen($GLOBALS[&#092;"filelist\"], \"a\");
  83.  $emailsize = strlen($email . &#092;"n\");
  84.  $fw = fwrite($fp, $email . &#092;"n\", $emailsize);
  85.  if ($fw) {
  86. echo &#092;"<h2><div align=center>Entry added successfully!</div></h2>\";
  87. echo &#092;"<meta http-equiv='Refresh' content='1; URL=admin_mailing.php'>\";
  88.  }
  89.  else
  90. echo &#092;"Error!\";
  91. }
  92.  
  93. // Displays emails from list;
  94. // by default it display last 10 emails;
  95. function displayEntries() {
  96.  echo &#092;"Show last <a href=admin_mailing.php?limit=10>10 emails</a> ||
  97.  <a href=admin_mailing.php?limit=20>20 emails</a> ||
  98.  <a href=admin_mailing.php?limit=50>50 emails</a> ||
  99.  <a href=admin_mailing.php?showall=>Show all</a><p>&#092;";
  100.  $filecontents = file($GLOBALS[&#092;"filelist\"]);
  101.  if (isset($GLOBALS[&#092;"limit\"]))
  102. $limit = $GLOBALS[&#092;"limit\"];
  103.  if ((!isset($GLOBALS[&#092;"limit\"])) and (!isset($GLOBALS[\"showall\"])))
  104. $limit=10;
  105.  if (isset($GLOBALS[&#092;"showall\"])) {
  106. for ($i=sizeof($filecontents)-1;$i>=0;$i--) {
  107. echo $filecontents[$i] . &#092;" <a href=admin_mailing.php?mode=edit&id=\" .
  108. $filecontents[$i] . &#092;">Edit</a> || <a href=admin_mailing.php?mode=delete&id=\" .
  109. $filecontents[$i] . &#092;">Delete</a><br>\";
  110. }
  111.  }
  112. elseif (isset($limit)) {
  113. $count = 1;
  114. for ($i=sizeof($filecontents)-1;$count<=$limit;$i--) {
  115. echo $filecontents[$i] . &#092;" <a href=admin_mailing.php?mode=edit&id=\" .
  116. $filecontents[$i] . &#092;">Edit</a> || <a href=admin_mailing.php?mode=delete&id=\" .
  117. $filecontents[$i] . &#092;">Delete</a><br>\";
  118. $count++;
  119. }
  120. }
  121.  
  122.  
  123. }
  124.  
  125. // Displays the form to edit an email;
  126. function displayEditForm($id) {
  127.  echo &#092;"<h1>Edit email:</h1>\";
  128.  echo &#092;"<form name=editForm action=admin_mailing.php method=get>\";
  129.  echo &#092;"<input type=text name=email value=\" . $id . \">\";
  130.  echo &#092;"<input type=hidden name=oldvalue value=\" . $id . \">\";
  131.  echo &#092;"<input type=hidden name=mode value=doEdit>\";
  132.  echo &#092;"<input type=submit name=submit value=update>\";
  133.  echo &#092;"</form>\";
  134.  exit;
  135. }
  136.  
  137. // Edits an email and writes the updated file;
  138. function editEntry($email, $oldvalue) {
  139.  $filecontents = file($GLOBALS[&#092;"filelist\"]);
  140.  for ($i=0;$i<sizeof($filecontents);$i++) {
  141.  if (chop($filecontents[$i]) == $oldvalue) {
  142. $filecontents[$i] = $email . &#092;"n\";
  143. $fp = fopen($GLOBALS[&#092;"filelist\"], \"w+\");
  144. for ($a=0;$a<sizeof($filecontents);$a++) {
  145. $emailsize = strlen($filecontents[$a] . &#092;"n\");
  146. $fw = fwrite($fp, $filecontents[$a], $emailsize);
  147. }
  148. echo &#092;"<h2><div align=center>Entry changed!</div></h2>\";
  149. echo &#092;"<meta http-equiv='Refresh' content='1; URL=admin_mailing.php'>\";
  150.  }
  151.  }
  152. }
  153.  
  154. // Deletes an email and writes an updated file;
  155. function deleteEntry($id) {
  156.  $filecontents = file($GLOBALS[&#092;"filelist\"]);
  157.  for ($i=0;$i<sizeof($filecontents);$i++) {
  158.  if (chop($filecontents[$i]) == $id) {
  159. $filecontents[$i] = &#092;"\";
  160. $fp = fopen($GLOBALS[&#092;"filelist\"], \"w+\");
  161. for ($a=0;$a<sizeof($filecontents);$a++) {
  162. $emailsize = strlen($filecontents[$a]);
  163. $fw = fwrite($fp, $filecontents[$a], $emailsize);
  164. }
  165. echo &#092;"<h2><div align=center>Entry deleted!</div></h2>\";
  166. echo &#092;"<meta http-equiv='Refresh' content='1; URL=admin_mailing.php'>\";
  167.  
  168.  }
  169.  }
  170. }
  171.  
  172. ?>
  173. <h2>Enter any text here that you want to send to all your subscribers:</h2>
  174. <form name=sendEmail action=admin_mailing.php method=post>
  175. Subject:<br><input type=text name=subject><br>
  176. Message body:<br><textarea name=message rows=10 cols=50></textarea><br>
  177. <input type=submit name=mode value=send>
  178. </form>


w sk³ad wchodzi jeszcze plik emails.txt

Bede wdzieczny za pomoc.
bigZbig
Skrypt jest prosty i w zasadzie moznaby z nim duzo zrobic. Oprocz sprawdzania czy dany emiail juz istnieje i czy dodawany ci±g nie jest pusty mozna by jeszcze zaimplementowac sprawdzanie czy dodawany tekst posiada znamiona adresu email, zatwierdzanie adresow podanych przez uzytkownikow, poprawienie funkcji wyswietlajacej liste adresow i jeszcze pare innych rzeczy.

Proponuje abys sprobowal samodzielnie to zrobic i pisal tu tylko jesli natrafisz na jakies problemy.

Jesli nie znasz php i nie masz zamiaru sie go uczyc zamiesc ten temat na forum "Gielda ofert" i zaproponuj cos w zamian. Mozesz tez poszukac w sieci gotowego, innego, doskonalszego mechanizmu maillinglisty.
mitp
heh namotalem takiego cudaka ale przydala bys ie mala podpowiedz - bo nie chula

  1. <?php
  2.  
  3. /* PASTE THIS CODE SOMEWHERE IN YOUR PAGE, CHANGE FORMATTING AT YOUR PLEASURE */
  4. // Displays the form to add emails to list;
  5. $filelist = &#092;"emails.txt\";
  6.  
  7. if (isset($email)) {
  8.    addEntry($email);
  9. }
  10.  
  11. //sprawdzanie poprawnosci e-maila
  12. function emailsyntax_is_valid($email) {
  13.   $to_work_out = explode(&#092;"@\", $email);
  14.   if (!isset($to_work_out[0])) return FALSE;
  15.   if (!isset($to_work_out[1])) return FALSE;
  16.  
  17.   $pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?).([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
  18.   $pattern_domain = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?).([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*.[a-z]{2,4}$';
  19.   $match_local = eregi($pattern_local, $to_work_out[0]);
  20.   $match_domain = eregi($pattern_domain, $to_work_out[1]);
  21.  
  22.   if ($match_local && $match_domain) {
  23.     return TRUE;
  24.   }
  25.   return FALSE;
  26. }
  27.  
  28. function displayAddEntryForm() {
  29.          echo &#092;"<form name=addEntry action=newsletter/subscribe.php method=post>\";
  30.          echo &#092;"<input type=\"text\" size=\"27\" name=\"email\" style=\"font-family: Verdana; font-size: 7pt; border: 1px solid #6E849E\">\";
  31.  
  32.          echo &#092;"<div align=right><input type=\"image\" SRC=\"images/newsletter/zapisz.gif\" width=\"50\" height=\"15\" ALT=\"subscribe\" name=\"submit\" value=\"subscribe\"></div>\";
  33.          echo &#092;"</form>\";
  34. }
  35.  
  36. // Dodanie e-maila do listy;
  37. function addEntry($email) {
  38.          $fp = fopen($GLOBALS[&#092;"filelist\"], \"a\");
  39.          $emailsize = strlen($email . &#092;"n\");
  40.          $fw = fwrite($fp, $email . &#092;"n\", $emailsize);
  41.          if ($fw; emailsyntax_is_valid($email)) {
  42.             echo &#092;"<br>\";
  43.             echo &#092;"<h5><div align=center>Dziêkujemy. Twoj e-mail zosta³ dodany do listy!</div></h5>\";
  44.             echo &#092;"<br><h6><div align=center>proszê czekaæ</div></h6>\";
  45.             echo &#092;"<meta http-equiv='Refresh' content='2; URL=http://www.xxx.xx>\";
  46.             exit;
  47.          }
  48.          else
  49.             echo &#092;"<h5>B³±d! Spróbuj ponownie b±d¼ skontaktuj siê z <a href=\"mailto:xxx@xx.pl?subject=problem z rejestracj±\">administratorem</a></h5>\";
  50. }
  51.  
  52. or
  53.  
  54.          if (!emailsyntax_is_valid($email)) {
  55.          echo &#092;"Invaild\";
  56.          }
  57.  
  58.  
  59. displayAddEntryForm();
  60.  
  61. ?>
bigZbig
Nie bede sprawdzal poprawnosci funkcji emailsyntax_is_valid bo zapewne znalales gdzies te funkcje. Jedynie drobna uwaga. powinienes zmienic nazwe funkcji aby dostosowac ja do przyjetej w projekcie konwencji. Poszczegolne slowa nie sa oddzielone podkreslnikami tylko wyroznione wielka litera.

Ten kawalek kodu jest zly.
  1. <?php
  2.  
  3.  $fw = fwrite($fp, $email . &#092;"n\", $emailsize);
  4.  if ($fw; emailsyntax_is_valid($email)) {
  5.  
  6. ?>

Z³a sk³adnia i z³a kolejnosc wykonywania dzialan.
1 Moim zdaniem to (if ($fw; emailsyntax_is_valid($email))) nie moze zadzia³ac.
2 Najpierw zapisales w pliku email a dopiero potem sprawdzales czy jest poprawny?
  1. <?php
  2.  
  3. $is_valid = emailsyntax_is_valid($email);  
  4. if ($is_valid) {
  5. $fp = fopen($GLOBALS[&#092;"filelist\"], \"a\");
  6. $emailsize = strlen($email . &#092;"n\");
  7. $fw = fwrite($fp, $email . &#092;"n\", $emailsize);
  8. }
  9. if($fw) {
  10. echo &#092;"<br>\";
  11. echo &#092;"<h5><div align=center>Dziêkujemy. Twoj e-mail zosta³ dodany do listy!</div></h5>\";
  12. echo &#092;"<br><h6><div align=center>proszê czekaæ</div></h6>\";
  13. echo &#092;"<meta http-equiv='Refresh' content='2; URL=http://www.xxx.pl'>\";
  14. } else
  15. echo &#092;"<h5>B³±d! Spróbuj ponownie b±d¼ skontaktuj siê z <a href=\"mailto:mitp@xxx.pl?subject=problem z rejestracj±\">administratorem</a></h5>\";
  16. }
  17.  
  18.  
  19.  
  20. ?>
mitp
Thx bigZbig za wszystko ;-) - namotalem cos tam nie dzialao twoje rady pomogly - a propo skryptu (funkcji to tak znalazlem w necie), sprawdzilo pare osob, ptzyjaciol i jakos chodzi. Postarams ie rozbudowac nieco skrypt. pozdrawiam
jasior007
witam wszystkich, jeszcze sie zapytam o jedn± rzecz, tez uzywam tego skryptu ale czy ktos wie jak go przerobic na wersjê aby mo¿na bylo wysylac tekst w postaci htmla a nie zwyklego tesktu, bardzo prosze na odpowiedz:) pozdrawiam
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.