用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3082|回复: 6
收起左侧

[控制器] CI 输入类的一点bug??

[复制链接]
发表于 2013-4-1 16:22:09 | 显示全部楼层 |阅读模式
本帖最后由 city 于 2013-4-1 16:25 编辑

问题描述:
使用输入类,表单提交值为"0"的时候(code如下)
HTML复制代码
 
<select name="planstate">
    <option value="all">状态</option>
    <option value="1">开启</option>
    <option value="0">关闭</option>
</select>
 
复制代码

控制器里:
PHP复制代码
$this->input->post('planstate') === false
复制代码

这个是毫无疑问的,我们都熟知1为true,0为false。
但是当我们需要用该值对数据库数据进行筛选的时候,post的数据就会有点问题了,以为此时"0"是我们需要的,false不是我们所期望的。

解决如下:
看了下class CI_Input 下的post和function _fetch_from_array, 修改下最后的返回值:return $array[$index]; =>return "$array[$index]";,这样可以达到我们的要求,有需要的朋友可以修改下。
修改不会出现什么大问题,毕竟php是弱类型的语言。

最后,祝大家工作顺利。

发表于 2013-4-1 23:15:09 | 显示全部楼层
正因为是弱类型的才需要用到===号判断FALSE而不是用==啊
 楼主| 发表于 2013-4-2 11:29:59 | 显示全部楼层
dickfu 发表于 2013-4-1 23:15
正因为是弱类型的才需要用到===号判断FALSE而不是用==啊

不需要判断是否为false,而是需要得到具体的值。
发表于 2013-4-2 11:51:32 | 显示全部楼层
楼主使用的是什么版本的 CI ?
我用 2.1.3 没有这个问题,结果是能得到0这个字符串的。
 楼主| 发表于 2013-4-13 14:05:37 | 显示全部楼层
Hex 发表于 2013-4-2 11:51
楼主使用的是什么版本的 CI ?
我用 2.1.3 没有这个问题,结果是能得到0这个字符串的。 ...

2.1.3
发表于 2013-4-15 15:07:50 | 显示全部楼层
city 发表于 2013-4-13 14:05
2.1.3

我试过,是没有问题的,那说明代码是没有BUG的。
有可能是楼主其他代码导致了这个问题。
或者重新下载一份代码再试试。
 楼主| 发表于 2013-4-15 19:41:21 | 显示全部楼层
Hex 发表于 2013-4-15 15:07
我试过,是没有问题的,那说明代码是没有BUG的。
有可能是楼主其他代码导致了这个问题。
或者重新下载一 ...

好嘞,谢谢Hex

本版积分规则