使用codeIgniter验证无法在编辑时更改值

时间:2017-07-04 06:50:56

标签: php codeigniter validation

这里我有一个类别列表,用户可以添加新类别以及编辑它们。

现在在编辑时我使用codeigniter进行服务器端验证以减少冗余。但问题是,每当我编辑现有类别时,它都无法更新它,因为它与原始值进行比较,这是错误的。我尝试了很多次但无法解决这个问题。

这是我的代码

public function category_upd()
{
    extract($_POST);
    $userId = $this->session->userdata('id');
    $original_value = $this->db->query("SELECT cat_name FROM category WHERE user_id=".$userId." and  cat_name ='".$_POST['cat_name']."'") ;

    $original_value  = $original_value->result_array();
    $original_value = $original_value[0]['cat_name'];

    $original_value2 = $this->db->query("SELECT cat_name FROM category WHERE user_id=".$userId." and  cat_name ='".$_POST['cat_name']."'") ;

    $original_value2  = $original_value2->result_array();

    $original_value2 = $original_value2[0]['cat_name'];

    if(ucwords($_POST['cat_name']) != $original_value) {
        $this->session->set_flashdata('cat_failed','Category must be unique.');
        $is_unique =  '|is_unique[category.cat_name]';
    } else if(ucwords($original_value2 == "")){

        echo "go";
        exit;

        $this->session->set_flashdata('cat_failed','Category must be unique.');
        $is_unique =  '|is_unique[category.cat_name]';
    } else {
        $is_unique =  '';
    }
    $this->form_validation->set_rules('cat_name','Category','trim|required'.$is_unique);
    if($this->form_validation->run() ) {

有错误的快照

enter image description here

我需要你的努力。感谢

2 个答案:

答案 0 :(得分:1)

  

像这样设置验证规则,您需要传递类别ID值

 $this->form_validation->set_rules('cat_name', 'cat_name', 'required|trim|edit_unique[category.category_name.' . $_POST['category_id'].'.'.$_POST['user_id']. ']', array('edit_unique' => 'Category must be unique.'));
  

并在Form_validation.php上开发了一个函数edit_unique   Filepath system / libraries / Form_validation.php

 public function edit_unique($str, $field)
    {

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

    }

答案 1 :(得分:1)

在数据库中检查类别名称是否已更改。

 $newcategoryName=$this->input->post('category');
    $query = $this->db->get_where('category', array('cat_name' => $newcategoryName,'user_id' => $userId));
    $val=$query->result_array();
    $original_value = $val[0]['cat_name'];
            if($newcategoryName != $original_value) {
               $is_unique =  '|is_unique[users.EMAIL]';
            } else {
               $is_unique =  '';
            }
    $this->form_validation->set_rules('cat_name', 'Category', 'required|trim|xss_clean'.$is_unique);