php - 表单验证期间具有多个参数的 Codeigniter 中的回调函数

标签 php codeigniter validation callback

在 Codeigniter 中:

这是我用于验证的回调函数:

public function has_match($password, $username){
    if (0) {
        // user exists
        return true;
    }
    else {
        $this->form_validation->set_message('has_match', 'Invalid Username/password entered ' . $password . ' ' . $username);
        return false;
    }
}

验证规则如下:

$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required|callback_has_match[username]');

任何人都可以告诉我我在调用回调函数时做错了什么,因为我无法获取用户名字段的值并且它一直显示“用户名”(在回调中的变量 $username 内) ?

最佳答案

您的代码按预期工作。您基本上总是使用 string username 作为参数调用回调方法 has_match。我认为您希望这转化为:

callback_has_match[$username]

因此,当您访问 has_match() 方法时,您将可以访问 $username 的值。然而,这不是回调方法的工作方式。您在其中设置的参数是一个字符串,它是硬编码的,就像您为 min_length[10] 添加规则时所做的一样 - 它不是 PHP 变量的值。一个简单的修复方法,我还没有测试过但怀疑可行:

$this->form_validation->set_rules('password', 'Password', 'required|callback_has_match[' . $username . ']');

但是上面的代码并不干净,在我看来似乎是糟糕的设计。

既然我们已经发现了代码的问题,我知道它不在问题的范围内,但我想指出它 - 我发现这里更多的是设计问题。为什么要在对密码字段的回调中检查用户名/密码对?

请记住,您正在验证表单,不应将其与模型工作混为一谈。表单不关心提供的用户名/密码组合是否正确,它应该只检查是否正确提供了两个字段,如果正确,它应该做些什么。

我会将您上面的代码调整为:

$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required|callback_has_match[username]');

if ($this->form_validation->run() != FALSE) {
    $validLogin = $this->muser->checkLogin($username, $password);

    if ($validLogin) {
        //Username/password combo exists in DB, save in session or whatever.
    } else {
        //Username/password combo does not exist in DB, show an error.
    }
} else {
    //Code for when form fields have not been provided correctly.
}

关于php - 表单验证期间具有多个参数的 Codeigniter 中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324420/

相关文章:

javascript - 使用 $.post 调用 Web 服务 PHP 函数验证 javascript 页面中的目录

javascript - 弹出框 javascript+PHP 代码混合不起作用?

php - 如何防止XSS攻击(php/pdo)

php - 自mysql时间戳PHP以来的时间

php - Codeigniter 删除

php - openssl_pkey_get_public 返回 0

php - 在结果数组中添加参数

c# - 验证空文本框

validation - JSF:根据验证成功或失败有条件地更新

javascript - 美国邮政编码验证