当有新评论不起作用时通过电子邮件发送给人们

时间:2012-02-16 03:38:35

标签: php mysql

我正在为我的网站创建评论系统。现在它只是一个基本的评论系统。但我希望我的用户可以选择在有新评论时收到电子邮件。

要做到这一点,我首先制作了另一个名为'email_notifications'的表 然后我就把电子邮件放在那里。我在另一个表中这样做的原因。是为了防止多次收到电子邮件。

例如。

我发表评论说:'酷网站', 然后我发布另一个后来的说法:'酷!', 但是当有人发表评论后,我收到了两次电子邮件,因为我发了两次。

我尝试使用以下方法防止这种情况发生:

if(mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())) == 0) {
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')") or die(mysql_error());
    }

我有点知道PHP和mysql ......所以我不确定什么是错的。如果电子邮件已经在表中,则假设不发送mysql_query。但由于某种原因,它继续在表中添加它。当我的电子邮件在那里两次时,我收到了两次电子邮件。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您说如果数据库中有电子邮件,请插入电子邮件。

== 1切换为== 0

if(mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())) == 0) {
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')") or die(mysql_error());
}

答案 1 :(得分:0)

如果你发现像facebook这样的网站通过发送一条通用消息“你有通知待处理”来概括通知系统,这意味着他们运行一个cron,如果你有一条待处理的消息,则检查是或否,然后向你发送一个链接到列表。如果你愿意,你可以使它更健壮,但一般的观点是运行一个cron来检查,而不是在每个通知的基础上进行检查。

我们这样做是将通知状态记录在一个关系表中,该关系表指向user_id,action(在这种情况下是通知)post_id,datetime和status(pending,complete等)然后使用该信息发送一个基本消息告诉订阅者他们有新的评论或什么。如果他们只有一个,我们会在验证通知后选择count()在电子邮件中打印出来。

在cron上运行可以处理后台的事情,可以无声地管理效率和复杂性,对用户透明。完全列出它太复杂了,但对于一个称职的程序员来说,这一点是可以管理的。

查看mysql的REPLACE INTO。我们在通知表中使用它来替换最后一个条目,将状态重置为pending。然后cron选择状态待定的位置...看点?希望它有所帮助。