我使用WAMP在我的本地计算机上开发了一个CI站点。我使用带有HMVC扩展的CI 3,一切正常。
我刚刚将网站上传到生产服务器并更改了配置文件等以使其正常运行。但是,表单验证回调在生产服务器上不起作用。
以下是登录表单中的示例:
// Process login form
public function submit()
{
$this->load->library('form_validation');
$username = $this->input->post('username', TRUE);
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required|callback_do_login');
if($this->form_validation->run($this) == FALSE)
{
$this->login();
}
else
{
// Set login session
...
}
}
这是回调函数do_login:
public function do_login($password)
{
// Get user / pass from POST
$submitted_password = $this->input->post('password', TRUE);
$username = $this->input->post('username', TRUE);
$this->crud->setTable($this->table);
$this->load->model('mdl_users');
// Check User Exists
$query = $this->mdl_users->getUser($username);
if($query->num_rows() == 1)
{
// Get stored password
$row = $query->row();
$stored_password = $row->password;
// Check password
$this->load->module('mod_security');
$result = $this->mod_security->login($username, $submitted_password, $stored_password); // Returns false if no match
return ($result) ? TRUE : FALSE;
}
else
{
return FALSE;
}
}
在我当地的WAMP设置中,一切正常。但是在服务器上
$this->form_validation->run($this)
总是返回false。
为了消除回调函数本身的任何错误,我将其更改为以下作为测试:
public function do_login($password)
{
return TRUE;
}
...显然总会返回TRUE,但是当$ this-> form_validation-> run($ this)被调用时,即使我更改了do_login回调函数以返回TRUE,$ this-> form_validation - > run($ this)仍然返回FALSE !!
这让我发疯,我不知道为什么会这样。就好像表单验证忽略了回调函数而只是返回false。
任何人都可以帮助我吗?当我将站点文件上传到服务器时,是否可能是服务器上的设置导致它或其他可能已更改的设置?
如果它是相关的,在我的本地机器上,在do_login回调函数中,我最初设置了这样的回调错误消息:
$this->form_validation->set_message('do_login', 'User / Pass Incorrect');
...工作正常,但在生产服务器上它发出错误声明:"无法访问与您的字段名称密码相对应的错误消息。(do_login)"。我不得不在语言库文件中设置错误消息来克服这个问题。但事实上,这发生在生产服务器而不是我的WAMP设置上,这让我觉得必须在服务器上进行一些设置或其他原因造成这种情况。
无论如何,感谢任何帮助。
由于
答案 0 :(得分:0)
我终于找到了解决方案。 HMVC应用程序需要一个名为MY_Form_validation.php的小型库文件。网上似乎到处都是这个文件:
class MY_Form_validation extends CI_Form_validation {
function run($module = '', $group = '')
{
(is_object($module)) AND $this->CI = &$module;
return parent::run($group);
}
}
但是,尽管这在我的WAMP设置中有效,但它在我的服务器上无效。我发现通过在开始时声明CI变量,解决了服务器问题。所以MY_Form_validation.php文件最终成为:
class MY_Form_validation extends CI_Form_validation {
public $CI;
function run($module = '', $group = '')
{
(is_object($module)) AND $this->CI = &$module;
return parent::run($group);
}
}