【问题标题】:CakePHP: Create array of checkboxes and update field based on whether it's setCakePHP:创建复选框数组并根据是否设置更新字段
【发布时间】:2017-09-21 17:22:06
【问题描述】:

我不确定我所要求的是否可行,但情况如下:

我有一个 foreach() 循环,它以 HTML 格式返回一些值:

<?php foreach($stuff as $s) { ?>
 <tr>
    <td><?php echo $s['Model']['data']; ?> </td>
 </tr>
<?php } ?>

我需要做的是在每个$s['Model']['data'] 旁边放一个复选框,最好以$s['Model']['data'] 作为标签,并且能够根据是否选中该框在表格中设置一个值。所以,我的edit.ctp 看起来像这样:

<?php foreach($stuff as $s) { ?>
 <tr>
    <td><?php echo $this->Form->input('flag', array('type'=>'checkbox, 'default'=>'', label=>' $s['Model']['data']', 'value'=>1 )); ?> </td>
 </tr>
<?php } ?>

我可以毫无问题地显示以上内容。我的问题是,如果选中了标签框,我不知道如何告诉我的控制器更新必要的字段。这是我的第一次尝试:

if($this->request->save($this->request->data)) {
    foreach($stuff as $s) {
        $this->Model->id = $s['Model']['id'];
        if(isset($this->request->data['FormName']['flag'])) {
            $this->Model->set('flag', 1);
            $this->Model->save('flag', true);
        }
    }
} 

运行时没有错误,但没有任何反应。我需要更新的模型中的flag 字段仍然= 0。我可以调试$stuff 并查看数据,所以我知道它在那里。我也知道我的编辑函数正在执行 foreach() 循环。我可能会错过什么?我是否需要为复选框分配不同的值或检查它是否以其他方式设置?

【问题讨论】:

    标签: php cakephp checkbox


    【解决方案1】:

    似乎您需要通过修改每个复选框的名称来将每个复选框标识为当前项目,否则它将只使用所有项目的最后一个复选框的值。

    <?php foreach($stuff as $i => $s) { ?>
     <tr>
        <td><?php echo $this->Form->input('flag'.$i, array('type'=>'checkbox, 'default'=>'', label=>' $s['Model']['data']', 'value'=>1 )); ?> </td>
     </tr>
    <?php } ?>
    

    然后在控制器中寻找那个特定的标志

    if($this->request->save($this->request->data)) {
        foreach($stuff as $i => $s) {
            $this->Model->id = $s['Model']['id'];
            if(isset($this->request->data['FormName']['flag'.$i])) {
                $this->Model->set('flag', 1);
                $this->Model->save('flag', true);
            }
        }
    } 
    

    假设 $stuff 中的 ht 元素始终处于相同的顺序。

    【讨论】:

    • 当我输入您的修改时,我可以输出索引并确认每个复选框都有一个唯一的。我不太清楚如何修改我的控制器以识别检查了哪些索引。
    • 更新了,基本上你必须做同样的事情来访问新的标志名称
    • 成功!谢谢。我将索引放在控制器中的错误位置。
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 2019-02-23
    • 1970-01-01
    • 2015-04-22
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多