我正在尝试使用ajax更改密码选项。这里我在控制器
中尝试了以下代码 if ($this->request->is(array('post', 'put'))){
$id=$this->Auth->user('id');
$changePass=$_POST['cpass'];
$cpasss=AuthComponent::password($changePass);
echo $cpasss;
$up=$this->User->updateAll(
array('User.password'=>"$cpasss"),
array('User.id'=>"$id")
);
}
这里哈希工作正常,我已经看过firebug但问题是这里密码没有在数据库中更新。如果我删除
$cpasss=AuthComponent::password($changePass);
然后密码更新正常但没有哈希。可能有人帮我解决这个问题吗?
答案 0 :(得分:0)
将您的代码更新为:
if ($this->request->is(array('post', 'put'))){
$id=$this->Auth->user('id');
$changePass= $this->request->data['cpass'];
$cpasss=AuthComponent::password($changePass);
$up=$this->User->updateAll(
array('User.password'=> $cpasss),
array('User.id'=> $id)
);
}
<强>更改强>:
$_POST[]
不是在cakephp中获取表单数据的正确方法。 "
)中。答案 1 :(得分:0)
此处无需使用updateAll()
。而只是使用save()
保存数据,并记住使用保存数据传递主键: -
if ($this->request->is(array('post', 'put'))) {
$id = $this->Auth->user('id');
$changePass = $this->request->data['User']['cpass'];
$data = array(
'id' => $id,
'password' => AuthComponent::password($changePass)
);
$this->User->save($data);
}
如果您使用updateAll()
,则需要谨慎使用,因为它不会逃避传递的字段。来自the docs: -
$ fields数组接受SQL表达式。文字值应该是 使用DboSource :: value()手动引用。