2011-08-15 83 views
1

即時通訊新的PHP和我需要一些澄清。雖然搜索谷歌,但太多的結果,沒有明確識別什麼是我的錯。因爲我沒有得到任何錯誤我不知道最新情況發生。PHP錯誤與郵件()需要澄清

錯誤即時得到是這樣的:

Warning: mail() expects parameter 1 to be string, array given in 

所以longstory總之,這是我的一小段代碼:

while($sn_rowSelect = mysqli_fetch_array($sn_queryResult)) { 
    mail($to,$subject,$mssg,'from:xyz'); 
} 

if(mail($to,$subject,$mssg,'from:xyz')) { 
echo "An e-mail was sent to $to with the subject: $subject"; 
} else { 
echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid"; 
} 

什麼即時試圖做的是,我有一個小數據庫與名稱等等,在上面的這個循環中,它假設儘管在$ sn_rowSelect中有一個名字,給它提供消息,實質上是通過電子郵件發送大量電子郵件。

錯誤說:「預計字符串數組給定」聊天假定機構從數據庫得到的名稱得到作爲assosiative數組值,但心不是什麼它應該做的?

在此先感謝。

編輯***

$to = $sn_rowSelect; 
$from = $_POST['sender']; 
$mssg = $_POST['message']; 

從和mssg,通過另一個頁面上的表單填寫。

+0

你在哪裏設置'$ to'變量?因爲它沒有在你顯示的代碼中設置。 –

+0

嗨,埃米爾,對不起。我編輯我的帖子上面,但要保護您的問題,$ to = s到$ sn_rowSelect。 – somdow

+0

$ sn_rowSelect是一個數組(http://php.net/mysqli_fetch_array)。所以你試圖傳遞一個字符串的數組insead(郵件函數的第一個參數)。你在用什麼SQL查詢? – realmfoo

回答

1

您必須在 while循環內設置$參數,並且您需要將其設置爲字符串。如果您希望它有意義,您還需要在while循環內移動if語句,並且不能兩次調用mail(),因爲這會創建多餘的電子郵件。

這裏有一個固定的代碼爲你:

$from = $_POST['sender']; 
$mssg = $_POST['message']; 

while($sn_rowSelect = mysqli_fetch_array($sn_queryResult)) { 
    $to = sn_rowSelect['email']; //change 'email' to the name of column in db 
    $mailstatus = mail($to, $subject, $mssg, 'from:xyz'); 

    if($mailstatus) { 
     echo "An e-mail was sent to $to with the subject: $subject\n"; 
    }else{ 
     echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid\n"; 
    } 
} 
2

不,你應該得到的實際用戶ñ ame作爲一個字符串,而不是一個數組。

類似$row['name'] - 做你的價值的var_dump找出數據如何存儲,或print_r

+0

嘿囚犯,好吧,所以我不知道什麼var_dump是,谷歌搜索它,測試它,我得到了一些結果。感謝那。現在,就實際轉儲而言,我得到7個轉儲結果,這是我數據庫中7個電子郵件地址。所以即時通訊假設它的工作,因爲它將數據庫中的所有地址傳遞給我的應用程序,但仍然沒有解釋「mail()期望參數1是字符串,數組給定的意思」,我仍然得到 – somdow

+0

這是因爲你'將數組傳遞給'mail()'的'$ to'參數。你應該傳遞類似'$到['email_column_in_database']'的東西 – Prisoner

1

好像你試圖輸入一個包含多封電子郵件直接進入$toarray

可以輸入多個電子郵件到mail功能,但它們必須用逗號分隔。

所以改變這樣的:

mail($to,$subject,$mssg,'from:xyz'); 

到:

$to = implode(",",$to); 
mail($to,$subject,$mssg,'from:xyz'); 

另外要小心,你正在做一個檢查後,您發送的郵件是這樣的:

if(mail($to,$subject,$mssg,'from:xyz')) { 

這實際上會再次發送電子郵件。如果您想檢查您的電子郵件功能是否正常工作,請將if聲明添加到原始代碼中。