使用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
对我来说都不适用。建议?
答案 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);
}