Codeigniter:公司独特的验证不起作用

时间:2014-01-22 12:32:42

标签: php codeigniter callback

我已经尝试了几乎所有知识并在网上找到但没有任何作用。我想要做的是在添加新记录时我想检查字段值是否已经在数据库表中。如果不是添加else throw错误消息。

我也尝试使用is_usnique但是它不允许修改数据,因为它正在考虑表单值是否存在。

表名是职位
Coloumn名称是位置
输入字段名称为位置

我在控制器中尝试了以下代码

public function _unique_poscode()
{        
    $id = $this->uri->segment(4);
    $this->db->where('position', $this->input->post('position'));        
    !$id || $this->db->where('id !=', $id);
    $poses = $this->positions_model->get();

    if (count($poses)) {
        $this->form_validation->set_message('_unique_poscode', '%s should be uinique');
        return FALSE;   
    }

    return TRUE;
}

并在我的模型中设置规则如下

public $rules               =   array(        
    'position' => array(
            'field' => 'position',
            'label' => 'Position Code',
            'rules' => 'trim|required|max_length[10]|callback__unique_poscode|xss_clean'
        ),
    'label' => array(
            'field' => 'label',
            'label' => 'Position Label',
            'rules' => 'trim|required|max_length[50]|xss_clean'
        ),                                               

    );

但无论我做什么,它都无法正常工作并添加记录,即使它存在于表格中。

任何人都可以帮我解决这个问题吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

你缺少参数

public function _unique_poscode( $p )
{        

    $this->form_validation->set_message('_unique_poscode', '%s should be uinique');
    $q = $this->db->get_where('positions', array('position' => $p));
    return ($q->num_rows() > 0) ? TRUE : FALSE;   

}

和规则

...|callback__unique_poscode|trim


以及如何通过codeigniter完成规则,请参阅more

is_unique[table.column]

答案 1 :(得分:0)

只需将其添加到规则并进行检查。

is_unique[TABLENAME.COLUMNNAME]

根据你应该的那个,

is_unique[positions.position]