表单提交错误


Form submision error

我有一个像下面这样的控制器,我使用它来注册,但每次我提交表单时,我都会看到这个错误:

 A PHP Error was encountered
Severity: Notice
Message: Undefined property: Welcome::$db
Filename: libraries/Form_validation.php
Line Number: 954

我的控制器是这样的:

class Welcome extends CI_Controller {

    public function index()
    {
        $this->load->view('welcome_message');

    }
    public function sign_up(){
        $this->load->helper('form');
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[users.username]');
        $this->form_validation->set_rules('password', 'Password', 'required|matches[passconf]');
        $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('welcome_message');
        }
        else
        {
            $this->load->view('formsuccess');
        }
    }
}

您是否在/application/config/database.php中配置了数据库参数?如果不是,您将无法通过验证,因为您已经添加到username参数的is_unique[users.username]规则。

我不确定在调用is_unique参数之前是否必须显式加载数据库类,因为我总是自动加载该类,但我怀疑你应该这样做。

编辑

挖掘系统文件。system/libraries/Form_validation.php在第954行有以下内容:

public function is_unique($str, $field)
    {
        list($table, $field)=explode('.', $field);
        $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
        return $query->num_rows() === 0;

这表明CI实例正在寻找数据库参数来进行检查,但是Form Validation库不加载database类本身,因此您应该自己在控制器中加载它,或者将其设置为自动加载。

替换username rule:

    $this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[users.username]');

使用这个规则:

$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]');

删除:

| is_unique[用户。用户名】