发送邮件后更新字段

时间:2012-05-03 13:02:09

标签: php mysql

我有一封提醒邮件发送给那些30天后没有登录我网站的人。之前我在这个论坛上得到了一个答案来创建一个单独的字段,然后按照这里提到的那样进行更新:Need help on unix time stamp

我创建了一个新字段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字段?

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

3 个答案:

答案 0 :(得分:4)

您需要使用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);
        }
    }
?>

答案 1 :(得分:1)

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

答案 2 :(得分: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 ...