将确认邮件发送到最后插入的行

时间:2014-12-11 12:16:12

标签: php mysql ajax

我正在尝试创建一个简单的支持请求系统,用户可以通过jQuery - Ajax和PHP将其电子邮件地址插入到MySQL数据库中。

之后我需要向插入的电子邮件所有者发送确认电子邮件“ 每当新请求插入数据库时​​ “。我正在考虑使用数据库中的Ajax调用,但我不知道如何选择
1-最新插入的行 AND
2-未选择的行
要执行此操作(可能存在两个插入与

完全相同的情况
SELECT email FROM tbl-request ORDER BY id DESC LIMIT 1;

可能会返回只有最后插入但是至少有两个新条目?)

如果有解决方案可以通过MySQL Trigger或jQuery Ajax

告诉我

4 个答案:

答案 0 :(得分:4)

suffii您可以在表格中添加新的列表,例如。状态,其中包含0作为默认值。

现在,每次发送电子邮件时,请将此值更新为1。

因此您可以选择尚未发送电子邮件的行..

   SELECT email FROM tbl-request where status=0;

它将仅选择包含status = 0的最新条目。

可以有很多方法但是作为我的观点,这也可以是一种更好,更简单的方式

答案 1 :(得分:2)

你可以使用cron job来做到这一点。

每隔5分钟运行一次cron作业行,并设置一个标志以检查邮件是否已发送。发送邮件后,将标志设置为1。

答案 2 :(得分:0)

我们可以轻松保存上次检入数据库或文件的时间。这样做的方法可以让你让电子邮件系统与记录的插入方式分开,这是我想要的,你建议使用触发器或AJAX来处理它。即使没有从PHP脚本中编写数据库的权限,此方法也可以工作。

在电子邮件脚本运行结束时:

$fh=@fopen('last-email','w');
if (!empty($fh)){
    fwrite($fh,time());
    fclose($fh);
}

开始运行

$last_email_time=file_get_contents('last-email');

然后在您的表格中添加timestamp字段;这将自动附加记录最后已修改已添加的时间。

然后您的查询将是:

$last_time_as_sql_date=date('Y-m-d H:i:s', $last_email_time);
$query="SELECT email FROM tbl-request WHERE timestamp>'$last_time_as_sql_date' ORDER BY timestamp DESC LIMIT 1;"

您实际运行脚本的方式更多取决于您的实施;如果在服务器后端,您可以使用crontab -e

每5分钟运行一次
*/5 * * * * php /path/to/script.php

答案 3 :(得分:0)

您可以在插入请求时从PHP发送邮件,但您可能希望将这些进程分开。

要做到这一点,一个简单的解决方法是添加一个字段'ConfirmationMailed'或表示该邮件已发送的东西。这样您就可以查询尚未通过电子邮件发送的请求。

更灵活的是创建一个单独的表tblRequestCommunication,您可以在其中存储有关请求的通信。 该表可以有:

  • Id(PK),Date,RequestId
  • 主题
  • 内容
  • CommunicationType

通信类型可以是枚举或对单独类型表的引用,您可以在其中存储要发送的通信类型。其中一种类型可以是“自动确认消息”,在表格中甚至可以存储该消息的确切日期时间,主题和内容。

现在,在您的查询中,您所要做的就是在没有这样的确认的情况下搜索请求:

SELECT r.email 
FROM 
  tbl-request r
WHERE NOT EXISTS
  ( SELECT 'x' FROM tblRequestCommunication c 
    WHERE c.RequestId = r.RequestId 
          AND c.CommunicationTypeId = 1 /* Automated confirmation */)

此结构允许您为其他类型扩展此系统,例如在请求关闭时自动发送邮件:

SELECT r.email 
FROM 
  tbl-request r
WHERE 
 r.State = 'Closed'
 AND NOT EXISTS
  ( SELECT 'x' FROM tblRequestCommunication c 
    WHERE c.RequestId = r.RequestId 
          AND c.CommunicationTypeId = 14 /* Close notification */)

此外,您可以在同一个表格中存储与请求相关联的“手动”电子邮件和电话报告,这样您就可以获得完整的通讯历史记录。

因此,创建一个或两个额外的表并更改查询会有一些工作,但系统的功能会更大。