Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend阻止发送数据库中存在的电子邮件_Php_Validation_Zend Framework_Email_Email Validation - Fatal编程技术网

Php Zend阻止发送数据库中存在的电子邮件

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

我有一个表单,可以使用zend framework一次发送多封电子邮件,并用冒号将它们分开

有没有一种方法可以防止发送数据库中已经存在的电子邮件和发送不存在的电子邮件

这里有一些:

html-----


而且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;
}