如何在cakephp中更新记录

时间:2010-08-29 18:15:53

标签: php cakephp

这是编辑的代码

function edit($id){

    if(!empty($this->data)) {
        if($this->Article->save($this->data)) {
            pr($this->Article);
            $this->Session->setFlash("Article Saved!");
            $this->redirect('/articles/view');        
            }    
    }
    else    
        $this->data = $this->Article->findByArticleId($id);

}

和视图

<?php 
echo $form->create('Article', array('type' => 'post','action'=>'edit')); 
?>

<table>
<tr><td>Edit Article</td></tr>
<tr><td>Title: </td><td><?php echo $form->text('article_title',array('label'=>false,'type'=>'text','size'=>50)); ?></td></tr>
<tr><td>Text: </td><td><?php echo $form->textarea('article_text',array('label'=>false,'class'=>'ckeditor','columns'=>100,'row'=>8,'width'=>100));?></td></tr>
<tr><td>Published: </td><td><?php echo $form->radio('article_published',array('1'=>'Yes','0'=>'No'),array('legend'=>false));?></td></tr>
</table>
<?php echo $form->end('Save'); ?>

问题是它总是添加新记录而不是更新当前记录。我该如何解决?

1 个答案:

答案 0 :(得分:10)

插入新记录的原因是CakePHP方法不知道您正在编辑的记录的ID。基本上,当传递给save()方法的数据不包含记录ID或表中不存在ID时,save()将插入新记录而不是更新现有记录。

解决此问题的常用方法是在表单中添加echo $form->input('id');。这将添加一个隐藏字段,其中包含正在编辑的记录的ID到表单。此时启用security component将是一个好主意,因为它可以帮助您防止篡改表单数据。