4

ユーザーが入力した電子メール アドレスにランダム コードを送信する php スクリプトがあります。

2 週間後にユーザーが同じ電子メール アドレスにリマインダー メッセージを受け取るようにする必要があります。これは 1 回だけ行う必要があります。

ユーザーの電子メールと追加された日付を保存するデータベース テーブルを作成しました。

2 週間後にユーザーにメールで通知するようにスクリプトを作成するにはどうすればよいですか。

cron ジョブを使用する必要があることはわかっています。セットアップは次のようになります。 ここに画像の説明を入力

mailform.php が毎日 23 時間に使用されることを理解しているので、本当ですか? そして、ユーザーが2週間経過したかどうかを確認するために、cronジョブがスクリプトを毎日使用するようにする必要があります。

私のデータベーステーブルは次のようになります: ここに画像の説明を入力

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 Date

于 2013-03-14T12:57:13.937 に答える
1

データが保存されない理由は、実際には保存していないためです。

に電話をかける必要があります:

mysql_query($query);

あなたの記録をデータベースに入れるために。

また、cron ジョブでは、「分」列が「0」である必要があります。したがって、cron ジョブは毎日 23 時に実行されます。分列に「*」を入力すると、23 時間ごとに実行されるため、23 時 00 分、23 時 1 分、23 時 2 分、23 時 3 分... のようになります。

ここで 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 は、2 週間前に登録したユーザーのみを取得します (したがって、regDate はちょうど 2 週間前でした)。

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 に答える