2014-03-05 37 views
0

我有以下代碼是爲向用戶發送電子郵件提醒而編寫的,但它僅向列表中的第一個用戶發送電子郵件,其餘用戶未通過電子郵件發送。該查詢在SQL中工作,以拉所有的用戶PHP中的Foreach循環只能獲得第一個實例

$users = array(mysql_fetch_array(mysql_query("SELECT DISTINCT wp_users.* FROM wp_users LEFT JOIN (SELECT lead_id, MAX(case when field_number = 7 then value end) AS email, MAX(case when field_number = 8 then value end) AS tournament_id FROM wp_rg_lead_detail GROUP BY lead_id) AS t1 ON t1.email = wp_users.user_email AND t1.tournament_id = '$tournament_id' WHERE t1.lead_id IS NULL AND id !=1"))); 


// Create the replacements array 
$replacements = array(); 
foreach ($users as $user) { 
$replacements[$user['user_email']] = array (
'{user_login}' => $user['user_login'] 
); 
echo $user['user_email'] . "<br />" . $user['user_login']; 
} 

// Create the mail transport configuration 
$transport = Swift_MailTransport::newInstance(); 

// Create an instance of the plugin and register it 
$plugin = new Swift_Plugins_DecoratorPlugin($replacements); 
$mailer = Swift_Mailer::newInstance($transport); 
$mailer->registerPlugin($plugin); 

// Create the message 
$message = Swift_Message::newInstance(); 
$message->setSubject("Pure Fantasy Golf Pick Reminder for {user_login}"); 
$message->setBody("{user_login}, this is a reminder that you need to submit a pick for this weeks tournament " . $tournament_name . ". Please go to http://dev.purefantasygolf.com to make your pick now."); 
$message->setFrom("[email protected]", "Pure Fantasy Golf"); 

// Send the email 
foreach($users as $user) { 
$message->setTo($user["user_email"], $user["user_login"]); 
$mailer->send($message); 
} 
+0

var_dump($ users),這是否包含你想要的? – Naruto

+0

你的意思是你甚至沒有'print_r($ users)'來查看你是否有你所有的行? –

回答

1

查看mysql_fetch_array的文檔。

你需要循環的結果是這樣的:

$result = mysql_query("SELECT DISTINCT wp_users.* FROM wp_users LEFT JOIN (SELECT lead_id, MAX(case when field_number = 7 then value end) AS email, MAX(case when field_number = 8 then value end) AS tournament_id FROM wp_rg_lead_detail GROUP BY lead_id) AS t1 ON t1.email = wp_users.user_email AND t1.tournament_id = '$tournament_id' WHERE t1.lead_id IS NULL AND id !=1"); 

$replacements = array(); 
while($user = mysql_fetch_array($result)) { 
    $replacements[$user['user_email']] = array (
     '{user_login}' => $user['user_login'] 
    ); 
    echo $user['user_email'] . "<br />" . $user['user_login']; 
} 
0

我不認爲這是一個好主意,發送N個電子郵件循環。這可能會導致性能問題(如果郵件列表中有超過10個用戶)。我認爲更好的解決方案是將所有用戶添加爲BCC並只發送一封電子郵件。

+3

好主意,但它應該是「密件抄送」,否則你的隱私保護將面臨嚴重問題。 –

+0

或更好的BCC – superphonic

+0

正確,好的一點 – CoolEsh

2

mysql_fetch_array沒有獲得一個包含所有行的數組。它每次在數組中使用數組元素中每列中的值獲取一行。

相關問題