让PHP管理小型的邮件列表

最近有一个读者问我关于ThickBook新闻列表中处理订阅/退订的机制,并且是如何与实际的发送信息相配合,给邮件列表中的所有收信人的。问题提的不错,有一个相当轻易的方法,但是我首先要说的是我所做的没有任何投机取巧的地方,因为我非常的酷—-就是有,我使用这个方法也只是因为我懒。

注意:在市面上有非常多的邮件列表软件,可以把它装在系统上,并且也有一些别的,更多的是结合在一起的脚本集,你 也可以用来做同样的事情。但是,正如我所说,我是一个懒人,不想下载和安装任何东西,所以我生成了几 个相当简单的页面,用来执行我所要求的工作。很希望,有人能从中学到一些东西。

首先是订阅/退订脚本,它所做的工作就是从数据库表中增加或删除记录。把它叫做"manage.phtml" 或 差不多的什么东西。这样呢,就需要后台是某种数据库,在上面可以创建订阅表。根据政治中的半数原则,所以我将使用MySQL作为这个例子的数据库。你可以使用任何你常用的数据库,只是据PHP手册替换正确的数据库相关函数。

在我的订阅表中,我使用了两个字段:邮件地址(email_addr)和添加日期(date_added)。你可以根据需要增加字段,或者将date_added字段删除。在这个例子中,我只是向你展示我做了什么,你可以适当的进行 修改。在我的订阅表中,email_addr字段是一个不重复字段,意味着你不能增加另一个与之完全一样的e-mail 地址。这个可以避免重复订阅,而且当用户想退订时,也使删除记录的方法变得简单和可靠。

那么,让我们创建订阅/退订表单吧(manager.phtml或你想起的什么名字)。我使用同一个文件处理订阅和退订,也包括表格自身的动作,所以可能有点复杂。我将从头到尾讲解,然后把所有的片段组合在一起,放在一个表单中。

在脚本的开始处,是打开数据库和预备时间戳。在开始时处理这些不显眼的东西总是可以为我减轻一点压力。

  1. // 连接数据库 
  2. $db = mysql_connect("servername""username""password"or die ("不能连接。"); 
  3. mysql_select_db("yourDB"$dbor die ("不能选择数据库。"); 
  4. // 得到时间戳 
  5. $add_date = date("Y-m-d"); 

我们希望$op的值是"ds"。它不是复杂的程序缩写—-我创的,表示"do something(做某事)" 。所以,脚本的第一件事就是查看$op的值是不是等于"ds"。这个值只有当表单被提交后才会被发送上来。所以假如$op的值不是"ds",那么说明用户还没有看过表单,所以应该把表单显示出来:

  1. if ($op != "ds") { 
  2.  
  3. //需要订阅/退订 
  4.  
  5. $text_block = " 
  6.  
  7. <form name="form" method=post action="$PHP_SELF"
  8. <input type=hidden name=op value=ds> 
  9.  
  10. <p><strong>your e-mail address:</strong><br> 
  11. <input type=text name="email" size=25></p> 
  12.  
  13. <p><strong>action:</strong><br> 
  14. <input type=radio name="action" value="sub" checked> sub 
  15. <input type=radio name="action" value="unsub"> unsub</p> 
  16.  
  17. <P><input type=submit name="submit" value="do it"></p> 
  18. </form> 
  19. "; 

你会注重到我把文本放在$text_block变量中。通过把文本放在一个变量中,接下来我所要做的就是在后面在主HTML模板内输出$text_block的值。这是个人习惯问题,你可以根据你喜欢的时间和方式输出文本。

这个表单的动作是$PHP_SELF ,可以想象一下,它的意思就是当按下了提交按钮之后,它将会被重新装入。然后,你可以看到这个表单有三个字段:一个隐藏字段,用于给$op赋值为"ds" ;一个文本字段,叫做"email",在这里用户将填入他或她的email地址;还有一个是单选按钮集,叫做"action",根据它,用户可以决定执行哪一个动作(订阅或退订)。

在表单被提交之后,$op将等于"ds",并且$action的值将包含"sub"或"unsub"。那么,我们继续看上面 的if…语句,一旦提交,它将被跳过(因为$op=="ds")。假如$op的值为"ds"并且$action的值"sub"(订阅),下面的else if…句被执行。这段代码检查e-mail是否已经存在于订阅表中,假如不存在则将其插入到表中并打印出响应,否则忽略。

  1. else if (($op == "ds") && ($action == "sub")) { 
  2.  
  3. // 检查邮件还未提交则提交它们,否则返回信息 
  4.  
  5. $check = "select email_addr from subscribers 
  6. where email_addr = "$email""; 
  7.  
  8. $check_result = mysql_query($check
  9. or die("不能执行地e-mail地址的检查。"); 
  10.  
  11. $check_num = mysql_num_rows($check_result); 
  12.  
  13. if ($check_num == 0) { 
  14.  
  15. // 假如$check_num为0,则没有找到匹配的记录,用户应该被提交 
  16.  
  17. $sql = "insert into subscribers 
  18. values("$email""$add_date")"; 
  19.  
  20. @mysql_query($sqlor die ("Couldn't insert email."); 
  21.  
  22. $text_block = " 
  23. <P>感谢您的注册!</p> 
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 让PHP管理小型的邮件列表

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡