发送邮件后更新字段


Updating a field after sending a mail

我有一封提醒邮件发送给那些在 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字段?

我在这里迷路了,因为我无法理解这部分的逻辑。

您需要

使用mysql_fetch_assoc或类似函数循环访问结果。

更新查询需要包含要更新的记录的 ID。

不应该再使用 mysql_* 函数,因为它们很快就会被弃用。改用 mysqli

<?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);
        }
    }
?>

脚本的逻辑很简单:

  • 检索过去 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...

您需要

myuser表中获取一些id,并使用where id = $id运行update查询。