2012-01-25 2 views
2

나는 codeigniter에서 로그인 시스템을 만든다. codeigniter에서 새로운 것. 테스트 할 때 나는Codeigniter getinstance() 오류로 인해 라이브러리, 도우미가로드되지 않습니까?

$CI =&get_instance(); 

$CI =get_instance(); 

$this->session->userdata 

세 가지 방법이 있지만 오류가 시도했다

<?php 
class Login extends CI_Controller { 

    function __construct() 
    { 
     if($this->is_logged_in() === true){ 
      redirect('welcome'); 
     } 
    } 

    function index() 
    { 
     $data['main_content'] = 'login_form'; 
     $data['class_name'] = get_class(); 
     $data['no_header'] = '1'; 
     $data['no_footer'] = '1'; 
     $this->load->view('includes/template', $data);  
    } 

    function validate_credentials() 
    {  
     $this->load->model('admin_model'); 
     $query = $this->admin_model->validate(); 
     print_r($query); 
     if($query) // if the user's credentials validated... 
     { 
      $data = array(
       'AdminID' => $query, 
       'is_logged_in' => true 
      ); 
      $this->session->set_userdata($data); 
      redirect('welcome'); 
     } 
     else // incorrect username or password 
     { 
      echo "here"; 
      exit; 
      $this->index(); 
     } 
    } 

    function signup() 
    { 
     $data['main_content'] = 'signup_form'; 
     $this->load->view('includes/template', $data); 
    } 

    function create_member() 
    { 
     $this->load->library('form_validation'); 

     // field name, error message, validation rules 
     $this->form_validation->set_rules('first_name', 'Name', 'trim|required'); 
     $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required'); 
     $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email'); 
     $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); 
     $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]'); 


     if($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('signup_form'); 
     } 

     else 
     {   
      $this->load->model('membership_model'); 

      if($query = $this->membership_model->create_member()) 
      { 
       $data['main_content'] = 'signup_successful'; 
       $this->load->view('includes/template', $data); 
      } 
      else 
      { 
       $this->load->view('signup_form');   
      } 
     } 

    } 

    function logout() 
    { 
     $this->session->sess_destroy(); 
     $this->index(); 
    } 

    function is_logged_in() 
    { 
     $CI =&get_instance(); 
     $is_logged_in = $CI->session->userdata('is_logged_in'); 
     if(isset($is_logged_in) || $is_logged_in === true) 
     { 
      return true; 
     }else{ 
      return false; 
     } 
    } 
} 

A PHP Error was encountered 

Severity: Notice 

Message: Trying to get property of non-object 

Filename: controllers/login.php 

Line Number: 92 

Fatal error: Call to a member function userdata() on a non-object in P:\xampp\htdocs\xxxxx\xxxxx\application\controllers\login.php on line 92 

여기 내 login.php 컨트롤러 파일 내 로그인 시스템이 오류를 받고있다.

답변

3

. 아마도 일부 자원이 아직로드되지 않은 것일 수 있습니다.

시도이 추가 :

function __construct() 
{ 
    parent::__construct(); //you always have to call parent's constructor before ANYTHING 

    if($this->is_logged_in() === true){ 
     redirect('welcome'); 
    } 
} 
0

인스턴스의 세션 라이브러리를 get_instance()로로드하지 않습니다.

단순히 @jere에서 언급 한 바와 같이 세션이 이미로드되어 가정 할, 당신은 부모를 호출 :: __ 구조() 컨트롤러에서 :

function is_logged_in() 
{ 
    $is_logged_in = $this->session->userdata('is_logged_in'); 
    if(isset($is_logged_in) || $is_logged_in === true) 
    { 
     return true; 
    }else{ 
     return false; 
    } 
} 
의 다른 인스턴스를 사용하는 이유

이 몰라 여기 계세요. 당신이 그렇게 되겠지 경우

처럼 다시 세션 라이브러리를로드하십시오 : 먼저 부모 생성자를 호출하지 않고 컨트롤러의 생성자에서 is_logged_in() 함수를 호출

$CI->load->library('session') 
$is_logged_in = $CI->session->userdata('is_logged_in'); 
//rest of your old code 
관련 문제