【问题标题】:Unable to change value at edit time with codeIgniter validation无法使用 codeIgniter 验证在编辑时更改值
【发布时间】:2017-07-04 06:50:55
【问题描述】:

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

现在在编辑时,我正在使用 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() ) {

有错误的快照

我需要你的努力。谢谢

【问题讨论】:

标签: php codeigniter validation


【解决方案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 文件路径系统/库/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;

    }

【讨论】:

  • 请再问您一个问题
  • 假设,我们有两个用户,他们有不同的 id。如果一个用户的类别名为“学生”。那么第二个用户不能用“学生”名字编辑任何类别..!为什么 ?用户 ID 总是不同的 na
  • 好的,我知道你的问题了,你也可以在 edit_unique 函数上传递 user_id,category id
  • 好的,两个用户在这里( dev,sonu ),他们的 id(s) 是 (5,6) 。现在开发人员创建了一个名为“学生”的类别。现在 sonu 尝试使用“student”创建或编辑类别名称,但它不能。类别必须是唯一的,但仅适用于单个用户,而不是每个用户。现在,明白了吗?
  • 传递 user_id 值并检查 where 子句 user_id=$user_id
【解决方案2】:

检查类别名称已经在数据库中。

 $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);

【讨论】:

  • 你明白我的问题吗?
  • 我已经编辑了代码。将您的新类别名称发布到变量并检查表中的天气新类别名称
  • 但我们还需要检查要求更改其类别名称的用户 ID。
  • 我们有两个用户,他们的 id 不同。如果一个用户的类别名为“学生”。那么第二个用户不能编辑任何具有“学生”名称的类别..!
  • 检查get_where查询中的类别名称和userId
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多