加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

给PHP管理小型的邮件列表

发布时间:2022-03-02 22:11:21 所属栏目:编程 来源:互联网
导读:近有一个读者问我关于ThickBook新闻列表中处理订阅/退订的机制,并且是如何与实际的发送信息相配合,给邮件列表中的所有收信人的。问题提的不错,有一个相当容易的方法,但是我首先要说的是我所做的没有任何投机取巧的地方,因为我非常的酷----就是有,我使
  近有一个读者问我关于ThickBook新闻列表中处理订阅/退订的机制,并且是如何与实际的发送信息相配合,给邮件列表中的所有收信人的。问题提的不错,有一个相当容易的方法,但是我首先要说的是我所做的没有任何投机取巧的地方,因为我非常的酷----就是有,我使用这个方法也只是因为我懒。注意,在市面上有非常多的邮件列表软件,可以把它装在系统上,并且也有一些别的,更多的是结合在一起的脚本集,你 也可以用来做同样的事情。但是,正如我所说,我是一个懒人,不想下载和安装任何东西,所以我生成了几 个相当简单的页面,用来执行我所要求的工作。很希望,有人能从中学到一些东西。
 
  首先是订阅/退订脚本,它所做的工作就是从数据库表中增加或删除记录。把它叫做"manage.phtml" 或 差不多的什么东西。这样呢,就需要后台是某种数据库,在上面可以创建订阅表。根据政治中的半数原则,所以我将使用MySQL作为这个例子的数据库。你可以使用任何你常用的数据库,只是据PHP手册替换正确的数据库相关函数。
  
  在脚本的开始处,是打开数据库和准备时间戳。在开始时处理这些不显眼的东西总是可以为我减轻一点压力。
 
  --------------------------------------------------------------------------------
  // 连接数据库
  $db = mysql_connect("servername", "username", "password") or die ("不能连接。");
 
  mysql_select_db("yourDB", $db) or die ("不能选择数据库。");
 
  // 得到时间戳
  $add_date = date("Y-m-d"); --------------------------------------------------------------------------------
    我们希望$op的值是"ds"。它不是复杂的程序缩写----我创的,表示"do something(做某事)" 。所以,脚本的第一件事就是查看$op的值是不是等于"ds"。这个值只有当表单被提交后才会被发送上来。所以如果$op的值不是"ds",那么说明用户还没有看过表单,所以应该把表单显示出来:
 
  --------------------------------------------------------------------------------
  if ($op != "ds") {
 
  //需要订阅/退订
 
  $text_block = "
 
  <form name=/"form/" method=post action=/"$PHP_SELF/">
  <input type=hidden name=op value=ds>
 
  <p><strong>your e-mail address:</strong><br>
  <input type=text name=/"email/" size=25></p>
 
  <p><strong>action:</strong><br>
  <input type=radio name=/"action/" value=/"sub/" checked> sub
  <input type=radio name=/"action/" value=/"unsub/"> unsub</p>
 
  <P><input type=submit name=/"submit/" value=/"do it/"></p>
  </form>
 
  ";
 
  }--------------------------------------------------------------------------------
  你会注意到我把文本放在$text_block变量中。通过把文本放在一个变量中,接下来我所要做的就是在后面在主HTML模板内输出$text_block的值。这是个人习惯问题,你可以根据你喜
 
  在表单被提交之后,$op将等于"ds",并且$action的值将包含"sub"或"unsub"。那么,我们继续看上面 的if...语句,一旦提交,它将被跳过(因为$op=="ds")。如果$op的值为"ds"并且$action的值"sub"(订阅),下面的else if...句被执行。这段代码检查e-mail是否已经存在于订阅表中,如果不存在则将其插入到表中并打印出响应,否则忽略。
 
  --------------------------------------------------------------------------------
  else if (($op == "ds") && ($action == "sub")) {
 
  // 检查邮件还未提交则提交它们,否则返回信息
 
  $check = "select email_addr from subscribers
  where email_addr = /"$email/"";
 
  $check_result = mysql_query($check)
  or die("不能执行地e-mail地址的检查。");
 
  $check_num = mysql_num_rows($check_result);
 
 
  if ($check_num == 0) {
 
  // 如果$check_num为0,则没有找到匹配的记录,用户应该被提交
 
  $sql = "insert into subscribers
  values(/"$email/", /"$add_date/")";
 
  @mysql_query($sql) or die ("Couldn't insert email.");
 
  $text_block = "
  <P>感谢您的注册!</p>
  ";
 
  } else {
 
  // 如果$check_num不为0,则用户已经提交过了,你应该让他们知道
 
  $text_block = "
  <P>你已经订阅过了!</p>
  ";
 
  }
 
  }--------------------------------------------------------------------------------
 
  下一步:当$action的值为"unsub"(unsubscribe,退订)而不是"sub"时应该做些什么。好,就象上面一样简单,那么对else if...语句扩展一下,多加一块代码,用于检查e-mail在被删除前是否存在于订阅表中,如果存在则删除它并且打印响应,否则忽略它。
 
  --------------------------------------------------------------------------------
  else if (($op == "ds") && ($action == "unsub")) {
 
  // 检查已经订阅过,然后将他们退订,否则返回信息
 
  $check = "select email_addr from subscribers
  where email_addr = /"$email/"";
 
  $check_result = mysql_query($check)
  or die("不能执行对e-mail地址的检查。");
 
  $check_num = mysql_num_rows($check_result);
 
  if ($check_num == 0) {
 
  // 如果$check_num为0,则没有找到匹配记录,用户不能被退订
 
  $text_block = "
  <P>不能在列表中找到你的e-mail地址!</p>
  <P>你还没有被退订,因为你所输入的e-mail不在数据库中。";
 
  } else {
 
  // 如果$check_num不为0,则用户在列表中,所以可以被退订
 
  $sql = "delete from subscribers
  where email_addr = /"$email/"";
 
  @mysql_query($sql) or die ("不能删除email。");
 
  $text_block = "
  <P>退订成功!</p>
  ";
  }
 
  }
 
  ?>--------------------------------------------------------------------------------
  现在所有艰难的工作已经做完了,只剩下在一块HTML中输出$text_block变量了:
 
  --------------------------------------------------------------------------------
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
  <HEAD>
  <TITLE>订阅/退订</TITLE>
  </HEAD>
 
  <BODY>
 
  <h1>订阅/退订</h1>
 
  <?php echo "$text_block"; ?>
 
  </BODY>
  </HTML>
  --------------------------------------------------------------------------------
    下面是完整的程序清单:
 
  --------------------------------------------------------------------------------
  <?
 
  // 连接数据库
  $db = mysql_connect("servername", "username", "password")
  or die ("不能连接。");
 
  mysql_select_db("yourDB", $db) or die ("不能选择数据库。");
 
  // 得到时间戳
  $add_date = date("Y-m-d");
 
  if ($op != "ds") {
 
  //需要订阅/退订
 
  $text_block = "
 
  <form name=/"form/" method=post action=/"$PHP_SELF/">
  <input type=hidden name=op value=ds>
 
  <p><strong>your e-mail address:</strong><br>
  <input type=text name=/"email/" size=25></p>
 
  <p><strong>action:</strong><br>
  <input type=radio name=/"action/" value=/"sub/" checked> sub
  <input type=radio name=/"action/" value=/"unsub/"> unsub</p>
 
  <P><input type=submit name=/"submit/" value=/"do it/"></p>
  </form>
 
  ";
  } else if (($op == "ds") && ($action == "sub")) {
 
  // 检查邮件还未提交则提交它们,否则返回信息
 
  $check = "select email_addr from subscribers
  where email_addr = /"$email/"";
 
  $check_result = mysql_query($check)
  or die("不能执行地e-mail地址的检查。");
 
  $check_num = mysql_num_rows($check_result);
 
 
  if ($check_num == 0) {
 
  

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读