0

30日経ってもサイトにログオンしない人にリマインダーメールを送ります。以前、このフォーラムで別のフィールドを作成し、ここで説明されているように更新するという回答を得ました。UNIXタイムスタンプのヘルプが必要です。

新しいフィールドを作成しましたlastprelogin。非アクティブなユーザーにメールを送信するときに、それぞれのフィールドを更新するにはどうすればよいですか。

<?php
include("include/data.php");
$query = "SELECT * FROM myusers WHERE DATE_ADD(FROM_UNIXTIME(lastprelogin), INTERVAL 15 DAY) < CURDATE()";
$result = mysql_query($query);
$num = mysql_numrows($result);
$i = 0;
while ($i < $num)
{
    //send mail code
    $sendmail = mail($to,$subject,$msg,$headers);
    $i++;
    if($sendmail) {
        $query1 = "UPDATE myusers SET lastprelogin='".time()."'";
        $result2 = mysql_query($query1);
    }
}
?>

lastpreloginメールを送信した後、それぞれのユーザーのフィールドを更新するにはどうすればよいですか?

この部分の論理を理解できないため、私はここで迷子になっています。

4

3 に答える 3

4

mysql_fetch_assocまたは同様の関数を使用して、結果をループする必要があります。

更新クエリには、更新するレコードのIDを含める必要があります。

これらの関数は間もなく非推奨になるため、使用しないでください。代わりにmysqlimysql_*を使用してください

<?php
    include("include/data.php");
    $query = "SELECT * FROM myusers WHERE DATE_ADD(FROM_UNIXTIME(lastprelogin), INTERVAL 15 DAY) < CURDATE()";
    $result = mysql_query($query);

    while ($user = mysql_fetch_assoc($result))
    {
        //send mail code
        $sendmail = mail($user['email_address'],$subject,$msg,$headers);
        $i++;
        if($sendmail){
            $query1 = "update myusers set lastprelogin='".time()."' WHERE id = " . $user['id'];
            $result2 = mysql_query($query1);
        }
    }
?>
于 2012-05-03T13:07:53.197 に答える
1

テーブルidからいくつかを取得し、を使用してクエリを実行する必要があります。myuserupdatewhere id = $id

于 2012-05-03T13:08:26.373 に答える
1

スクリプトのロジックは単純です。

  • 過去15日間ログインしなかったすべてのユーザーを取得します
  • 各ユーザーにメールを送信する
  • それが成功した場合は、そのユーザーのフィールドlastpreloginも更新します

スクリプト内にいくつかの重要なエラーがあり、これは次のようになります。

include("include/data.php");
$query = "SELECT * FROM myusers WHERE DATE_ADD(FROM_UNIXTIME(lastprelogin), INTERVAL 15 DAY) < CURDATE()";
$result = mysql_query($query);
while($user = mysql_fetch_assoc($result)) {
    // assuming that myusers table has these columns: user_id, user_name, user_email, lastprelogin
    //send mail code
    if(mail($user['user_email'],'Please log in','Please login to my site',$headers)) {
        $query1 = "update myusers set lastprelogin='".time()."' where user_id = {$user['usri_id']}";
        $result2 = mysql_query($query1);
    }
}
// end.

$headers変数としてFromヘッダーなどを設定できます。ここでPHPメール関数を探してください:http://php.net/mail

また、更新のための正しいクエリは次のようになります。

"update myusers set lastprelogin='".time()."' where user_id = {$user['user_id']}"

とにかくあなたはlastprelogin毎回すべてのユーザーのを更新します...

于 2012-05-03T13:16:14.310 に答える