我有一个像下面的控制器,我用来注册,但每次提交表单时我都会看到这个错误:
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');
}
}
}
答案 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]