我有一封提醒邮件发送给那些在 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
查询。