仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 748|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之让PHP办理小型的邮件列表

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:53:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。   比来有一个读者问我关于ThickBook旧事列表中处置定阅/退订的机制,而且是若何与实践的发送信息相共同,给邮件列表中的一切收信人的。成绩提的不错,有一个相当轻易的办法,然而我起首要说的是我所做的没有任何脚踏两船的中央,由于我十分的酷----就是有,我利用这个办法也只是由于我懒。注重,在市情上有十分多的邮件列表软件,可以把它装在体系上,而且也有一些其余,更多的是联合在一同的剧本集,你 也能够用来做一样的工作。然而,正如我所说,我是一个懒人,不想下载和装置任何器材,所以我生成了几 个相当复杂的页面,用来履行我所请求的任务。很但愿,有人能从中学到一些器材。
起首是定阅/退订剧本,它所做的任务就是从数据库表中增添或删除纪录。把它叫做"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 "邮件发送终了!";
}
?>
--------------------------------------------------------------------------------

给你的建议是,有些最常用的语句是需要记住的 比如if for while这些、其他的一般语句你只要知道有这个函数或者有这个功能就可以了,当你用的时候你可以凭借记忆搜索就可以了。
admin 该用户已被删除
沙发
发表于 2015-2-4 06:53:17 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
透明 该用户已被删除
板凳
发表于 2015-2-4 20:17:39 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
柔情似水 该用户已被删除
地板
发表于 2015-2-4 21:14:14 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-5 04:21:50 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-6 13:48:24 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
兰色精灵 该用户已被删除
7#
发表于 2015-2-7 01:07:02 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
只想知道 该用户已被删除
8#
 楼主| 发表于 2015-2-19 05:51:14 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
第二个灵魂 该用户已被删除
9#
发表于 2015-3-6 13:21:38 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
再见西城 该用户已被删除
10#
发表于 2015-3-7 04:25:40 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
因胸联盟 该用户已被删除
11#
发表于 2015-3-14 09:45:44 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小魔女 该用户已被删除
12#
发表于 2015-3-21 01:36:59 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
简单生活 该用户已被删除
13#
发表于 2015-3-30 19:29:48 | 只看该作者
爱上php,他也会爱上你。
飘灵儿 该用户已被删除
14#
发表于 2015-4-1 02:21:26 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
变相怪杰 该用户已被删除
15#
发表于 2015-4-15 02:30:10 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
若相依 该用户已被删除
16#
发表于 2015-4-17 21:04:57 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
飘飘悠悠 该用户已被删除
17#
发表于 2015-4-20 02:14:12 | 只看该作者
当然这种网站的会员费就几十块钱。
爱飞 该用户已被删除
18#
发表于 2015-4-24 05:56:40 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
活着的死人 该用户已被删除
19#
发表于 2015-4-27 12:51:19 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
老尸 该用户已被删除
20#
发表于 2015-6-25 22:07:03 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 02:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表