2012-10-10 67 views
1

我正在學習通過codeigniter進行簡單登錄,然後當我按下我的視圖上的「登錄」按鈕而沒有輸入用戶名和密碼字段時,出現類似 Missing argument 1 for C_login::login()的錯誤。Codeigniter缺少參數1

這些都是我的控制器,我的IDE(netbeanPHP + CI框架)表示沒有錯誤

<?php 
class C_login extends CI_Controller{ 

public function __construct() { 
    parent::__construct(); 
    $this->load->model('m_login'); 
} 

function index() 
{ 
    $this->form_validation->set_rules('username','trim|Username','required|exact_length[4]|xss_clean'); 
    $this->form_validation->set_rules('password','trim|Password','required|min_length[4]|max_length[40]|xss_clean|callback_login'); 

    if($this->form_validation->run() == false) 
    { 
     $this->load->view('login'); 
    } 
    else 
    { 
     echo 'sukses validasi'; 
    } 

} 

function login($password) 
{ 
    $username = $this->input->post('username'); 
    $password = $this->input->post('password'); 
    $jabatan = $this->input->post('jabatan'); 

    $value = $this->m_login->cekpass($username,$password,$jabatan); 

    if($value) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

} 


} 
?> 

這裏是模型,我認爲我的模型沒有顯示任何錯誤

<?php 
class M_login extends CI_Model{ 

public function __construct() { 
    parent::__construct(); 
} 

function login ($username, $password, $jabatan) 
{ 
    $this->db->where('username',$username); 
    $this->db->where('password',$password); 
    $this->db->where('jabatan',$jabatan); 

    $value = $this->db->get('ms_user'); 

    if($value->num_rows()>0) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 


} 
}?> 
+2

從登錄函數中除去'$ password'參數,或給它一個默認值。 '函數登錄($ password = null)' –

+0

@VladBalmos它顯示了另一個錯誤'調用未定義的方法M_Login :: cekpass()in controller/c_login line 35 – Cignitor

+0

您在模型中將函數'login'命名爲'cekpass'。 –

回答

1

你需要從C_login控制器的login方法中刪除正式參數$password。顯然,你不會通過URL傳遞密碼,對吧?

至於模型中未定義方法的第二個錯誤,這是因爲您使用錯誤的名稱調用了您想要的方法。您在模型中將其命名爲login,但您要求在控制器中調用cekpass。重新命名方法定義,或改爲將您要調用的內容改爲login

+0

,所以如果在dbModel中有一個名爲'getDB()'的方法,我們必須在控制器中使用函數'getdb()'在dbModel中訪問'getdb()'? – Cignitor

+0

@Cignitor no,只要確保你所調用的方法的名稱是正確的。 –