【问题标题】:Codeigniter: Firm unique validation not workingCodeigniter:公司唯一验证不起作用
【发布时间】:2014-01-22 12:32:41
【问题描述】:

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

我也尝试过is_usnique,但它不允许修改数据,因为它认为表单值存在。

表名是positions
列名是position
输入字段名称为position

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

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'
        ),                                               

    );

但无论我做什么,它都不起作用并添加记录,即使它存在于表中。

谁能帮我解决这个问题?非常感谢。

【问题讨论】:

  • 你不需要回调,因为codeigniter已经有函数了。
  • 您能否提供一些参考代码或任何参考链接以查看如何锻炼?
  • 你有没有试过在`rules中使用is_unique['table_name'.'field_name']
  • @fawwaz 我已经尝试过了,但它也在验证编辑表单,这不好。由于那甚至无法修改数据

标签: php codeigniter callback


【解决方案1】:

你缺少参数

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]

【讨论】:

  • 感谢您的快速回复。但是它将如何考虑_unique_poscode 中的is_unique
  • 它仍然添加行?请解释一下:我也尝试过 is_usnique 但它不允许修改数据,因为它考虑到表单值存在。请编辑并添加处理此问题的方法。
  • 是的,它仍在callback_ 之后添加行。我的意思是,如果我使用is_unique,它会在编辑表单上考虑相同的内容,因此它甚至不允许修改数据。回调函数用于在编辑模式下忽略验证
【解决方案2】:

只需将此添加到规则并检查。

is_unique[TABLENAME.COLUMNNAME]

根据你的应该是,

is_unique[positions.position]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2016-09-11
    相关资源
    最近更新 更多