2012-10-10 68 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,只要确保你所调用的方法的名称是正确的。 –