2010-08-29 4 views
3

это код для редактированиякак обновить запись в 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'); ?> 

проблема всегда добавляет новую запись вместо обновления текущей записи. как я могу это исправить?

ответ

10

Причина, по которой вставлена ​​новая запись, заключается в том, что метод CakePHP не знает идентификатор записи, которую вы редактируете. В основном, когда данные, переданные в метод save(), не содержат идентификатора записи, или идентификатор не существует в таблице, save() вставляет новую запись вместо обновления существующей.

Обычный способ крепления это будет добавление echo $form->input('id'); к форме. Это добавит скрытое поле с идентификатором редактируемой записи в форму. В этот момент можно было бы дать security component, так как это поможет вам предотвратить фальсификацию данных формы.

+0

У меня такая же проблема и у меня много волосков. Спасибо за объяснение. – Emerald214

+0

Это настоящая проблема с cakephp (нет реальной документации). http://api.cakephp.org/class/model#method-Modelsave –

+0

@Mike ...... спасибо yaarrr..и действительно полезно для меня также ....... –