2

こんにちは私はデータベースのテキストエリアからメールアドレスを保存しています。次に、このデータを配列に入れて、各メールアドレスにメールを送信できるようにします。

すべての改行には、次のような電子メールアドレスがあります。

<textarea>
my@email.com 
my2@email.com 
my3@email.com
</textarea>

このデータはLONG​​TEXTとしてデータベースに保存されます。このデータをデータベースから文字列として取得します。しかし、私はデータを配列に入れたいと思っています。したがって、各電子メールは一意のインデックスを取得します。'\n'や<br>などの特殊文字はデータベースに保存されないことに注意してください。

前もって感謝します!

4

6 に答える 6

3

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

まず、受信メールを次のように分割します。

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

正規表現を使用すると、さまざまなプラットフォームで使用されているさまざまな改行文字を考慮に入れることができます。

次に、アドレスをループして、次の方法でそれぞれを検証できます。

filter_var($email_address, FILTER_VALIDATE_EMAIL)

次に、各アドレスをデータベースの独自の行に保存します。

于 2012-05-09T15:34:01.000 に答える
2

email_addressesデータベースフィールドが呼び出され、新しい行が\n次のようになっていると仮定します。

$email_addresses = explode("\n", $row['email_addresses']);
于 2012-05-09T15:13:09.870 に答える
1

はい、上記の2つの良い答えとして、使用できます

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

必要なことを達成するために。しかし、彼らはあなたがしていることは悪い考えだと言うのを忘れていました。あなたがしていることは、SQLインジェクションに大きなセキュリティリスクをもたらします。私はのようなものを置くことができますを参照してください

test@aol.com'; DELETE * FROM employees WHERE 1 OR email = '

そのテキストボックスで、そのようなステートメント設定があった場合はテーブルを削除します

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

簡単な解決策は、各メールアドレスで「mysql_real_escape_string($ string)」を使用するか、次のような正規表現を使用することです。

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

次のリソースを試して、DB全体が攻撃されるのを防ぐための正しい軌道に乗ってください。

PHPでSQLインジェクションを防ぐにはどうすればよいですか?

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

http://bit.ly/ICJhZJ

于 2012-05-09T15:41:20.667 に答える
0

何を試しましたか?

これを試して :

<?php
$array = explode("\n", $your_long_text);
于 2012-05-09T15:14:22.270 に答える
0

安全のために、これを行う必要があります。

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

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

于 2012-05-09T15:27:27.670 に答える
0

私は自分の問題を再考し、webbiedaveのアドバイスに従いました。まずメールアドレスを分割して、有効かどうかを確認します。その後、すべてのエントリを1行として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));    
                }
            }
        }
于 2012-05-10T07:13:11.777 に答える