【问题标题】:Codeigniter Form Validation is_unique on UpdationCodeigniter 表单验证 is_unique 更新
【发布时间】:2017-04-26 06:30:11
【问题描述】:

我正在开发与域相关的网站的管理面板,我有不同的场景。 更新数据时如何检查我的域名的唯一性。就像我添加数据时它工作正常。

$this->form_validation->set_rules('domain_name','Domain 名称','必填|is_unique[domains.domain_name]',array('is_unique' => '这个 %s 已经存在。'));

但是当我要更新记录时,我很困惑怎么可能。

如果管理员单击编辑域数据并且他不想更改域名但他想在单击更新按钮时更新任何其他字段它显示该域名已存在的错误。

我的问题是,如果管理员想在不更改域名的情况下更新表单,是否有可能在更新表单时,它不应该显示唯一错误.....但是如果他更改了域名,那么它应该检查唯一性。 我有不同的表格来添加和更新域数据。

我该如何解决这个问题。谁能帮忙???

【问题讨论】:

  • 我们可以使用 ajax 来做到这一点......尝试使用 ajax......
  • 接受答案..

标签: forms codeigniter validation


【解决方案1】:

编辑表单时将实际值存储在隐藏字段中,当您点击更新字段时,检查隐藏字段值和文本字段值,如果它们相同则不要应用这样的条件

if($this->input->post("actual_value")==$this->input->post("updated_textfield_value")){
    $this->form_validation->set_rules('domain_name','Domain Name','required');
}else{
    $this->form_validation->set_rules('domain_name','Domain Name','required|is_unique[domains.domain_name]',array('is_unique' => 'This %s already exists.'));
}

【讨论】:

  • 感谢 Rajat 有帮助
【解决方案2】:

此解决方案允许您清除列名,如 columnID 在 application\libraries\MY_Form_validation.php 中创建自定义验证类

class MY_Form_validation extends CI_Form_validation
{
    public function __construct($rules = array())
    {
        $this->CI =& get_instance();
        parent::__construct($rules);
    }

    public function edit_unique($str, $field)
    {
        sscanf($field, '%[^.].%[^.].%[^.].%[^.]', $table, $field, $columnIdName, $id);
        return isset($this->CI->db)
            ? ($this->CI->db->limit(1)->get_where($table, array($field => $str, $columnIdName .'!=' => $id))->num_rows() === 0)
            : FALSE;
    }
}

将此添加到 system\language\english\form_validation_lang.php

$lang['form_validation_edit_unique']= 'The supplied value is already taken.';

在你的控制器中使用

$id = $this->uri->segment(3);
'rules' => 'trim|required|max_length[50]|edit_unique[mytable.mycolumn.columnID.'.$id.']'

【讨论】:

    【解决方案3】:

    我自己也遇到了这个问题。我的解决方案是扩展表单验证库并稍微修改原始 is_unique 方法,添加另一个 'where' 子句以排除 self。

    在控制器中:

    $id = $this->uri->segment(3);
    
    $this->form_validation->set_rules('domain_name', 'Domain Name', 'update_is_unique[domains.domain_name.'.$id.']', 
        array('update_is_unique' => 'This {field} already exists.'));
    

    在库/MY_Form_validation.php 中

    class MY_Form_validation extends CI_Form_validation {
    
        public function __construct()
        {
            $this->CI =& get_instance();
        }    
    
        public function update_is_unique($str, $field)
        {
            sscanf($field, '%[^.].%[^.].%[^.]', $table, $field, $id);
            return $this->db->limit(1)->get_where($table, array($field => $str, 'id !=' => $id))->num_rows() === 0;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2013-03-17
      相关资源
      最近更新 更多