您好我正在从数据库中的textarea保存电子邮件地址。现在我希望将这些数据放入一个数组中,这样我就可以向每封电子邮件发送邮件。
在每个换行符都有一个像这样的电子邮件地址:
<textarea>
my@email.com
my2@email.com
my3@email.com
</textarea>
此数据作为LONGTEXT保存在数据库中。我将这些数据作为String从数据库中获取。 但我希望将数据放入数组中。因此,每封电子邮件都会获得一个唯 请注意,没有特殊字符,如'\ n'和&lt; br&gt;保存在数据库中。
提前致谢!
答案 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
答案 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));
}
}
}