2012-05-03 24 views
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场?

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

+0

为什么在循环的每次运行中更新* all *用户? – Cylindric

+0

我已经提出这个问题来得到答案,我现在还没有更新 – sammry

+0

等等,所以你在样本中加入了一些你实际上没有做的事情?我不确定我们如何猜测。把代码失败,而不是你认为是错误的。 – Cylindric

回答

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 ...

+0

我认为使用用户ID工作,谢谢 – sammry

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

将尝试此并让你知道这里 – sammry

+0

谢谢它正在与用户ID – sammry

1

您将需要从myuser表得到一些idwhere id = $id运行update查询。

+0

我确实得到id像$ id = mysql_result( $结果,$ I, “UID”);但会工作吗? – sammry

+0

听起来好像应该可以工作,但是不知道确切的代码和数据库结构,我无法确定。我会说:试试吧。也许在某些备份环境中安全地尝试它,以防万一它出错... – bartlaarhoven

相关问题