0

我向那些在 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字段?

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

4

3 回答 3

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);
        }
    }
?>
于 2012-05-03T13:07:53.197 回答
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 回答
1

您需要idmyuser表中获取一些并update使用where id = $id.

于 2012-05-03T13:08:26.373 回答