0

本のリストを含むページがあり、すべての行にチェックボックスがあります。(私は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);
    }

しかし、それは機能していません。
debug($this->data); を使用すると、リストの最後の書籍 ID のみが取得されることに気付きました。複数の本をチェックすると、0 または最後の本の ID が表示されます。次に例を示します。

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


解決済み:
ビューでは、Danial のコードを使用します。

コントローラーでは、次のコードを使用します。

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());
    }
4

2 に答える 2

2

ビューで:

<?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

于 2013-02-11T09:46:16.663 に答える
1

あなたは概念の問題を抱えています。

チェックボックスは入力タグであるため、フォーム内にある必要があります。したがって、これらの値をコントローラーに送信するには、そのフォームを送信する必要があります。あなたのコードでは、「すべて追加」は単なるリンクであることがわかります。また、リンクはフォームを送信しません。

リンクをボタンに変更してください:)

お役に立てれば

于 2013-02-11T10:13:23.587 に答える