2012-05-03 50 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

相關問題