选中作为Codeigniter中set_checkbox的默认值

u0sqgete  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(126)

使用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

对我来说都不管用有什么建议吗

hkmswyz6

hkmswyz61#

举个例子,对于一个你可能正在创建或更新内容的页面(在这个例子中是$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,这对我很有效。
我不知道这是不是你想要的,但我每天都用这个。

1hdlvixo

1hdlvixo2#

我在回答这个问题的时候会先声明我不是PHPMaven,也不能推测出原作者的意图。如果你不介意的话,请继续阅读:)...
按照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语句是真的,但是“$input === $value”从来都不是真的,所以我总是得到一个"“的返回。我把它改为...

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

现在一切都按预期工作。
为了清楚起见,我并不是建议任何人修改Codeigniter源代码,我只是简单地展示了对我有用的东西。
谢谢你抽出时间来帮我。
干杯丹尼斯

yqhsw0fo

yqhsw0fo3#

是的,我有这个问题,首先是谁的地狱希望一个复选框被选中的默认情况下,当你想取消选中它应该保持未选中,如果提交表单和错误来。
我用我刚想出的一个窍门解决了这个问题。
我基本上检查了表单是否已提交,以及设置值是否如下设置

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);
}
eulz3vhy

eulz3vhy4#

我知道这个问题很久以前就有人问过了,但看这里给出的答案似乎很复杂。我将在下面回答这个问题:

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

诀窍在于将第三个参数设置为false
这很有效。任何人都可以尝试这个并给予反馈。

相关问题