- ·上一篇文章:在PHP中使用ASP.NET AJAX
- ·下一篇文章:php中计算时间差的几种方法
让PHP管理小型的邮件列表
} 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) {
// 如果$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>
";
}
} 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>
";
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>订阅/退订</TITLE>
</HEAD>
<BODY>
<h1>订阅/退订</h1>
<?php echo "$text_block"; ?>
</BODY>
</HTML>
--------------------------------------------------------------------------------
现在你已经有了合适的订阅/退订机制,我将向你展示如何发出一封新闻信件,只使用一个简单的表单和一个邮件脚本。("while"循环是你的好朋友!)。首先,是名为"send_mail.html"的表单。表单的动作应该是象"do_send_mail.phtml"的什么东西,并且我只使用了一个用来写主题的文本字段(subject)和一个写信件内容的文本域字段(newsletter)。你可以根据需要使用表单字段,只要适当地修改表单和脚本。
--------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>发送邮件</TITLE>
</HEAD>
<BODY>
<h1>Send a Newsletter</h1>
<FORM ACTION="do_send_mail.phtml" METHOD="post">
<P><strong>给出一个主题:</strong><br>
<input type="text" name="subject" size=30></p>
<P><strong>邮件内容:</strong><br>
<textarea name="newsletter" cols=40 rows=30 wrap=virtual></textarea>
<p><input type="submit" name="submit" value="Send Newsletter"></p>
</form>
</BODY>
</HTML>
--------------------------------------------------------------------------------
最后一点说明的是关于表单的动作,这个脚本叫做"do_send_mail.phtml"。脚本首先查找$subject和$newletter的值,并且如果他们的值有一个为空就重定向到表单:
--------------------------------------------------------------------------------
if (($subject =="") || ($newsletter == "")) {
header("Location: http://www.yourdomain.com/send_mail.phtml");
exit;
}--------------------------------------------------------------------------------
接着,连接到数据库并且从订阅表中取出邮件地址:
--------------------------------------------------------------------------------
// 连接数据库
$db = mysql_connect("servername", "username", "password")
or die ("不能连接。");
mysql_select_db("yourDB", $db) or die ("不能选择数据库。");
$sql = "select email_addr from subscribers";
$res = mysql_query($sql) or die("不能得到邮件地址。");
--------------------------------------------------------------------------------
在进入到发送邮件信息的循环之前,要建立额外的邮件头。在这里,我只用了"From:"行:
$headers = "From: \"Your Mailing List\" <you@yourdomain.com>\n";
现在进入发送邮件的循环中。首先,使用mysql_fetch_array 函数(或同你的数据库相似的函数)将每条记录放在一个数组中。如果你取回的字段多于一个可能更有意义,我用它是因为它快。下面的语句对结果集
