2013-05-17 3 views
0

У меня есть этот скрипт для отправки электронного письма, содержащего информацию из моей базы данных. Пользователь может иметь 1+ элементов в базе данных с его местоположением. Поэтому, когда я опущу строки, соответствующие пользователю, количество отправленных сообщений равно количеству строк, которые у них есть. Поэтому, если у них есть 8 элементов в базе данных, они отправляют 8 писем. Каждый добавляет элемент. Таким образом, первое электронное письмо содержит один элемент, второй - два элемента и т. Д. Я пытаюсь найти простой способ заставить его получить всю информацию перед отправкой электронной почты, чтобы клиент получил только одно электронное письмо. Логичным способом было бы эхо-информацию, но я не могу сделать это с помощью переменной php. Я не включил запрос и соединение с базой данных в приведенном ниже коде. Любая помощь будет любима.Php Email Mysql Fetch Array

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

Почему '$' деталей каскадного? – Fabio

+0

С "." он отправляет только один из элементов в базе данных. Похоже, что точка должна быть включена для отправки нескольких элементов. И я понял это благодаря Юджину. Спасибо всем, кто ответил с помощью. –

+0

Вы должны запустить его с нормальным равным, а затем конкатенироваться, иначе он не будет работать правильно – Fabio

ответ

1

Просто двигайтесь отправить функцию из цикла:

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

} 
if ($Items != '') { 
     $to = "[email protected]"; 
     $from = "[email protected]"; 
     $subject = "Test"; 
     $message = "$Items"; 
     $headers = "MIME-Version: 1.0 \r\n"; 
     $headers .= "Content-type: text/html; charset=iso-8859-1 \r\n"; 
     $headers .= "From: [email protected]"; 
     mail($to, $subject, $message, $headers); 
} 
+0

Отлично работает. Я ценю помощь. –

+2

@BobStone. Вы должны правильно указать ответ, чтобы дать ему свою репутацию. – Kevin

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: [email protected]"; 
mail($to, $subject, $message, $headers); 

Примечание: Я бы реализовать этот код, как есть. Он призван служить примером того, как структурировать ваш код.

0

Ваш concatenation неправильно, вы должны сначала объявить переменную как пустой за пределами цикла

$Items = ''; 

Затем начните loop и получить все данные вам нужна конкатенация вашей переменной

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

Теперь вы готовы для отправки электронной почты, outside your loop, или вы получите по одному электронному письму для каждого файла. Так что ваш код будет выглядеть следующим образом

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

Тогда я хотел бы, чтобы вы помнили, что mysql_* функции устарели, так что я бы посоветовал вам перейти на mysqli или PDO