Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中搜索和组合从mysql提取的数据以发送_Php_Mysql_Email_Foreach_Phpmailer - Fatal编程技术网

如何在php中搜索和组合从mysql提取的数据以发送

如何在php中搜索和组合从mysql提取的数据以发送,php,mysql,email,foreach,phpmailer,Php,Mysql,Email,Foreach,Phpmailer,我有一个mysql数据库,其中存储了一个表,其中包含一些关于个人信息的列 反对意见1(英国) 用户名 电子邮件 服务 发送 使用phpmailer的php代码,我可以连接到db,从sql查询中提取我需要的信息,并通过foreach函数为每个人发送电子邮件,在正确发送每封电子邮件后,“发送”列的数据从0更新到1。。。所有这些都可以正常工作,但有可能有一些人对多个自己的“object1”使用相同的“电子邮件”,在这种情况下,每行都会向他们发送一封电子邮件 例如,如果一个人有电子邮件aa@aa.i

我有一个mysql数据库,其中存储了一个表,其中包含一些关于个人信息的列

  • 反对意见1(英国)
  • 用户名
  • 电子邮件
  • 服务
  • 发送
使用phpmailer的php代码,我可以连接到db,从sql查询中提取我需要的信息,并通过foreach函数为每个人发送电子邮件,在正确发送每封电子邮件后,“发送”列的数据从0更新到1。。。所有这些都可以正常工作,但有可能有一些人对多个自己的“object1”使用相同的“电子邮件”,在这种情况下,每行都会向他们发送一封电子邮件

例如,如果一个人有电子邮件aa@aa.it有30个“object1”,他会收到30封不同的电子邮件

如何将工作与查询中的数据结合起来,并将与一封电子邮件关联的所有object1仅发送到一封电子邮件中,并将所有主题列为内容

我认为我需要用if/else指令来完成脚本,但我不知道如何管理它

下面是脚本的一部分:

   <?
 $mail = new PHPMailer;

    $result = mysqli_query($mysql, 'SELECT * FROM db WHERE service LIKE \'%something%\' AND sent = 0 ORDER BY object1 LIMIT 0 , 30');

    foreach ($result as $row) { 

        $mail->addAddress($row['email'], $row['object1']);

        /* i use it to use an external .html file to send email and replace vairables in it */

        $message = file_get_contents('template/temaplate.html');

        $message = str_replace('%email%', $row['email'], $message);
        $message = str_replace('%object1%', $row['object1'], $message);


        //Set the message
        $mail->MsgHTML($message);
        $mail->AltBody = strip_tags($message);


        if (!$mail->send()) {
            echo "Mailer Error (" . str_replace("@", "&#64;", $row["email"]) . ') ' . $mail->ErrorInfo .;
            break; //Abandon sending
        } else {
            echo "Message sent to :" . $row['object1'] . ' (' . str_replace("@", "&#64;", $row['email']) .;

            //Mark it as sent in the DB
            mysqli_query(
                $mysql,
                "UPDATE db SET sent = true WHERE object1 = '" .
                mysqli_real_escape_string($mysql, $row['object1']) . "'"
            );
        }
        // Clear all addresses and attachments for next loop
        $mail->clearAddresses();
        $mail->clearAttachments();
    }
?>

您可以通过电子邮件进行订购,而不是通过object1进行订购,这样具有相同电子邮件的行将一起出现

$prev_email = null;
foreach ($result as $row) {
    if ($row['email'] === $prev_email) {
        // skip, but may print some warning etc.
        // or check other conditions about object1
        continue;
    }
    ....
    $prev_email = $row['email'];
}

这样,每封电子邮件只收到一条消息。但是,如果您关心在这些电子邮件中使用哪个object1,则可能需要微调逻辑。

一些合理的代码缩进将是一个好主意。它帮助我们阅读代码,更重要的是,它将帮助您为自己的利益调试代码。您可能会被要求在几周/几个月内修改此代码,最终您将感谢我。您的脚本有可能查看使用过程中发生的情况。您自己似乎没有尝试编写此代码。所以免费编码资源