我目前正在使用CAKEPHP 2.3,我正在尝试编辑用户的信息。但是当我提交信息时,它不会将信息更新到数据库中。它改为创建一个新用户,并插入新信息。我想让它更新用户,而不是创建一个新用户。
我的edit.ctp代码是:
<h1>Edit Account information</h1>
<?php
echo $this->Form->create('User', array('action' => 'edit'));
echo $this->Form->input('username', array('value' => $this->Session->read('Auth.User.username')));
echo $this->Form->input('name', array('value' => $this->Session->read('Auth.User.name')));
echo $this->Form->end('Submit');
?>
然后我在用户控制器中的编辑功能是:
public function edit() {
// debug($this->User->save($this->request->data));
$this->User->id = $this->Session->read('Auth.User.id');
$this->request->data['User']['id'];
if ($this->request->is('post')) {
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The User has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
}
} else {
$this->request->data = $this->User->read(null);
isset($this->request->data['User']['password']);
}
}
这是进入编辑用户页面的索引。
<h1>Users Home</h1>
<p>Welcome <?php print $this->Session->read('Auth.User.name');?> <br/></p>
<table border="0" width="200" text-align="center">
<tr>
<td width="50"><?php echo $this->Html->link('Log out', array('action' => 'logout')); ?></td>
<td width="50"><?php echo $this->Html->link('Edit', array('action' => 'edit')); ?></td>
<td width="50"><?php echo $this->Html->link('Add User', array('action' => 'add')); ?></td><!-- should only show for admin -->
<td width="50"><?php echo $this->html->link('Manage Users', array('action' => 'usermanage')); ?></td><!-- should only show for admin -->
</tr>
</table>
非常感谢。
答案 0 :(得分:1)
您必须指定要编辑的用户的$id
。在这种情况下,由于只有一个用户可以编辑自己的配置文件,我们在控制器上执行此操作:
public function edit() {
$this->User->id = this->Session->read('Auth.User.id');
//whatever...
}
如果您在编辑视图中并且$ id由param传递,您甚至不需要这样做,只需创建这样的表单,CakePHP将自动生成编辑操作的表单:
echo $this->Form->create('User');
此外,您的输入似乎有误,您不需要options
变量:
echo $this->Form->input('username', array('value' => $this->Session->read('Auth.User.username')));
echo $this->Form->input('name', array('value' => $this->Session->read('Auth.User.name')));
答案 1 :(得分:1)
在您的编辑方法中丢失$ id。通常用户只能 - 而且只有他自己 - 编辑自己的记录。
public function edit() {
if ($this->request->is('post')) {
$this->request->data['User']['id'] = $this->Session->read('Auth.User.id');
if ($this->User->save($this->request->data)) {
...
您的表单和value
错误。从不使用它。它会破坏帖子和验证错误的形式(请参阅http://www.dereuromark.de/2010/06/23/working-with-forms/了解“为什么” - 如果您确实需要,还可以找到如何设置默认值。)
因为您通过$this->request->data
传递数据,所以您需要保留原样:
echo $this->Form->input('username');
也失去了行动。表格会自动发布到自己!
最后但并非最不重要的是不要使用read(),请使用find(first)
答案 2 :(得分:0)
您也可以将其包含在表单中。默认情况下,id字段将隐藏在表单中。使用会话这样做更安全,但您可以通过这种方式为管理功能执行此操作,或在保存之前对其进行验证。
echo $this->Form->input('User.id');