我正在尝试创建一个简单的支持请求系统,用户可以通过jQuery - Ajax和PHP将其电子邮件地址插入到MySQL数据库中。
之后我需要向插入的电子邮件所有者发送确认电子邮件“
每当新请求插入数据库时 “。我正在考虑使用数据库中的Ajax调用,但我不知道如何选择
1-最新插入的行 AND
2-未选择的行
要执行此操作(可能存在两个插入与
SELECT email FROM tbl-request ORDER BY id DESC LIMIT 1;
可能会返回只有最后插入但是至少有两个新条目?)
如果有解决方案可以通过MySQL Trigger或jQuery Ajax
告诉我答案 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 * * * * php /path/to/script.php
答案 3 :(得分:0)
您可以在插入请求时从PHP发送邮件,但您可能希望将这些进程分开。
要做到这一点,一个简单的解决方法是添加一个字段'ConfirmationMailed'或表示该邮件已发送的东西。这样您就可以查询尚未通过电子邮件发送的请求。
更灵活的是创建一个单独的表tblRequestCommunication,您可以在其中存储有关请求的通信。 该表可以有:
通信类型可以是枚举或对单独类型表的引用,您可以在其中存储要发送的通信类型。其中一种类型可以是“自动确认消息”,在表格中甚至可以存储该消息的确切日期时间,主题和内容。
现在,在您的查询中,您所要做的就是在没有这样的确认的情况下搜索请求:
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 */)
此外,您可以在同一个表格中存储与请求相关联的“手动”电子邮件和电话报告,这样您就可以获得完整的通讯历史记录。
因此,创建一个或两个额外的表并更改查询会有一些工作,但系统的功能会更大。