2012-12-18 7 views
2

zend 프레임 워크를 사용하여 여러 이메일을 한 번에 콜론으로 구분하는 양식이 있습니다.Zend는 데이터베이스에있는 이메일을 보내지 못하게합니다.

이미 데이터베이스에있는 전자 메일을 보내지 않고 존재하지 않는 전자 메일을 보내지 못하게 할 방법이 있습니까?

는 여기에 몇 가지 여기 :

HTML -----

<form method="post" action="<?php echo $this->url(array(), 'inviteByEmail'); ?>"> 
      <table><tr> 
       <td>Email Addresses:* <span class="right small_font" style="margin-right:25px;">* Each email address must be separated by a comma (,)</span></td> 
       <td></td> 
      </tr><tr> 
       <td><input class="input_long" type="text" name="emails" /></td> 
      </tr><tr> 
       <td><br/>Personalize your message:</td> 
      </tr><tr> 
       <td><textarea cols="49" rows="7" name="personal_message" id="share-text" style="margin-bottom:8px;" placeholder="Download Ad-Aware and help me get PRO version" ></textarea></td> 
      </tr><tr> 
       <td rowspan="3" valign="top"> 
        <input type="submit" class="btn_submit_step3" id="btn_friends" value="share_friends" /><br/> 
       </td> 
      </tr></table> 
     </form> 

컨트롤러 액션 -----

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'); 

} 

그리고 모델은 이메일을 보낼 수있는 기능이 있습니다.

+0

난 그냥 데이터베이스 테이블을 확인하기 위해 컨트롤러에 zend_validate_db_norecordexists을, 내가 밖으로 방법을 찾을 생각 : 여기

이 작업을 수행하려면 psedo 기능입니다. –

답변

1

전자 메일을 보내기 전에 필터링해야합니다. array_diff을 살펴보십시오.

/** 
* 
* @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; 
} 
+0

고맙습니다. 나는 그것을 시험해 보겠습니다. –

관련 문제