2012-01-12 16 views
0

私はhabtmで何も気にしません。cakephpと複数のチェックボックス

私がしようとしているのは、cakephpに複数のチェックボックスがあり、それを使用することです。

だから私は、私の見解では、このコードを持っている:

<div class="deleteButton"> 
    <?php echo $form->input('', array('type'=>'checkbox', 
    'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 
    'id'=>false, 'multiple'=>true)); ?> 
</div> 

、これはレンダリングされたページで私は、このHTMLを与える:

<input type="checkbox" value="30" name="data[Videos]"> 
<input type="checkbox" value="31" name="data[Videos]"> 
<input type="checkbox" value="32" name="data[Videos]"> 

、私はHTMLでこれを選択して送信するときに、私はコントローラの1つの値を得る: ... pr($ this-> data); ...

私が得た値は常に最後にチェックされたチェックボックスの値なので、cakephpは何とか記憶された値を上書きしているようです。

私は間違っていますか?

UPDATE:http://nuts-and-bolts-of-cakephp.com/2008/05/05/multiple-checkboxes/

というか、この:: 入力($ビデオ[ '動画'] [ 'ID']、配列( 'タイプ':ああ、神様、私はこれを使ってCakePHPの

を憎みます=> 'checkbox'、 'value' => $ video ['Video'] ['id']、 'label' => false、 'hiddenField' => false、 'multiple' => true)); ?>

(私は$のビデオを作った[「動画」] [「ID」]どうやら、IDにある最初のエントリ、)

私の要求は今ブラックホールでCakePHPの完全ridicブラックホールでありますセキュリティコンポーネント。正直なところ、404ページには切り換え可能なエラーがないのはなぜですか?今私はそれから意味のあるエラーを取得する方法を見つけ出す必要があります...

どのようなアイデアも大歓迎です!

UPDATE:解決しよう: えっ、代わりに私が必要:

<?php echo $form->input("Video".$video['Video']['id']."id", array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'multiple'=>true)); ?> 

であることを、私は "ビデオ" および "ID" で$ビデオ[ '動画'] [ 'ID']を包ん。

NFIなぜこの作品は、誰もが任意のアイデアを持って、私はあなたの右にマークします!

答えて

4

が見えますなぜなら、私が得る1つの値は、常に最後にチェックされたチェックボックスの値です。

同じ名前を持つ2つ以上の入力があれば、それは、PHPが唯一の$ _POST変数を作成するために、最後の値を使用します(あなたのケースでのデータ[動画] ')...ケーキのせいではなかったですGETリクエストのように:

mysite.com/intex.php?attr=1&attr=2&attr=3 

あなたはフィールド名にビデオIDを追加して解決しました。あなたが見ることができるように、今、すべての入力名が異なっていて、何も上書きされません取得し

<input type="checkbox" value="30" name="data[Videos1]"> 
<input type="checkbox" value="31" name="data[Videos2]"> 
<input type="checkbox" value="32" name="data[Videos3]"> 

:だから今生成されたHTMLのようなものです。

しかし、自分で名前を付ける代わりに、 'multiple'オプションと 'options'オプションを使用して、1つのステートメントのみを使用してすべてのチェックボックスを作成することができます。ような何か:

echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1', 
                 'Value 2'=>'Label 2', 
                 'Value 3'=>'Label 3' 
                 ), 
             'multiple' => 'checkbox' 
     )); 

それは、ドキュメント内のすべてのです;)

希望私は、チェックボックスを作成するためのforeach PHPのループを使用している場合、これは

+0

を助けます - あるいは少なくとも、それは私がやっていたものです - あなたが提案した配列を作成するエレガントな方法はありますか?つまり、どのくらいの*チェックボックスが必要なのか分かりません(このチェックボックスを削除すると、削除するユーザーの数に依存します)ので、提案した配列をプリコードすることはできません! – bharal

+0

Setクラス(http://book.cakephp.org/complete/1487/Set)を使用して配列を変換し、 'input() ' – pleasedontbelong

+0

ORで使用することができます。これは、Setクラスがあまりにも多いためです私にとって役に立つよりも賢い - 私はちょうど*ループ*(btw、私は質問に投稿されたソリューションと一緒に行った - しかし、それは理論的な火曜日です!)を作成することができますし、ループの外で、ループ*からのarrarを入力として使用することをお勧めします! – bharal

0

$ form-> input()の最初のパラメータはmodel.fieldです。 $ this-> data ['Videos']の代わりに、$ this-> data ['Videos'] ['cb1']、$ this-> data ['Videos' '] [' cb2 ']、$ this-> data [' Videos '] [' cb3 ']。

も、あなたはモデルとフォームを作成:

$form->create('modelName'));

、あまりにもフィールドを指定するのは良い習慣です:CakePHPが格納されている値を上書きしているよう

$form->input('modelName.fieldname', array());