4

好的,我有一个 php 脚本,它向用户输入的电子邮件地址发送随机代码。

我需要让用户在 2 周后收到一条提醒消息到同一个电子邮件地址。这应该只发生一次。

我创建了一个数据库表,用于存储用户的电子邮件和添加日期。

如何编写脚本,以便在 2 周后通过电子邮件提醒用户。

我知道我需要使用 cron 作业,我的设置如下所示: 在此处输入图像描述

据我了解,mailform.php 将每天 23 小时使用,对吗?而且我需要让那个 cron Job 每天都使用脚本来检查用户是否通过了 2 周。

我的数据库表如下所示: 在此处输入图像描述

一切都很好,我只是不知道如何检查是否已经过了两周。

4

3 回答 3

2

您可以在脚本中使用以下内容来确定是否已经 2 周:今天 = 2013 年 3 月 14 日

<?php
$regDate = "2013-02-28";
$today = date("Y-m-d");

$date = date("Y-m-d",strtotime("+2 weeks", strtotime($regDate)));

if($today == $date)
    //do stuff if 2 weeks
else
    //do stuff if isn't
?>

您将不得不根据您的需要对其进行修改,但确定日期的方法就在那里。

这个怎么运作:

strtotime("+2 weeks", strtotime($regDate))

这将占用$regDate字符串并从中抽出时间。然后它将增加 2 周并从新时间中抽出时间。

date("Y-m-d", above);

然后,这将生成一个date可用于比较的$today

请阅读手册PHP 日期

于 2013-03-14T12:57:13.937 回答
1

没有保存数据的原因是因为您实际上没有保存它。

您需要致电:

mysql_query($query);

将您的记录放入数据库。

此外,在 cron 作业中,“分钟”列应为“0”。因此,cron 作业将在每天 23:00 运行。如果在分钟列中输入“*”,它将在 23h 的每一分钟运行,因此 23h00、23h01、23h02、23h03... 等等。

您可以在此处找到有关 crontab 的基本帮助:http: //crontab.org/

同样如前所述,如果可以,您应该使用 mysqli_ 函数或 PDO 模块。

mysql_ 函数已被弃用很长时间,取而代之的是 mysqli_ 函数(“i”表示改进)。它们很有可能工作,您不必更改很多代码。

祝你项目好运。

于 2013-03-14T12:46:40.020 回答
0

据我了解,mailform.php 将每天 23 小时使用,对吗?

不,您需要0 23 * * * /path/to/script让它在每天晚上 11 点运行。

这个 MySQL 只会为您提供两周前注册的用户(因此 regDate 恰好是两周前)

SELECT * 
FROM `Your_Users_Table_Name`
WHERE `regDate` = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL -2 WEEK), '%Y-%m-%d')

然后在您的 cron 脚本中,您可以使用该查询来获取您的用户,然后遍历发送您的提醒或代码或其他任何内容的行。

粗略的例子

$sql = "
    SELECT * 
    FROM `Your_Users_Table_Name`
    WHERE `regDate` = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL -2 WEEK), '%Y-%m-%d')
";
if (false === ($result = mysqli_query($connection, $sql)) {
    trigger_error('there was a query/sql problem', E_USER_ERROR);
}
if ($result->num_rows > 0) {
    // ooo we found users from two weeks ago.
    while ($row = mysqli_fetch_row($result)) {
        // send email to user
        mail($row['email'], 'The email Subject', 'The email message body');
        // update the users table and set remind = 1
        if (false === (mysqli_query($connection, "UPDATE `Your_Users_Table_Name` SET `remind` = 1 WHERE `email` = '".$row['email']."'"))) {
            trigger_error('there was a query update problem!', E_USER_ERROR);
        }
        // sleep for 2 second so not to hammer mail systems and get flagged as abusive/spammer
        sleep(2);
    }
    mysqli_free_result($result);
}
else {
    // nothing to do today
}
于 2013-03-14T16:26:56.273 回答