仓酷云

标题: PHP网站制作之办理小型的邮件列表 [打印本页]

作者: 小妖女    时间: 2015-2-4 00:19
标题: PHP网站制作之办理小型的邮件列表
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。邮件列表   起首是定阅/退订剧本,它所做的任务就是从数据库表中增添或删除纪录。把它叫做"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^)。
作者: 冷月葬花魂    时间: 2015-2-4 11:47
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 小魔女    时间: 2015-2-6 03:45
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者: 莫相离    时间: 2015-2-7 10:23
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者: 透明    时间: 2015-2-8 08:18
当然这种网站的会员费就几十块钱。
作者: 再见西城    时间: 2015-2-8 16:16
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 金色的骷髅    时间: 2015-2-25 20:42
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
作者: 只想知道    时间: 2015-3-4 04:38
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: 山那边是海    时间: 2015-3-10 00:23
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 柔情似水    时间: 2015-3-17 03:10
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 飘飘悠悠    时间: 2015-3-20 23:30
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 愤怒的大鸟    时间: 2015-4-1 05:43
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
作者: 仓酷云    时间: 2015-4-7 11:55
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 爱飞    时间: 2015-4-14 18:06
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 若天明    时间: 2015-4-14 22:03
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 小女巫    时间: 2015-4-18 21:28
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者: 不帅    时间: 2015-4-24 04:58
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 老尸    时间: 2015-4-27 15:10
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
作者: 乐观    时间: 2015-4-27 22:23
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
作者: 海妖    时间: 2015-5-4 04:55
当然这种网站的会员费就几十块钱。
作者: 活着的死人    时间: 2015-6-5 01:08
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2