我已经使用默认值单独测试了每个方法,这一切似乎都有效。当它们混合在一起时会发生一些事情。
以下是代码,我将尽力以易于理解的方式编写代码:
从控制器开始:
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
并找到了正确的值。
我希望这只是一个我忽略的简单问题。谢谢您的帮助!如果需要更多信息,请告诉我。
答案 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;
}
实际上只是一种重言式