2017-09-29 12 views
0

現在、電子メール機能を設定するデータベースから情報を取得しようとしています。私はそれがデータベースに格納されている電子メールアドレスの数と等しい数の電子メールを送信するようにしようとしています。 (1つの行に、複数の電子メールアドレスを同じ列に格納し、コンマで区切ることができます)。/foreachループが入れ子になっている間にPHPが奇妙な結果を返す

(例 - [email protected][email protected]

if ($result->num_rows > 0) { 
while($row = $result->fetch_assoc()) { 

    if (strpos($row["mailcontacts"], ',') !== false) { 
    $contact = explode(',', $row["mailcontacts"]); 
     //print_r($contact); 

    foreach ($contact as &$toaddress) { 
     $mail->addAddress($toaddress); 
    }} 

私が一致する最初の行の作品をしたい機能。それは、最初の行の1つの電子メールをdaveとbobに送信します。ただし、すでに送信されている連絡先に電子メールが送信される行はそれ以上ありません。基本的にDaveとBobはすべてのメールに含まれます。

私はさまざまな場所のさまざまな変数の設定を解除しようとしましたが、これは問題の場所ではないと思います。私がprint_r($toaddress)をコメントとして使用すると、必要に応じて各行に配列を提供します。

+1

あなたは常に電子メールを追加しています。 – Justinas

+0

すべてのアドレスに同じメールを送信する場合は、 'while'ループ内でメールを送信しないようにしてください。ループが終了してすべてのアドレスが追加されるまで待ってから、ループの後にメールを送信してください。 –

答えて

1

メールを別々に送信する場合は、毎回アドレスをリセットする必要があります。以下のような

例えば

、何かが:あなたのメーラークラスはアドレスをリセットする方法はありません

<?php 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 

     $contacts = explode(',', $row["mailcontacts"]); 

     foreach ($contacts as $toaddress) { 
      $mail->addAddress($toaddress); 
     } 

     $mail->send(); 
     $mail->resetAddresses(); 
    } 
} 

場合は、おそらくループ新ラウンド$mailたびに作成する必要があるだろう。

関連する問題