2016-02-07 34 views
-1

我試圖把我所有的電子郵件到一個數組中,並通過$_SESSION發送數組,然後把他們所有的一封電子郵件。把從數據庫到數組來的所有電子郵件,然後發送一封電子郵件

$getData = $db->prepare('SELECT id,institute,section,name,sudImage,email FROM enrollment_student WHERE institute=? AND section=?'); 
$getData->bind_param('ii', $insId, $vEnSt); 
if ($getData->execute()) { 
    $getDataResults = $getData->get_result(); 
    while ($es = $getDataResults->fetch_array()) { 

     $sendEmailToAll = array($es['email']); 
     $_SESSION['eta'] = $sendEmailToAll; 

     $getUrl = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 
     $_SESSION['efaUrl'] = $getUrl; 

     print_r($_SESSION['eta']); 

print_r($_SESSION['eta']); 結果是Array ([0] => [email protected]) Array ([0] => [email protected])

但其他網頁:

$subject = $_POST['subject']; 
$message = $_POST['message']; 

$recipient = $_SESSION['eta']; 
$efaUrl = $_SESSION['efaUrl']; 

print_r($_SESSION['eta']); 

mb_internal_encoding("utf-8"); 
$subjectText = $subject; 
$subject = mb_encode_mimeheader($subjectText, "UTF-8"); 
$content = '<html><body>'; 
$content = '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head>'; 
$content .= $message; 
$content .= '</html></body>'; 

$headers = 'From:[email protected]' . "\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-Type: text/html; charset=UTF-8\n"; 

$reTravel = mail($recipient, $subject, $content, $headers); 
if ($reTravel == true) { 
    //header('Location:' . $efaUrl . '&m=s'); 
    echo "Done"; 
} else { 
    //header('Location:' . $efaUrl . '&m=f'); 
    echo "Error"; 
} 

嘗試print_r談到Array ([0] => [email protected]因爲只有一個郵件,然後在同一$_SESSION['eta']結果也來echo "Error";發送Error

我在做什麼錯? 在此先感謝

+0

你必須存儲與一個元素的數組中的$ _SESSION [ '埃塔'],但接下來的腳本中使用它像一個字符串。這是不對的。 – Wizard

回答

0

通知:所有輸入數據的應驗證和消毒!到處!

第一個腳本應該是固定的:

-- remove this two lines 
$sendEmailToAll = array($es['email']); 
$_SESSION['eta'] = $sendEmailToAll; 

-- insert this instead of removed 
$_SESSION['eta'][] = $es['email']; 

第二個腳本改變:

$subject = $_POST['subject']; 
$message = $_POST['message']; 

$efaUrl = $_SESSION['efaUrl']; 

mb_internal_encoding("utf-8"); 
$subjectText = $subject; 
$subject = mb_encode_mimeheader($subjectText, "UTF-8"); 
$content = '<html><body>'; 
$content = '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head>'; 
$content .= $message; 
$content .= '</html></body>'; 

$headers = 'From:[email protected]' . "\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-Type: text/html; charset=UTF-8\n"; 

foreach ($_SESSION['eta'] as $recipient) { 

    // I would like to recommend add the last parameter 
    // otherwise some of email-servers detect your email as spam 
    $reTravel = mail($recipient, $subject, $content, $headers, '[email protected]'); 

    // notice: it will print Done or Error for every email 
    if ($reTravel == true) { 
     //header('Location:' . $efaUrl . '&m=s'); 
     echo $recipient.": Done".PHP_EOL; 
    } else { 
     //header('Location:' . $efaUrl . '&m=f'); 
     echo $recipient.": Error".PHP_EOL; 
    } 
} 
+0

我懂了,但仍然有一件事是因爲亞歷山大說,它應該清理的最後一封電子郵件發送兩次這是爲什麼? –

+0

由於它的正常工作現在'$ _SESSION [「ETA '] = null;' –

+0

我建議收集所有電子郵件沒有se將其設置爲$ _SESSION,並在循環後設置$ _SESSION數據。而且你不需要清理它,它會被過分糾纏。 – Wizard

0

你覆蓋會話變量「埃塔」,試試這個

$_SESSION['eta'][] = $sendEmailToAll; 
+0

它的未來的權利,但還是有一點可以肯定的對,現在我得到陣列重複它的自我,像這樣'陣列([0] => [email protected] [1] =>陣列([0] =>優素福@ hostnile .COM)[2] =>陣列([0] => [email protected]))'這是OK –

+0

這是錯誤的...你需要 - '$ _SESSION [ '埃塔'] [] = $ ES [」電子郵件'];',並且您需要編輯您的第二個腳本,否則'mail()'將嘗試在'recipient'參數中接收數組,而不是使用正確的電子郵件。 – Wizard

+0

當然你可以這樣做:'mail(implode(',',$ recipient),$ subject,$ content,$ headers);',但是如果你想阻止收件人看到另一封郵件,你必須分別發送每封郵件。 – Wizard

相關問題