|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。邮件列表 起首是定阅/退订剧本,它所做的任务就是从数据库表中增添或删除纪录。把它叫做"manage.phtml" 或
差不多的甚么器材。如许呢,就需求后台是某种数据库,在下面可以创立定阅表。依据政治中的对折准绳,
所以我将利用MySQL作为这个例子的数据库。你可使用任何你经常使用的数据库,只是依据PHP手册交换准确的
数据库相干函数。
在我的定阅表中,我利用了两个字段:邮件地址(email_addr)和添加日期(date_added)。你可以依据需
要增添字段,或将date_added字段删除。在这个例子中,我只是向你展现我做了甚么,你可以恰当的停止
修正。在我的定阅表中,email_addr字段是一个不反复字段,意味着你不克不及增添另外一个与之完整一样的e-mail
地址。这个可以免反复定阅,并且当用户想退订时,也使删除纪录的办法变得复杂和牢靠。
那末,让咱们创立定阅/退订表单吧(manager.phtml或你想起的甚么名字)。我利用统一个文件处置订
阅和退订,也包含表格本身的举措,所以能够有点庞杂。我将从头至尾解说,然后把一切的片断组合在一同,
放在一个表单中。
在剧本的入手下手处,是翻开数据库和筹办工夫戳。在入手下手时处置这些不显眼的器材老是可觉得我加重一点
压力。
--------------------------------------------------------------------------------
// 毗连数据库
$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的值。这是团体习气成绩,你可以依据你喜好的工夫和体例输入文本。
这个表单的举措是$PHP_SELF ,可以想象一下,它的意思就是当按下了提交按钮以后,它将会被从头装
入。然后,你可以看到这个表单有三个字段:一个埋没字段,用于给$op赋值为"ds" ;一个文本字段,叫做
"email",在这里用户将填入他或她的email地址;还有一个是单选按钮集,叫做"action",依据它,用户可
以决意履行哪个举措(定阅或退订)。
在表单被提交以后,$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) {
// 假如$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 函数(或同你的数据库类似的函数)将每
笔记录放在一个数组中。假如你取回的字段多于一个能够更成心义,我用它是由于它快。上面的语句对了局
集停止遍历而且经由过程mail()函数对每一个在列表中的邮箱发送e-mail:
--------------------------------------------------------------------------------
while ($row = mysql_fetch_array($res)) {
$email_addr = $row[0];
mail("$email_addr", "$subject", $newsletter, $headers);
}
--------------------------------------------------------------------------------
$subject和$newletter的值是在后面的表单中输出的。在剧本的最初增添一行输入语句,以便你晓得执
行终了了。这就是全体处置了!完全的"do_send_mail.phtml"剧本看上去为:
--------------------------------------------------------------------------------
<?
if (($subject =="") || ($newsletter == "")) {
header("Location: http://www.yourdomain.com/send_mail.phtml");
exit;
} else {
// 毗连数据库
$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("不克不及失掉邮件地址。");
$headers = "From: \"Your Mailing List\" <you@yourdomain.com>\n";
while ($row = mysql_fetch_array($res)) {
$email_addr = $row[0];
mail("$email_addr", "$subject", $newsletter, $headers);
}
echo "邮件发送终了!";
}
?>
可以说你的马步已经扎的差不多了,接下来就要开始练把势的时候了,如果有条件的话,用笔或者打印一个简易的PHP手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。 |
|