PHP从textarea获取所有电子邮件地址

时间:2012-05-09 15:12:08

标签: php arrays

您好我正在从数据库中的textarea保存电子邮件地址。现在我希望将这些数据放入一个数组中,这样我就可以向每封电子邮件发送邮件。

在每个换行符都有一个像这样的电子邮件地址:

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

此数据作为LONGTEXT保存在数据库中。我将这些数据作为String从数据库中获取。 但我希望将数据放入数组中。因此,每封电子邮件都会获得一个唯 请注意,没有特殊字符,如'\ n'和&lt; br&gt;保存在数据库中。

提前致谢!

6 个答案:

答案 0 :(得分:2)

假设您的数据库字段名为email_addresses且新行为\n

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

答案 1 :(得分:1)

您的问题似乎表明您将整个textarea中的电子邮件地址保存起来,而不是先将它们拆分并分别保存每个地址。你会想采取后一种方法。为什么每次读出数据库时都要进行拆分/验证?

首先,将传入的电子邮件拆分为:

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

正则表达式允许您考虑不同平台使用的不同行尾字符。

然后,您可以遍历地址并使用以下内容验证每个地址:

filter_var($email_address, FILTER_VALIDATE_EMAIL)

然后将每个地址保存在数据库中自己的行中。

答案 2 :(得分:1)

是的,正如上面提到的两个不错的答案,你可以使用

$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}$

尝试使用这些资源让您走上正确的道路,防止整个数据库受到攻击:

How can I prevent SQL injection in PHP?

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

http://bit.ly/ICJhZJ

答案 3 :(得分:0)

你有什么尝试?

试试这个:

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

答案 4 :(得分:0)

为了安全起见,你应该这样做:

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

这包含所有类型的换行符,并删除可能出现的所有空条目。

答案 5 :(得分:0)

我回答了我的问题并遵循了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));    
                }
            }
        }