在Codeigniter中选中set_checkbox的默认值

时间:2018-03-06 21:18:23

标签: php codeigniter

使用Codeigniter 3. set_checkbox对我来说很好,除了我无法检查默认值。

我已尝试过其他帖子中的建议,但我仍然无法让它工作......

为了进行调试,我将其归结为以下内容......

<input type="checkbox" name="xyz" value="1" <?php echo set_checkbox( "xyz", "1", TRUE ) ?> XYZ

<input type="checkbox" name="xyz" value="1" <?php echo set_checkbox( "xyz", "1", 1 ) ?> XYZ

对我来说都不适用。建议?

3 个答案:

答案 0 :(得分:0)

例如,对于您可能正在创建或更新某些内容的页面(在本例中为$ obj),我执行此操作:

<input type="checkbox" name="xyz" value="1" <?php 

    // On page load, if obj has '1' for xyz, apply check
    $default_value = ( isset( $obj['xyz'] ) && $obj['xyz'] == '1' );

    echo set_checkbox( 'xyz', '1', $default_value );
?> />

这个$ obj是数据库中的一个东西,所以如果我创建或更新$ obj,这对我有用。

我不确定这是不是你想要的,但我每天都会这样做。

答案 1 :(得分:0)

我将开始回答这个问题并指出我不是PHP专家,也不能说明原作者的意图。如果这不会打扰你,请继续阅读:) ...

按照Brian的建议,我查看了set_checkbox代码,我发现了以下内容。

答:Codeigniter 3有两个这个功能的副本。一个是在system / libraries / Form_Validation.php中。第二个是在system / helpers / form_helper.php中。

B:form_helper.php中的那个包含我猜的是一个bug。

我将详细说明B:set_checkbox的最后一行说

return ( $default === TRUE) ? ' checked="checked" : '';

不幸的是,它永远不会那么遥远。就在那之前就是这个......

if ($CI->input->method() === 'post') 
{
    return ($input === $value) ? ' checked="checked"' : ''; 
}

在我的情况下if语句是真的,但&#34; $ input === $ value&#34;从来没有真实,所以我总是得到一个回归&#39;。我把它改成了......

if ($CI->input->method() === 'post')
{
   return ($input === $value || $default === TRUE ) ? ' checked="checked"' : '';
}

现在一切都按预期工作了。

要明确,我不建议任何人更改Codeigniter源代码。我只是展示了什么对我有用。

感谢您抽出宝贵时间帮助我。

干杯, 丹尼斯

答案 2 :(得分:0)

是的,我有这个问题,首先是谁该死,默认情况下要选中一个复选框,而当您要取消选中该复选框时,如果提交表单和出现错误,则应该保持未选中状态。

我刚刚起床就解决了这个问题。

我基本上检查了表单是否已提交并且设置值是这样设置的

if($validation->getErrors() AND empty(set_value('status')))
{
    $seted_value = set_checkbox('status', set_value('status') == TRUE ? TRUE : FALSE, FALSE);
}
else
{
    $seted_value = set_checkbox('status', set_value('status') == TRUE ? TRUE : FALSE, TRUE);
}