2011-08-03 10 views
0

1つの電子メールアドレスがテキストエリアに入力されたときに、次のスクリプトは正常に動作しますが、2回入力すると電子メールは送信されません。私は間違って何をしていますか?PHP Foreach Loop mail()

if($_POST['submit']=='Send Email') { 

$email_addresses = explode(",\n", $_POST['email']); 

foreach($email_addresses as $email_address){ 

$email_address = trim($email_address); 

send_mail( '[email protected]', 
         $email_address, 
         'Test Email', 
         "Hello This Email Is A Test"); 

} 


} 

この

array(1) { [0]=> string(39) "[email protected] [email protected]" } 
+0

$ _POST ['email']の印刷出力と\ nで区切られていることを確認します。 – nidhin

答えて

1
明らか

[email protected] [email protected]中のvar_dump($ EMAIL_ADDRESSES)の結果は、有効な電子メールではなく、私の精神的な力が、これはこれを行うには正しい方法ではないことを教えてください。メールアドレス以外の何かを入力すればどうなりますか?ユーザーから受け取ったデータをサニタイズするようにしてください。あなたは盲目的にユーザー入力を信頼することはできません。あなたが二回

foreach($email_addresses as $email_addresses) 

ので、第二のループに、ソースが上書きされているのと同じ変数名を使用している

+0

これはちょっと凝縮されたバージョンです。 – Jako

+0

あなたのコードとそれを維持する人には良いことです。ユーザーがクリックして入力するのではなく選択するようにウェブページを設計できるのであれば、私はまだサーバー側で衛生検査を実行します。 – Kumar

+0

この電子メールスクリプトは、登録ユーザーのみの紹介プログラム用です。悪意のあるユーザーが認証されたアカウントを必要とし、ログインしている場合、一般ユーザーがアクセスできるものではありません。 – Jako

6

編集:

var_dump($_POST['email']); 
var_dump(explode(",\n", $_POST['email'])); 
の出力を投稿してください
+0

'foreach($ email_addresses as $ email_address){'私は同じ問題を抱えています。 – Jako

+0

はこの変更を反映するために質問を修正します。そうすることで、あなたはそれを確実に得ることができます。 –

+0

私は編集しました。 – Jako

1
foreach($email_addresses as $email_addresses){ 

同じ変数名であるため、ソース配列($ email_addresses)を配列の最初の項目で上書きしていることを意味します。残念なことに、PHPはこれにエラーを投げるので、最初の電子メールアドレスで配列を書き直した後、ループから抜け出せます(これは予想通りで論理的な動作ですが)。

2

それは次のようになります。

foreach($email_addresses as $email_address){ 

$email_address = trim($email_address); 

send_mail( '[email protected]', 
         $email_address, 
         'Test Email', 
         "Hello This Email Is A Test"); 

} 

はまた",\n"セパレータ上に爆発する使用して分割する(人々はいくつかのケースで",\r\n"を送ることができます)良いアイデアではありません。複数のフィールドを指定するか、preg_split()を使用してください。

explode()の後にvar_dump($email_address);の機能を試しても問題がなければ、入力が正確に何が起こったかを知ることができます(実際には入力が正しいことがわかります)。

更新:$ email_addressには\ nはありません。それはあなたのHTMLフォームに依存します。

ただちにexplode(', ', $email_addresses);を入力してください。,もあなたの入力に紛失しました。その文字列を分解する必要があります。

+0

ありがとうございます。私は 'foreach($ email_addresses as $ email_address){'を実行しようとしましたが、電子メールは送信されません。 – Jako

+0

不具合の場合、あなたの質問を 'var_dump()'の結果で更新できますか? –

+0

私はexplode()の後にvar_dump()で質問を更新しました。 – Jako