2013-02-27 18 views
0

我不是PHP/MySQL的专家,但我通常可以得到的东西工作与一些研究和试验,但这一个我似乎无法像我想要的工作...PHP邮件数据从SQL表

我运行了分类广告网站,并计划设置一个cron作业(我可以做的cron作业),并向发布了30天广告的用户发送提醒电子邮件。我使用date_sub和curdate得到了日期正常的工作。我的查询从30天前的数据库中抽取我希望在我的电子邮件中使用的所有表。

我可以通过电子邮件发送海报名称,电子邮件和html邮件,但只发送到第一个电子邮件地址查询。我假设这是一个循环问题?但我似乎无法弄清楚。

我的脚本张贴在下面 - 我为这种混乱感到抱歉,因为我说我不是这方面的专家,但我主要工作的方式是如何处理这个例外,只会发送给显示的第一个广告。

大多数sql查询中的所有表名都包含我打算在html消息中使用的数据。

<?php 
     header("Content-type: text/plain"); 

    // OPEN DATABASE 
     define('DB_HOST','localhost'); 
     define('DB_USER',''); 
     define('DB_PASS',''); 
     define('DB_NAME',''); 

     mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Connetion to database failed!"); 
     mysql_select_db(DB_NAME); 

     joinDateFilter(); 

    // WHOSE AD IS 30 DAYS OLD 
     function joinDateFilter(){ 
      $query = mysql_query("SELECT name,title,email,idPost,password FROM oc_posts WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) = CAST(insertDate AS date)"); 
      $mail_to = "$email"; 
      while ($row = mysql_fetch_array($result)){ 
       echo $row['name']." - ".$row['title']." - ".$row['email']."\n"; 
       echo $mail_to = $row['email'].", "; 
       echo $title=$row["title"]; 
       echo $name=$row["name"]; 
       echo $idPost=$row["idPost"]; 
       echo $password=$row["password"]; 
      } 
      if (!empty($mail_to)){ 
       sendEmail($mail_to,$email,$name,$title,$idPost,$password); 
      } 
     } 

    // SEND EMAIL 
     function sendEmail($mail_to,$email,$name,$title,$idPost,$password) { 
      $mail_to ="$mail_to"; 
      $email ="$email"; 
      $name = "$name"; 
      $title = "$title"; 
      $idPost = "$idPost"; 
      $password = "$password"; 
      $from = "[email protected]"; 
       //begin of HTML message 
     $message = "<html> 
     <body bgcolor=\"#FFFFFF\"> 
      Hello, $name, your ad $title is 30 days old etc... 
     </body> 
    </html>"; 
     //end of message 
      $headers = 'From: '.$from."\r\n" . 
      'Reply-To:'.$_POST['email']."\r\n" . 
      "Content-Type: text/html; charset=iso-8859-1\n". 
      'X-Mailer: PHP/' . phpversion(); 
      mail($mail_to, "Your ad is 30 days old", $message, $headers); 
     } 
    ?> 

任何帮助将不胜感激!

谢谢!

回答

1

你需要在这段时间内执行你的sendEmail函数。现在发生的事情是,它会遍历所有返回的行,设置变量,覆盖变量,然后发送一次电子邮件。尝试这样的事情。注意if语句现在在你的while块中。

while ($row = mysql_fetch_array($result)){ 
      echo $row['name']." - ".$row['title']." - ".$row['email']."\n"; 
      echo $mail_to = $row['email'].", "; 
      echo $title=$row["title"]; 
      echo $name=$row["name"]; 
      echo $idPost=$row["idPost"]; 
      echo $password=$row["password"]; 
      if (!empty($mail_to)){ 
       sendEmail($mail_to,$email,$name,$title,$idPost,$password); 
      } 
} 

现在它会发送电子邮件,然后处理下一行。这意味着它会为每一行发送电子邮件。

+0

另外,您应该停止使用mysql函数,因为那些现在已被弃用。研究使用PDO或mysqli。 – 2013-02-27 01:57:20

+0

谢谢!它现在有效。 – user2113517 2013-02-27 02:21:30

+1

@ user2113517现在不要忘记接受答案...... – 2013-02-27 02:24:48