如果语句运行,则不管是否为true

时间:2013-06-17 15:28:41

标签: php codeigniter

我已经使用默认值单独测试了每个方法,这一切似乎都有效。当它们混合在一起时会发生一些事情。

以下是代码,我将尽力以易于理解的方式编写代码:

从控制器开始:

if ($active['newcliq']) 
            {   
                $newcliqid = $this->create_m->create_keyword($cliq, $cliqid);
                if (!$newcliqid) {
                echo json_encode(array('success' => false));
                } else {
                    $this->logic_m->change_active($newcliqid, $cliq);
                }
            }

$active['newcliq']是真还是假,并且来自userdata('active')

当然,它下一步运行的是create_keyword($cliq, $cliqid),如下所示:

$this->db->insert('cliq', $insert); 
            $newcliqid = $this->db->insert_id();
            if ($newcliqid) {
                return $newcliqid;
            } else {
                return false;
            }

同样,我已经手动检查了所有内容,并且我知道$newcliqid正在返回正确的insert_id,并且整个函数返回正确的值。

因此,$newcliqid将返回到控制器并运行logic_m->change_active,如下所示:

if (!$this->logic_m->cliqidcheck($cliqid)){
                $cliqid = 6;
            }

以上一行是给我带来问题的。无论什么值,$cliqid总是设置为6. cliqidcheck是返回true还是false。

以下是cliqidcheck($cliqid)

    public function cliqidcheck($cliqid)
    {
        if ((ctype_digit($cliqid)) AND ($this->checkcliqidexist($cliqid)))
        {
            return true;
        } else {
            return false;
        }
    }

我已经使用手动输入的值测试了cliqidcheck,它始终返回正确的值。另外,我已经完全从change_active模型中移除了cliqidcheck,它运行良好。

我还在控制器中回显了变量$newcliqid并找到了正确的值。

我希望这只是一个我忽略的简单问题。谢谢您的帮助!如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

而不是口头解释,发布调试代码

不是更好
var_dump($cliqid);
$tmp = $this->logic_m->cliqidcheck($cliqid);
if (!$tmp) {
    $cliqid = 6;
}
var_dump($tmp, $cliqid);
die;

它是输出。

即使没有在此发布,它也会让你相信,如果声明实际上永远不会“正常运行”

设置完整的错误报告也有助于(找到拼写错误等)

ini_set('display_errors',1);
error_reporting(E_ALL);

还有关于过多代码的说明。这句话

if (condition)
{
    return true;
} else {
    return false;
}

可以(并且应该在我看来)缩短为

return (condition);

插入ID也是如此。为什么不这样做呢

return $this->db->insert_id();

没有那么多风

if ($newcliqid) {
    return $newcliqid;
} else {
    return false;
}

实际上只是一种重言式