我在cakephp中更新数据库表时遇到问题... 所以我有一个个人资料页面,登录用户可以在其中查看和更新他的个人信息。这是我的解决方案(是的,我知道这不是最好的......)
if($this->request->is('post')) {
$data = $this->request->data['user-profile'];
// $uid = $this->Session->read("WebUser.id");
$uid = 1;
$user_data = $this->WebUser->find('first', array('conditions'=>array('id'=>$uid)));
$updated_fields = '';
foreach($data as $key => $value) {
if($key != 'state'){
if(empty($value)) {
$this->Session->setFlash("Please fill in all the required fields");
return;
}
}
if($user_data['WebUser'][$key] != $value) {
if($key == 'email') {
$mail_check = $this->WebUser->find('first', array('conditions'=>array('email'=>$value, 'id !='=>$uid)));
if($mail_check) {
$this->Session->setFlash("This e-mail is already registered");
return;
}
}
$updated_fields .= "'".$key."'=>'".$value."',";
}
}
if($updated_fields != '') {
$updated_fields .= "'modified'=>'".date("Y-m-d H:i:s")."'";
$this->WebUser->read(null, $uid);
$this->WebUser->set(array('first_name'=>'John','modified'=>'2014-12-30 10:53:00'));
if($this->WebUser->save()) {
$this->printr($this->data);
$this->WebUser->save();
$this->Session->setFlash("Success : Profile data is now modified", array("class"=>"success_msg"));
} else {
$this->Session->setFlash("Error : Data modifying isn't complete. Please try again!");
}
}
return;
}
因此,此代码从数据库中提取用户信息,并查找在配置文件页面上编辑的字段。问题是,当我想保存数据时,它会让我回复错误并且没有保存...有人有解决方案吗?
答案 0 :(得分:0)
尝试推杆 $这 - > WebUser-> validationErrors; in else part并检查是否有任何验证错误。
像这样:
if($this->WebUser->save()) {
$this->printr($this->data);
$this->WebUser->save();
$this->Session->setFlash("Success : Profile data is now modified", array("class"=>"success_msg"));
} else {
echo "<pre>";print_r($this->WebUser->validationErrors);die();
$this->Session->setFlash("Error : Data modifying isn't complete. Please try agin!");
}
答案 1 :(得分:0)
您是否尝试过设置id
directly?
$this->WebUser->id = $uid;
此外,CakePHP会在任何事务后自动更新表中的modified
字段。所以你不必直接设置它(但如果你想要任何其他日期值,你可以。)
关于验证。我建议您阅读CakePHP中的 Data Validation ,因为验证效果不佳,可以由模型处理。
另外。您可以使用Model::$validationErrors
从模型中获取任何验证错误。
debug($this->Recipe->validationErrors);
答案 2 :(得分:0)
这段代码的问题是不想保存发布的数据(调试($ this-&gt; WebUser-&gt; save)给了我错误)。最后,我没有找到解决方案,为什么这段代码不起作用,但结论是你永远不需要使用更多的用户表而不是一个。所以现在我有一个用户和组表,并且不同类型的用户连接到他们的组(Admin,User,...)。