我正在使用 ZEND 进行项目
一件非常奇怪和不合逻辑的事情不断发生。
当用户注册时,它会生成一个激活码并写入 DB:
//Generate Activation Code;
$activation_code = date('YmdHis');
$activation_code .= substr(number_format(time() * rand(),0,'',''),0,10);
在我得到的数据库中。像这样的代码:201212301653302670595490
用户应该去链接 /user/activation/201212301653302670595490
我用控制器得到这个参数:
public function activateAction() {
$activation_code = htmlentities(trim($this->_getParam('activation_code', 0)));
$activation_code = preg_replace("/[^0-9]/","", $activation_code);
$usersModel = new Users_Model_DbTable_Users();
$result = $usersModel->activUser($activation_code);
if($result) {
$this->view->message = 'Your account is activated. You may now Login.';
} else {
$this->view->message = 'Something went wrong.';
}
}
这个动作在我的模型中调用了一个函数:
public function activUser($activation_code) {
$data = array(
'status' => 2
);
if($this->update($data, 'activation_code = '. $activation_code)) {
return true;
}
}
这是我的引导程序中的自定义路由:
$activateUserRoute = new Zend_Controller_Router_Route("user/activate/:activation_code", array(
'module' => 'users',
'controller' => 'manage',
'action' => 'activate'
));
$router->addRoute('activateUserRoute', $activateUserRoute);
我在 DB 表中的单元格activation_code是 VARCHAR,长度为 24(因为生成的代码长度为 24 个符号)。
尴尬时刻
它一直在激活过程中失败。它总是返回 false;
如果我去数据库,用任何数字 1、1231231231234 甚至生成的代码本身(201212301653302670595490)替换生成的代码,它会激活。
也许你能告诉我这里出了什么问题?有什么练习吗?