表单提交错误

时间:2014-06-10 15:34:58

标签: php codeigniter

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

 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');
        }

    }
}

2 个答案:

答案 0 :(得分:0)

您是否在/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实例正在查找要进行检查的数据库参数,但是表单验证库本身并不加载数据库类,因此您应该自己将其加载到控制器中,或者将其设置为自动加载。

答案 1 :(得分:0)

只需替换用户名规则:

    $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 [users.username]