【问题标题】:php mysql query email alert sends multiple duplicate emailsphp mysql查询电子邮件警报发送多个重复的电子邮件
【发布时间】:2015-10-07 23:21:59
【问题描述】:

我的问题是,当提交表单时,它会发送一封电子邮件,提醒之前已经为该确切营地填写调查的其他用户已为该营地位置输入了新的调查条目,问题是该人是否输入了 3对该营地位置进行调查后,用户会收到 3 封电子邮件,因为我的数据库有时会包含来自每个营地位置的同一用户电子邮件的条目。

这是什么问题

$to_add = $row['Email'];

如何确保它不会多次向用户发送电子邮件?

$query2 = "SELECT * FROM Camp_Survey_Submits WHERE CampName = '$campname3'";
$result = mysql_query($query2) or die(mysql_error());
while($row = mysql_fetch_array($result)) {


$from_add = "support@hikelospadres.com"; 
$to_add = $row['Email']; 
$subject = "New Report Has Been Submitted to ".$row['CampName']." ";
$message = "Hello ".$row['SurveyorName'].", <br>
We noticed that you have previously filled out a survey for ".$row['CampName'].", so we just wanted to inform you that a new report has been added to ".$row['CampName'].". <br>  To see this latest report, please go to: <a href='".$row['Referrer']."'><b> ".$row['Referrer']." </b></a>. <br>
Thank you,<br><br><br>
<b>Hike Los Padres<b><br>
www.hikelospadres.com<br>

`

【问题讨论】:

  • 选择不同的电子邮件,但我猜你的表没有标准化(不要存储用户的电子邮件,而是存储他/她的 id)
  • 就像 KA_lin 说的。问题很明显,您已经声明在您的数据库中有重复的条目。如果您不想做一个独特的建议,您可以通过电子邮件订购,并跟踪最后使用的电子邮件。
  • 谢谢,但它们不是重复的条目,只是同一个人对同一个营地的多次调查,我的问题是,当一个营地的新调查被填写时,我想给任何人发电子邮件之前已经为那个营地填写了一份调查,让他们知道已经输入了一个新的,我该怎么做才能只给这个人发一次邮件,而不是多次。 $to_add = $row['Email'];
  • 非常感谢大家,非常感谢您的帮助。

标签: php mysql email


【解决方案1】:

我要做的是在while 运行时将每封电子邮件输入一个数组,然后在电子邮件发送之前检查该电子邮件是否已经存在于数组中。

这样做:

    $query2 = "SELECT * FROM Camp_Survey_Submits WHERE CampName = '$campname3'";
    $result = mysql_query($query2) or die(mysql_error());

    $emails = array();

    while($row = mysql_fetch_array($result)) {

    if ( !in_array($row['Email'],$emails)) {

    $from_add = "support@hikelospadres.com"; 
    $to_add = $row['Email']; 
    $subject = "New Report Has Been Submitted to ".$row['CampName']." ";
    $message = "Hello ".$row['SurveyorName'].", <br>
    We noticed that you have previously filled out a survey for ".$row['CampName'].", so we just wanted to inform you that a new report has been added to ".$row['CampName'].". <br>  To see this latest report, please go to: <a href='".$row['Referrer']."'><b> ".$row['Referrer']." </b></a>. <br>
    Thank you,<br><br><br>
    <b>Hike Los Padres<b><br>
    www.hikelospadres.com<br>";

    mail(); // send the mail using the mail function (or PHP Mailer, etc.)

    array_push($emails,$row['Email']);
    }

   }

【讨论】:

    【解决方案2】:

    试试这样的:

    $emails = array();
    while($row = mysql_fetch_array($result)) {
        $emails[$row['Email']] = array(
            'from_add' => "support@hikelospadres.com", 
            'to_add' => $row['Email'], 
            'subject' => "New Report Has Been Submitted to ".$row['CampName'],
            'message' => "Hello ".$row['SurveyorName']
        );
    }
    
    
    foreach($emails as $email){
      mail($email['to_add'], $email['subject'], $email['message']);
    }
    

    首先构建数组,通过电子邮件覆盖密钥,然后再次循环发送。

    也许有更好的方法,只是一个想法

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多