我有一封提醒邮件发送给那些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 :(得分: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)
您的脚本的逻辑很简单:
您的脚本中有一些重要错误,这应该是这样的:
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
...