Php Zend阻止发送数据库中存在的电子邮件
我有一个表单,可以使用zend framework一次发送多封电子邮件,并用冒号将它们分开 有没有一种方法可以防止发送数据库中已经存在的电子邮件和发送不存在的电子邮件 这里有一些: html-----Php Zend阻止发送数据库中存在的电子邮件,php,validation,zend-framework,email,email-validation,Php,Validation,Zend Framework,Email,Email Validation,我有一个表单,可以使用zend framework一次发送多封电子邮件,并用冒号将它们分开 有没有一种方法可以防止发送数据库中已经存在的电子邮件和发送不存在的电子邮件 这里有一些: html----- 而且model还具有发送电子邮件的功能。您应该在尝试发送电子邮件之前过滤电子邮件。调查 以下是完成工作的psedo函数: /** * * @param array $userEnteredEmails array with all user entered emails * @return
而且model还具有发送电子邮件的功能。您应该在尝试发送电子邮件之前过滤电子邮件。调查 以下是完成工作的psedo函数:
/**
*
* @param array $userEnteredEmails array with all user entered emails
* @return array
*/
protected function _getEmailsThatAreNotInDb(array $userEnteredEmails)
{
$db = null; // your database object
/* @var $db Zend_Db_Adapter_Abstract */
// get all emails from DB that are in user provided list
$query = $db->select()
->from('emails_table', array('email_address'))
->where('email_address IN (?)', $userEnteredEmails);
$emailsInDb = $db->fetchCol($query);
// get emails from user provided list that are not in database loaded list
$emailNonInDb = array_diff($userEnteredEmails, $emailsInDb);
return $emailNonInDb;
}
我想我找到了解决办法,只需在控制器中执行zend_validate_db_Norecordists检查数据库表。谢谢,我会尝试一下。
public function inviteByEmailAction()
{
$emails = $this->getRequest()->getParam('emails');
$personal_message = $this->getRequest()->getParam('personal_message');
$emails = explode(",", $emails);
foreach ($emails as $email)
{
$email = trim($email);
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email))
{
if ($this->_helper->model('EmailInvites')->noRowByFields(array('email' => $email, 'referred_by_user_id' => $this->_helper->user()->id)))
{
$email_invite = $this->_helper->model('EmailInvites')->createRow();
$email_invite->email = $email;
$email_invite->personal_message = $personal_message;
$email_invite->referred_by_user_id = $this->_helper->user()->id;
$email_invite->save();
$this->_helper->user()->sendInviteEmail($email, $personal_message);
}
}
}
$this->getHelper('redirector')->gotoRoute(array(), 'invite');
}
/**
*
* @param array $userEnteredEmails array with all user entered emails
* @return array
*/
protected function _getEmailsThatAreNotInDb(array $userEnteredEmails)
{
$db = null; // your database object
/* @var $db Zend_Db_Adapter_Abstract */
// get all emails from DB that are in user provided list
$query = $db->select()
->from('emails_table', array('email_address'))
->where('email_address IN (?)', $userEnteredEmails);
$emailsInDb = $db->fetchCol($query);
// get emails from user provided list that are not in database loaded list
$emailNonInDb = array_diff($userEnteredEmails, $emailsInDb);
return $emailNonInDb;
}