Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security cakephp和多个复选框_Security_Cakephp_Checkbox - Fatal编程技术网

Security cakephp和多个复选框

Security cakephp和多个复选框,security,cakephp,checkbox,Security,Cakephp,Checkbox,我不会对habtm做任何花哨的事 我想做的是在cakephp中设置多个复选框,并使用它们 因此,我认为有以下代码: <div class="deleteButton"> <?php echo $form->input('', array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'id'=

我不会对habtm做任何花哨的事

我想做的是在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中选择这个并提交时,我在控制器中只得到一个值: ... pr($this->data);

看起来cakephp正在以某种方式覆盖存储的值,因为我得到的一个值始终是最后选中的复选框值

我做错了什么

更新:哦,上帝,我讨厌cakephp

使用此选项:

或者更确切地说,这是: 输入($video['video']['id'],数组('type'=>'checkbox','value'=>$video['video']['id'],'label'=>false,'hiddenField'=>false,'multiple'=>true));?>

(我把$video['video']['id']作为第一个条目,显然是用于id的)

我的请求现在被cakephp在安全组件中的完全ridic黑洞屏蔽了。老实说,为什么404页面没有一个可切换的错误?现在我必须找出如何从中得到一个有意义的错误

欢迎任何意见

更新:已解决: 嗯,我需要的是:

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

也就是说,我用“video”和“id”包装了$video['video']['id']

NFI为什么这样做,任何人有任何想法,我都会认为你是对的

在$form->input()中,第一个参数是model.field。在第一种情况下,您没有指定字段,因此它们都进入$this->data['Videos'],而不是$this->data['Videos']['cb1'],$this->data['Videos']['cb2'],$this->data['Videos']['cb3']

即使使用模型创建表单:

$form->create('modelName')

指定字段也是一个好习惯:

$form->input('modelName.fieldname',array())input()中的code>

第一个参数是model.field。在第一种情况下,您没有指定字段,因此它们都进入$this->data['Videos'],而不是$this->data['Videos']['cb1'],$this->data['Videos']['cb2'],$this->data['Videos']['cb3']

即使使用模型创建表单:

$form->create('modelName')

指定字段也是一个好习惯:

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

看起来cakephp正在以某种方式覆盖存储的值,因为我得到的一个值始终是最后选中的复选框值

这不是蛋糕的错。。。如果有两个或多个输入具有相同的名称(在您的示例中为“data[Videos]”),php将仅使用最后一个值来创建$\u POST变量。。如果您执行以下操作,则类似于GET请求:

mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
                                                       'Value 2'=>'Label 2',
                                                       'Value 3'=>'Label 3'
                                                       ),
                                      'multiple' => 'checkbox'
        ));
您通过在字段名中添加视频id解决了此问题。因此,现在生成的html类似于:

mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
                                                       'Value 2'=>'Label 2',
                                                       'Value 3'=>'Label 3'
                                                       ),
                                      'multiple' => 'checkbox'
        ));
都在文件里;)

希望这有帮助

看起来cakephp正在以某种方式覆盖存储的值,因为我得到的一个值始终是最后选中的复选框值

这不是蛋糕的错。。。如果有两个或多个输入具有相同的名称(在您的示例中为“data[Videos]”),php将仅使用最后一个值来创建$\u POST变量。。如果您执行以下操作,则类似于GET请求:

mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
                                                       'Value 2'=>'Label 2',
                                                       'Value 3'=>'Label 3'
                                                       ),
                                      'multiple' => 'checkbox'
        ));
您通过在字段名中添加视频id解决了此问题。因此,现在生成的html类似于:

mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
                                                       'Value 2'=>'Label 2',
                                                       'Value 3'=>'Label 3'
                                                       ),
                                      'multiple' => 'checkbox'
        ));
都在文件里;)


希望这有帮助

如果我使用foreach php循环来创建复选框,或者至少我是这么做的,那么有没有一种优雅的方法来创建您建议的数组?也就是说,我不知道我需要多少复选框(这是一个删除此复选框,因此它取决于用户必须删除多少),因此我无法对您建议的数组进行预编码!您可以使用转换数组并在
input()
中使用它,或者-因为Set类对我来说太聪明了,太有用了-我可以在循环中创建数组(顺便说一句,我使用了我在问题中发布的解决方案-但这是理论上的星期二!),然后,在循环之外,只需运行您建议使用循环中的arrar作为输入的代码!如果我使用foreach php循环来创建复选框——或者至少,我就是这么做的——有没有一种优雅的方法来创建您建议的数组?也就是说,我不知道我需要多少复选框(这是一个删除此复选框,因此它取决于用户必须删除多少),因此我无法对您建议的数组进行预编码!您可以使用转换数组并在
input()
中使用它,或者-因为Set类对我来说太聪明了,太有用了-我可以在循环中创建数组(顺便说一句,我使用了我在问题中发布的解决方案-但这是理论上的星期二!),然后,在循环之外,只需运行您建议使用循环中的arrar作为输入的代码!