2013-03-16 4 views
-2

필자가 쓰는 웹 응용 프로그램에 대해 "시스템"전자 메일을 설정하려고합니다. 꽤 많은 사용자 테이블에서 당신의 역할은PHP Foreach 루프 + PDO

3

하고 계정 상태가 '활성화'

경우

후 때까지 새 사용자가 로그인 , 또는 모든 관리자가 전자 메일로 보낼 로그인 요청을 보냅니다. 지금까지 이메일을 하드 코딩했지만 앱을 마케팅 할 때 회사는 이메일을 변경하기 위해 코드를 작성하지 않아도됩니다. 그래서 나는 그것을 "동적으로"하려고 노력하고있다.

Thomas는 대부분 내 모델 덕분이다. :

{ 
     $sql = "SELECT * from users WHERE status = 'Activated' and role = 3"; 
     $admin_email = $this -> db -> conn_id -> prepare($sql); 
     $admin_email -> execute(); 
     $emails = array(); 

     if ($admin_email) 
     { 
      if ($admin_email -> rowCount() > 0) 
      { 
       foreach ($admin_email -> fetchall() as $row) 
       { 
        $emails[] = $this -> encrypt -> decode($row['email']); 
       } 
       return $emails; 
      } 
     } 
    } 

및 컨트롤러 :

 { 

     $this -> load -> model('login_model'); 
     $this -> load -> library('email'); 
     $this -> load -> library('encrypt'); 

     $emails = $this -> login_model -> admin_email(); 

     $first = $this -> input -> post('fname'); 
     $last = $this -> input -> post('lname'); 
     $email = $this -> input -> post('email'); 

     $this -> email -> from($email); 
     $this -> email -> to($emails); 
     $this -> email -> reply_to($email); 
     $this -> email -> subject('' . $first . ' ' . $last . ' Account Request'); 
     $this -> email -> message('{unwrap}Hello this is ' . $first . ' ' . $last . ', I am requesting to be added to the staff log-in.{/unwrap}'); 

     if (!$this -> email -> send()) 
     { 
      $this -> session -> set_flashdata('email', 'Email Was Not Sent!'); 
      $this -> request_account(); 
     } else 
     { 
      $this -> session -> set_flashdata('login', 'Request Sent!'); 
      redirect('login_controller/index', 'location'); 
     } 
    } 

그냥 내 관찰에서 더 많은이 파고 :

  1. 첫 번째 행이 잘 작동을 반환하지만, 테스트 목적으로 내가 두가 관리자 계정과 나는 지금 막 말했다, 첫번째 사람은 전자 우편을 얻는다. 첫 번째 행 (첫 번째 관리자)을 삭제하면 두 번째 행이 삭제됩니다. 그래서 내 foreach가 실패한 것처럼 느껴지지만, 왜 또는 심지어 내 오류 (들)을 해결하는 방법을 모르겠어요.

하나는 내가있는 동안,

+0

$ dbemail = $ row [ 'email'];'를'$ dbemail = $ row'로 변경하고 다시 테스트하십시오 –

+0

정답이 주어진 후에 질문을 닫습니다. $ this-> logic === 0 – RaGe10940

답변

0

귀하의 함수는 상관없이

$sql = "SELECT email from users WHERE status = 'Activated' and role = 3"; 
    $admin_email = $this -> db -> conn_id -> prepare($sql); 
    $admin_email -> execute(); 

    $emails = array(); // initialize empty array 

    if ($admin_email) 
    { 
     $encryptedEmails = $admin_email->fetchAll(); 
     foreach ($encryptedEmails as $row) 
     { 
      $emails[] = $this->encrypt->decode($row['email']); // insert the email at the end of the array 
     } 
    } 

    return $emails; 
+0

여전히 첫 번째 행으로 만 전송되었지만 다른 관리자 계정 이메일은 알림을받지 못했습니다. – RaGe10940

+0

흥미 롭습니다. SQL 쿼리를 별도로 실행하면 2 개의 전자 메일이 반환됩니까? 이 함수는 배열에서 2 개의 전자 메일을 반환합니까? –

+0

나는 그것을 고쳐 줬다. 너 웃을거야. 당신의 대답은 가장 가깝기 때문에 +1하고 당신을 확인해 보겠습니다. – RaGe10940

-3

귀하의 ADMIN_EMAIL 기능 당신은 $admin_email을 PDO 문이 변수를 호출하고 이상한 비트

  • 보이는, 좋은 것 그 잘못 여기 뭐하는 거지 나를 보여줄 수있는 경우 그것은 전자 메일을 포함하지 않습니다. 그것은 당신의 코드를 꽤 자기 혼란스럽게 만든다.
  • try..catch 연산자를 사용하면 안되는 방식으로 사용하고 있습니다.
  • 너무 과도한 if
  • 아무것도 내가 쓸모 또는 일부 잘못된 가정에 근거있는 의심 이상한 decode() 기능이 $row['email']
  • 에 수행되고 있지.

그래서, 나는 그것이 관리자 이메일과 배열을 반환합니다

function admin_email() 
{ 
    $sql = "SELECT email from users WHERE status = 'Activated' and role = 3"; 
    $stm = $this->db->conn_id->prepare($sql); 
    $stm->execute(); 
    return $stm->fetchAll(); 
} 

더 합리적인 방법이 기능을 다시하기로 결정했다.

+0

내 이메일이 암호화되어 있으며, 해당 디코딩 기능은 암호화를 제거한 다음 해당 이메일의 암호화되지 않은 버전을 반환합니다. – RaGe10940

+0

저는 codeigniter라는 php MVC를 사용하고 있습니다. 계정이 만들어지면 전자 메일이 암호화되므로 올바른 전자 메일 주소 – RaGe10940

+0

OP를 제대로 보내려면 암호를 해독해야합니다. 아직 결과가 없습니다. – RaGe10940

-1

것을 시도 할 수도 있으므로 어떤 하나의 이메일을 반환 : 아마 (EDIT 내 첫 번째 대답을 삭제 ....)

(내가 아니에요 물론) foreach 루프에서는 두 개의 변수를 사용하면 안됩니다.
REF : http://php.net/manual/fr/control-structures.foreach.php

당신이 할 경우 : foreach 문이 하나는 $ ADMIN_EMAIL 배열 항목을 처리하고있다으로

 foreach ($admin_email -> fetch() as $row) 
      { 
       $row = $row['email']; 
      } 

      $email = $this -> encrypt -> decode($admin_email); 

인코딩 된 이메일은 지금 ....는 $ ADMIN_EMAIL 배열에 있어야합니다 (단순한 문자열 변수가 아닌) 배열로 반환하십시오.


그런 다음 디코딩 함수가 배열을 처리 할 수 ​​있는지 확인하십시오.