0

我有这个脚本可以发送一封电子邮件,其中包含来自我的数据库的信息。用户可以在数据库中拥有 1+ 个项目及其位置。因此,当我清空与用户匹配的行时,发送的电子邮件数量等于他们拥有的行数。因此,如果他们在数据库中有 8 个项目,它会发送 8 封电子邮件。每个添加一个项目。所以第一封电子邮件有一个项目,第二封电子邮件有两个项目,依此类推。我试图找到一种简单的方法,让它在发送电子邮件之前获取所有信息,以便客户只收到一封电子邮件。合乎逻辑的方法是回显信息,但我不能用 php 变量来做到这一点。我没有在下面的代码中包含查询和数据库连接。任何帮助都会受到喜爱。

while ($row = mysql_fetch_array($query)) {
$Items .=  $row['Items']. " - Aisle " .$row['Loc']. "<p>&nbsp;</p>";
$to = "example@example.com";
$from = "example@example.com";
$subject = "Test";
$message = "$Items";
$headers = "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";
$headers .= "From: example@example.com";
mail($to, $subject, $message, $headers);
}
4

3 回答 3

1

只需将发送功能移出循环:

while ($row = mysql_fetch_array($query)) {
     $Items .=  $row['Items']. " - Aisle " .$row['Loc']. "<p>&nbsp;</p>";

 }
 if ($Items != '') {
      $to = "example@example.com";
      $from = "example@example.com";
      $subject = "Test";
      $message = "$Items";
      $headers = "MIME-Version: 1.0 \r\n";
      $headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";
      $headers .= "From: example@example.com";
      mail($to, $subject, $message, $headers);
 }
于 2013-05-17T17:19:36.597 回答
0

当您迭代项目时,您应该只构建一条消息而不是整个电子邮件。如果不了解更多关于您的查询的信息,很难做比以下更多的事情。无论如何我都会试一试:

$message = '';

while ($row = mysql_fetch_array($query)) {
     $Items =  $row['Items']. " - Aisle " .$row['Loc']. "<p>&nbsp;</p>";
     $message .= "$Items";
}

$headers = "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";
$headers .= "From: example@example.com";
mail($to, $subject, $message, $headers);

注意:我不会按原样实现此代码。它旨在作为如何构建代码的示例。

于 2013-05-17T17:18:45.050 回答
0

concatenation错了,你应该首先在循环外将你的变量声明为空

$Items = '';

然后启动loop并获取连接变量所需的所有数据

while ($row = mysql_fetch_array($query)) 
{
    $Items .=  $row['Items']. " - Aisle " .$row['Loc']. "<p>&nbsp;</p>";
}

现在您已准备好发送电子邮件,outside your loop否则您最终会为每个 cicle 发送一封电子邮件。所以你的代码看起来像这样

$Items = '';
while ($row = mysql_fetch_array($query)) 
{
    $Items .=  $row['Items']. " - Aisle " .$row['Loc']. "<p>&nbsp;</p>";
}
$from = "example@example.com";
$subject = "Test";
$message = "$Items";
$headers = "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";
$headers .= "From: example@example.com";
mail($to, $subject, $message, $headers);

然后我希望您记住这些mysql_*功能已被弃用,因此我建议您切换到mysqliPDO

于 2013-05-17T17:34:37.243 回答