2012-05-09 8 views
0

こんにちは私はデータベースのテキストエリアからメールアドレスを保存しています。今、私はこのデータを配列に入れて、各電子メールアドレスにメールを送ることができます。PHPテキストエリアのすべての電子メールアドレスを取得

<textarea> 
[email protected] 
[email protected] 
[email protected] 
</textarea> 

このデータはLONG​​TEXTとしてデータベースに保存している:すべての改行で

は、電子メールADRESとても似ています。このデータをデータベースからStringとして取得します。 しかし、私はデータを配列に入れたいです。したがって、各電子メールは一意のインデックスを取得します。 '\ n'や< br>のような特殊文字はデータベースに保存されません。

ありがとうございます!

+0

これらのアドレスを分解してデータベースの個々の行として保存する方が良いでしょう。こうすることで、各メールをメールサーバーに送信する際に、完了したことを示すフラグを設定することができます。そうでない場合:メールサーバーの接続が送信の途中で失敗した場合、どのように処理されたかをどのように知ることができますか? – halfer

答えて

1

あなたの質問は、最初に分割して各アドレスを別々に保存するのではなく、テキストエリアにメールアドレスを保存することを示しているようです。後者のアプローチをとってみたいと思います。データベースを読み出すたびに分割/検証するのはなぜですか?

まず、で受信メールを分割:

$email_addresses = preg_split('/\r\n|\n|\r/', $_POST['email_addresses']); 

を正規表現を使用すると、異なるプラットフォームのアカウントにそこに使用を改行文字の異なるエンドを取り出すことができます。

次にあなたがアドレスをループとし、それぞれを検証することができます。データベースに独自の行の各アドレスを保存し

filter_var($email_address, FILTER_VALIDATE_EMAIL) 

。もし上記で述べた2つの素敵な答えはあなたが必要なものを達成するために

$email_addresses = explode("\n", $row['email_addresses']; 

を使用することができるよう

2

と仮定すると、データベースのフィールドがemail_addressesと呼ばれ、新しい行が\nです:あなたは何を

$email_addresses = explode("\n", $row['email_addresses']); 
0

を試してみましたか?

この試してみてください:あなたがこれを行う必要があり、安全であるために

<?php 
$array = explode("\n", $your_long_text); 
0

を:

<?php 
    $array = explode('|', str_replace(array("\n","\r"),'|',$your_long_text)); 
    foreach ($array as $k => $v) 
     if (empty($v)) unset($array[$k]); 
?> 

これは、改行のすべてのタイプをカバーし、発生する可能性の任意の空のエントリを削除します。

1

はい、。彼らはしかし、あなたがやっていることは悪い考えであることに言及することを忘れました。あなたがやっていることは、SQLインジェクションで非常に厄介なリスクをもたらします。 は、あなたがそう

Select * FROM employees where email = '$email_addresses[0]' 

簡単な解決策は、「mysql_real_escape_stringの($文字列)」を使用することですのような文のセットアップを持っていた場合、私はそのテキストボックスに

[email protected]'; DELETE * FROM employees WHERE 1 OR email = ' 

のようなものを置いて、あなたのテーブルを削除することができます参照してください。あなたのメールアドレスのそれぞれ、または正規表現で、このような

^[A-Za-z0-9._+-][email protected][A-Za-z0-9.-]{2,}+\.[A-Za-z]{2,4}$ 

としてATTACあることからあなたの全体のDBを防ぐために、正しい軌道に乗ってあなたを得るために、これらのリソースをお試しくださいKED:

How can I prevent SQL injection in PHP?

http://php.net/manual/en/security.database.sql-injection.php

http://bit.ly/ICJhZJ

+0

これはストローマンの答えのビットです。 OPは彼がどのようにデータを保存しているのか、パラメータ化されたクエリを使用しているのかは言及していませんでした。 – webbiedave

+0

どのように彼がデータをどのように保存しているかを見てください。生のテキストを取り出してDBに投げ込んで、それを元に戻し、区切り記号で解析すると、あなたは余計にそれを消毒することはできませんでした。 – tcables

0

は、私は私の問題をretoughtとwebbiedaveの助言に従いました。 私は最初に電子メールアドレスを分割し、それらが有効かどうかチェックします。その後、すべてのエントリをDBの行として保存します。

// Delete previous Emails 
     DB::_execute("DELETE FROM `%s` WHERE education_id = ?", array(self::_getEducationEmailAddressesTable()), array($action['id'])); 

     // Only save new emails when email is not empty 
     if(! empty($data['emails'])) { 
      // save Emails 
      $email_addresses = preg_split('/\r\n|\n|\r/', $data['emails']); 

      foreach($email_addresses as $email) { 
       if(! Utils::_isEmailAddress($email)) { 
        return new Error("GiveValidEmailAddress"); 
       } else { 
        DB::_execute("INSERT INTO `%s` (education_id, email_address) VALUES (?, ?)", array(self::_getEducationEmailAddressesTable()), array($action['id'], $email));  
       } 
      } 
     } 
関連する問題