2015-06-15 96 views
2

我有一個非常惱人的問題。通過點擊「更新」按鈕,我總能得到相同的結果 - 只有最後一個元素被編輯。不幸的是我找不到解決方案。謝謝你的幫助。Zend Framework 1更新操作

這是視圖部分:

<form id="edit-action" enctype="multipart/form-data" action="<?php echo $this->baseUrl; ?>/admin/editflight" method="post"> 
    <?php 
     for ($i=0; $i < count($this->flight); $i++) { 
      echo "<div class='edit-action-box'>". 
        "<input type='hidden' name='id' value='".$this->flight[$i]->id."' />". 
        "<input type='text' name='name' value='".$this->flight[$i]->name."' />". 
        "<input type='text' name='date' value='".$this->flight[$i]->date."' />". 
        "<textarea name='description'>".$this->flight[$i]->description."</textarea>". 
        "<input id='edit-button' type='submit' value='Edit' />". 
       "</div>"; 
      } 
    ?> 
</form> 

這是控制器部分:

function editflightAction() { 

    if ($this->_request->isPost()) { 
     Zend_Loader::loadClass('Zend_Filter_StripTags'); 
     $filter = new Zend_Filter_StripTags(); 
     Zend_Loader::loadClass('flight'); 
     $flight = new flight(); 

     $id = (int)$this->_request->getPost('id'); 

     $name = $filter->filter($this->_request->getPost('name')); 
     $name = trim($name); 

     $date = $filter->filter($this->_request->getPost('date')); 
     $date = trim($date); 

     $description = $filter->filter($this->_request->getPost('description')); 
     $description = trim($description); 

     $data = array(
      'name' => $name, 
      'date' => $date, 
      'description' => $description, 
     ); 
     $where = 'id = ' . $id; 
     $flight->update($data, $where); 

     $this->_redirect('/admin/panel#flight'); 
     return; 
    } 
} 

回答

1

首先,你必須糾正你的HTML。添加索引以形成元素。

例如, "<input type='text' name='name' value='".$this->flight[$i]->name."' />"變爲"<input type='text' name='name[" . $i . "]' value='".$this->flight[$i]->name."' />"

然後在您的控制器中創建循環for ($i=0; $i < count($this->flight); $i++) {以訪問索引後的數據。

+0

翻了一番。 :)你也可以爲計數器的值添加一個隱藏字段(count($ this-> flight)) – doydoy44

+0

它總是返回相同的'id'(最後一個id),這就是爲什麼只有最後一項被修改。 – Peter