0

我正在尝试使用活动记录更改密码代码。这很好,但我需要知道密码是否已成功更改或当前密码实际上是错误的。

我正在使用受影响的行来查看有多少记录受到影响。该值应该是 1 或 0,1 表示密码已成功更改,0 表示未更改(即输入的当前密码错误)。受影响的行永远不会返回超过 1,因为用户名是唯一的。所以它应该按照我接近它的方式工作。但它似乎不起作用,因为受影响的行函数总是返回 1。

这是代码 控制器:

function changepass() {
    $this->form_validation->set_rules('pass', 'Password', 'required|matches[passconf]|min_length[6]|max_length[12]');
    $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
    if ($this->form_validation->run() == false) {
        //if not valid
        $this->session->set_flashdata('message', validation_errors());
        redirect('profile');
    } else {
        //if valid
        $current = $this->input->post('current');
        $change = $this->input->post('pass');
        $id = $this->input->post('id');
        $flag = $this->profile_model->update_pass($current, $change, $id);
        if ($flag = true) {// If Successful
            $this->session->set_flashdata('message', $flag);
        } else { // If Unsuccessful
            $this->session->set_flashdata('message', 'Current Password is not valid');
        }
        redirect('profile');
    }
}

模型:

function update_pass($current,$change,$id) {
  $data = array('pass'=>$change);
  $this->db->where('id',$id);
  $this->db->where('pass',$current);
  $this->db->update('users',$data);
  return ($this->db->affected_rows());
}
4

4 回答 4

2

像这样改变你的模型

function update_pass($current, $change, $id) {
    $data = array('pass' => $change);
    $this->db->where('id', $id);
    $this->db->where('pass', $current);
    $this->db->update('users', $data);
    if ($this->db->affected_rows() > 0) {
        return true;
    } else {
        return false;
    }
}

并通过添加 '==' 而不是 '=' 来更改您的控制器 if 语句

if($flag == TRUE)// If Successful
{
    $this->session->set_flashdata('message', $flag);
}
于 2014-02-19T09:40:19.047 回答
0

May be its due to query caching.Turn of query caching for this particular query and try.

// Turn caching off for this one query 
  $this->db->cache_off();
  $data = array('pass'=>$change);
  $this->db->where('id',$id);
  $this->db->where('pass',$current);
  $this->db->update('users',$data);
  return ($this->db->affected_rows());
于 2013-06-11T07:08:49.850 回答
0
function update_pass($current, $change, $id)
{
  $data = array('pass'=>$change);
  $this->db->where('id',$id);
  $this->db->where('pass',$current);
  $this->db->update('users',$data);

  //comment the return
  //return ($this->db->affected_rows());

  // echo formatted last query
  echo '<pre>';
  echo $this->db->last_query();
  echo '</pre>';
  die();
 }

您确定您提供了正确的变量来进行更新吗?在您的模型上尝试此操作,然后在您的模型上进行测试,phpmyadmin或者打开profiler以查看正在运行的查询以及正在传递的参数。

或者你可以试试

var_dump($this->db->affected_rows());

看看它返回了什么。

于 2013-06-11T07:57:53.510 回答
-2

试试这个代码

function update_pass($current,$change,$id){
 $data = array('pass'=>$change);
 $this->db->where('id',$id);
 $this->db->where('pass',$current);
 $this->db->update('users',$data);
 $query = $this->db->affected_rows();
 if($query > 0){
    return true;
 }else{
    return false;
 }
}
于 2017-10-11T05:03:18.207 回答