我正在尝试使用活动记录更改密码代码。这工作正常,但我需要知道密码是否已成功更改或当前密码实际上是错误的。
我正在使用受影响的行来查看受影响的记录数。该值应为 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());
}
像这样更改模型
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);
}
由于查询缓存。轮到此特定查询的查询缓存并尝试。
// 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());
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());
看看它返回了什么。
试试这段代码
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;
}
}