仓酷云

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

[学习教程] PHP网站制作之办理小型的邮件列表

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

本版积分规则

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

GMT+8, 2024-11-14 13:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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