即使满足规则,codeigniter表单验证也始终返回false

时间:2015-05-30 13:48:20

标签: forms codeigniter validation submit

问题:即使我的表单字段符合规则,codeigniter表单验证仍会返回false(错误)。

示例:

   public function edit(){
    $this->load->library('form_validation');

    $this->form_validation->set_rules('title', 'title', 'required|xss_clean|trim|is_unique[news.Title]');
    $this->form_validation->set_rules('description', 'description', 'required|xss_clean|trim');
    $this->form_validation->set_rules('notes', 'notes', 'required|xss_clean|trim');

    if ($this->form_validation->run() == FALSE)
    {
        $data['error'] =  '';
        $data['page_title']="Edit News";
        echo "error";

    }
    else {
    ..........

如果我把字段留空,它会告诉我输入一些东西,因为它们不能留空。如果我输入内容,那么一旦我提交表单就会返回错误。

2 个答案:

答案 0 :(得分:1)

你必须使用回调验证功能

你必须传递id

$this->form_validation->set_rules('title', 'Title', 'required|xss_clean|trim|callback_check_title');

function check_title($title) {        
    if($this->input->post('id'))
        $id = $this->input->post('id');
    else
        $id = '';
    $result = $this->news_model->check_unique_title($id, $title);
    if($result == 0)
        $response = true;
    else {
        $this->form_validation->set_message('check_title', 'Title must be unique');
        $response = false;
    }
    return $response;
}

在模型中

function check_unique_title($id, $title) {
    $this->db->where('title', $title);
    if($id) {
        $this->db->where_not_in('id', $id);
    }
    return $this->db->get('news')->num_rows();
}

它适用于插入和更新

答案 1 :(得分:1)

无需回调功能

问题是:没有加载codeigniter数据库类; 你应该加载数据库:$ this-> load-> database();在跑步之前

if ($this->form_validation->run() == FALSE)
{
    $data['error'] =  '';
    $data['page_title']="Edit News";
    echo "error";

}