2017-10-15 2 views
0

내가 만든 경우 CodeIgniter의 3CodeIgniter의 사용자 등록 : 분할 로그인 누군가가 <em>등록 양식</em>을 채우고 그것을 제출하면이 조건에 조건이

등록 및 로그인 응용 프로그램을 포함 "비활성 계정"실패 성공적으로 "사용자"테이블의 "활성"열은 노호 이미지에 표시로, 0 값을받습니다

enter image description here

사용자가 할 수있는 전에 자신의 계정을 활성화해야합니다 의 .이 "분할"로그인 실패 조건 수 있도록, 위의 대신 코드의 라인 $this->session->set_flashdata("signin_failure", "Incorrect email or password");의,

public function signin() 
{ 
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email'); 
    $this->form_validation->set_rules('password', 'Password', 'required|trim'); 
    $this->form_validation->set_error_delimiters('<p class="error">', '</p>'); 
    if ($this->form_validation->run()) 
    { 
    $email = $this->input->post('email'); 
    $password = $this->input->post('password'); 
    $this->load->model('Usermodel'); 
    $current_user = $this->Usermodel->user_login($email, $password, $active); 
    // Set the current user's data 
    if ($current_user) { 
    $this->session->set_userdata(
     array(
     'user_id' => $current_user->id, 
     'user_email' => $current_user->email, 
     'user_first_name' => $current_user->fname, 
     'is_logged_in' => TRUE 
     ) 
     ); 
    redirect('home'); 
    } else { 
     $this->session->set_flashdata("signin_failure", "Incorrect email or password"); 
     redirect('signin'); 
    } 
    } 
    else 
    { 
    $this->load->view('signin'); 
} 
} 

내가 원하는 : IGN에서 Signin.php 컨트롤러에서

나는 signin() 기능이 2 : 이메일 또는 비밀번호가 잘못되었습니다.계정이 활성화되지 않았습니다..

if (condition here) { 
     $this->session->set_flashdata("signin_failure", "Your account has not been activated"); 
    } else { 
     $this->session->set_flashdata("signin_failure", "Incorrect email or password"); 
} 

질문 : 나는 위의 코드에 무엇을 넣어 대신 condition here해야합니까?

좀 더 구체적으로 말하면 : "활성"열의 값이 0 인 경우 do $this->session->set_flashdata("signin_failure", "Your account has not been activated");?

USER_LOGIN() 내부 함수 Usermodel :

public function user_login($email, $password, $active) { 
     $query = $this->db->get_where('users', ['email' => $email, 'password' => md5($password), 'active' => 1]); 
     return $query->row(); 
} 

UPDATE :이 함께했다

:

public function signin() 
    { 
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email'); 
    $this->form_validation->set_rules('password', 'Password', 'required|trim'); 
    $this->form_validation->set_error_delimiters('<p class="error">', '</p>'); 
    if ($this->form_validation->run()) 
    { 
    $email = $this->input->post('email'); 
    $password = $this->input->post('password'); 
    $this->load->model('Usermodel'); 
    $current_user = $this->Usermodel->user_login($email, $password); 
     // If we find a user 
    if ($current_user) { 
     // If the user found is active 
     if ($current_user->active == 1) { 
     $this->session->set_userdata(
     array(
      'user_id' => $current_user->id, 
      'user_email' => $current_user->email, 
      'user_first_name' => $current_user->fname, 
      'user_active' => $current_user->active, 
      'is_logged_in' => TRUE 
     ) 
     ); 
     redirect('home'); 
     } else { 
     // If the user found is NOT active 
     $this->session->set_flashdata("signin_failure", "Your account has not been activated"); 
     redirect('signin'); 
     } 
    } else { 
     // If we do NOT find a user 
     $this->session->set_flashdata("signin_failure", "Incorrect email or password"); 
     redirect('signin'); 
    } 
    } 
    else 
    { 
    $this->load->view('signin'); 
} 
} 

를하지만에 결함이 있더라도 때문에 이메일과 비밀번호가 올바른 경우이지만 사용자는 비활성입니다. 메시지는 "귀하의 계정이 활성화되지 않았습니다"대신 "잘못된 이메일 또는 비밀번호"입니다.

+0

'if ($ current_user-> active == 1)'에서'if ($ current_user [ 'active'] == 1)'로 변경하면 결과가 배열 객체가 아닌 결과로 반환되기 때문입니다. –

+0

방금했는데이 오류 :'형식 stdClass의 개체를 배열로 사용할 수 없습니다'. –

+0

모델 함수에서'return $ query-> row_array();'를 사용하십시오. –

답변