0

私は現在 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>

どうもありがとう。

4

3 に答える 3

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) を使用してください。

于 2012-12-12T17:04:09.110 に答える
1

$id編集するユーザーを指定する必要があります。この場合、自分のプロファイルを編集できるのは 1 人のユーザーのみであるため、コントローラーで行います。

public function edit() {
    $this->User->id = this->Session->read('Auth.User.id');
    //whatever...
}

編集ビューを使用していて、$id がパラメーターで渡されている場合は、その必要さえありません。次のようにフォームを作成するだけで、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')));
于 2012-12-12T16:36:53.487 に答える
0

フォームに含めることもできます。デフォルトでは、id フィールドはフォームで非表示になります。セッションで行う方が安全ですが、管理機能に対してこの方法で行うか、保存する前に確認することができます。

 echo $this->Form->input('User.id');
于 2012-12-12T16:47:16.407 に答える