2012-02-16 33 views
0

我正在为我的网站创建评论系统。现在它只是一个基本的评论系统。但是,我希望我的用户可以选择在有新评论时收到电子邮件。当有新评论无法正常工作时通过电子邮件发送人

为此,我首先制作了另一个表,名为:'email_notifications' 然后我只是把电子邮件放在那里。我在另一张桌子上做这件事的原因。是为了防止多次收到电子邮件。

例如。

我发表评论,说:“很酷的网站”,然后 我张贴另一个后来说:“爽!”, 但矿难发生后,然后当有人评论,我收到一封电子邮件两次,因为我张贴了两次。

我tryed阻止这种使用情况发生:

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()); 
    } 

和IM有点早知道PHP和MySQL ...所以林不知道什么是错。如果电子邮件已经在表中,这是假设不发送mysql_query。但由于某种原因,它不断将其添加到表格中。当我的电子邮件在那里两次时,我收到了两次电子邮件。

在此先感谢!

回答

0

如果您发现像Facebook这样的网站通过发送一个通用的消息概括通知系统“你有待定的通知”,这意味着他们运行一个cron和检查真的还是假的,如果你这样做有一个挂起的消息,然后发送给你链接到列表。如果你愿意,你可以使它更加健壮,但总体思路是运行一个cron来检查,而不是在每个通知的基础上进行。

我们这样做的方式是在关系表中记录通知状态,该关系表指向user_id,action(在本例中为通知)post_id,datetime和status(pending,complete等),然后使用该信息发送一条基本信息告诉用户他们有新的评论什么的。如果他们只有一个,我们在验证通知后选择count()将其打印出来。

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

查看REPLACE INTO for mysql。我们在通知表中使用它来替换最后一个条目,将状态重置为挂起。然后cron选择状态未决的地方......看到这个点?希望能帮助到你。

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

我真的很喜欢你的第二个名字! – zerkms 2012-02-16 03:46:54

+0

我试过使用0,但那没有任何工作要么 – Shawn31313 2012-02-16 04:07:48

+0

即时尝试使它只有一个相同的电子邮件可以在该表 – Shawn31313 2012-02-16 04:13:50

相关问题