2013-02-11 110 views
0

我有一個包含書籍列表的頁面,每一行都有一個複選框。 (我使用cakephp 1.2)。
我想讓用戶保存多本書。
現在我有這個複選框,在我看來,(在一個週期內,在那裏我得到的所有書籍列表):帶有cakephp 1.2的多個複選框

<?php echo $form->input('salva', array('value' => $cdBiblio['CdBiblio']['codiceBiblio'], 'label' => '', 'type' => 'checkbox')); ?> 

這種形式:
<?php echo $form->create('cd_biblios', array('action' => 'save')); ?>

,這個按鈕:

<?php echo $form->end('Add All');?> 

在控制器中,我有這樣的調試:

debug($this->data); 
    foreach($this->data['cd_biblios']['salva'] as $item) { 
     debug($item); 
    } 

但它不工作。
我注意到它只用調試($ this-> data)列表中最後一個book id;如果我檢查超過1本書,它顯示0或最後一本書ID,例如:

Array (
[cd_biblios] => Array 
    (
     [salva] => 0 
    )) 


解決:
在我用丹尼爾的代碼視圖。

在控制器中我使用此代碼:

if(!empty($this->data)) {    
     $item=$this->data; 
     debug($item); 
     $dim=count($item['Model']['field']); 
     $i=0; 
     for ($i=0;$i<$dim;$i++)   
      if ($item['Model']['field'][$i]!=0) 
      { 
       $data = $this->Session->read('libri'); 
       $data[] = $item['Model']['field'][$i]; 
       $this->Session->write('libri', $data); 
      } 
     $this->Session->setFlash(__('I libri sono stati salvati', true)); 
     $this->redirect($this->referer()); 
    } 

回答

2

在View:

<?php 
foreach($array as $each_elem) { 
echo $form->checkbox(
     'Model.field', 
     array(
       'id'=>'abcd_'.$each_elem['Model']['id'], 
       'value' => $each_elem['Model']['id'], 
       'hiddenField' => false, 
       'name' => 'data[Model][field][]', 
       'label' => false, 
       'div' => false, 
     )); 
} 
?> 

在提交表單,你會得到$this->request->data

+0

我越來越接近你的代碼:控制器我有$這個 - >數據,是所有書籍陣列(如果未選中,則爲0,如果選中,則爲id),如何循環? – Ettore 2013-02-11 14:02:21

1

你在控制器中的檢查值一個概念問題。

您的複選框必須在表單內,因爲它們是輸入標籤。因此,要將這些值發送給控制器,您需要提交該表單。在你的代碼中,我看到「全部添加」只是一個鏈接。並且鏈接不會提交表單。

更改您鏈接到一個按鈕:)

希望這有助於

+0

你是對的,我編輯了這個問題。 – Ettore 2013-02-11 10:45:25