好吧,我正在尝试使用活动记录更改密码。这工作正常,但我需要知道密码是否成功更改或当前密码是否实际上是错误的。 所以,我使用受影响的行来查看有多少记录受到影响。成功更改密码时,该值应为1或0;如果未更改密码,则该值应为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());
}
答案 0 :(得分: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);
}
答案 1 :(得分:0)
可能是由于查询缓存。转换此特定查询的查询缓存并尝试。
// 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());
答案 2 :(得分: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());
看看它的回归。
答案 3 :(得分:0)
试试这段代码
Blocked a frame with origin "http:/xxx.com" from accessing a cross-origin frame.