CodeIgniter:为什么回调函数后变量会发生变化?我是以正确的方式使用它吗?

时间:2015-09-17 15:08:07

标签: php codeigniter callback

我目前正在使用CodeIgniter。在表单验证后,我使用了函数" set_rules"检查用户的信息是否正确。 否则,我尝试使用"回调"发送2变量。函数,但似乎第二个变量在我使用" callback"时改变了它的值。功能。如果在我的表格中我将其视为:

Username = "test_username"    
Password = "test_password"   

在我的功能数据库中,

$username will display "test_username"       
$password will display "test_username,test_password".     

我试过这样:

 function index()
 {
  $this->load->library('form_validation');
  $username = $this->input->post('username');
  $password = $this->input->post('password');
  $this->form_validation->set_rules('username', 'Username', 'trim|required', 'wrong or missing username');
  $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database($username, $password)', 'wrong or missing password');
 }

  function check_database()
  {
    echo '$password'. '</br>'; //display => test_username
    echo '$username'. '</br>'; // display => test_username,test_password
  }

我试图通过以下方式替换更高代码的几行:

 function index()
 {
  $this->load->library('form_validation');
  $this->form_validation->set_rules('username', 'Username', 'trim|required', 'wrong or missing username');
  $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database['. $this->input->post($username). ','. $this->input->post($password), 'wrong or missing password'];

  function check_database($password, $username)
  {
    echo '$password'. '</br>'; //display => test_username
    echo '$username'. '</br>'; // display => test_username,test_password
  }

但它也是同样的问题。 我没有在CodeIgniter网站上找到回调函数的手册。我的第二个问题是我写的时候

  $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database', 'wrong or missing password');

  function check_database() //work only if I write check_database($password)
  {
    //blah blah blah
  }

它给我一个错误。鉴于我没有找到任何call_back函数的手册,我想回调函数用于测试密码变量的set_rules,所以我认为call_back函数会自动将密码变量发送到check_database()函数。 (这就是我需要将$ password放入check_database原型的原因)。

我已经找到了解决方案,但我只是在这里知道发生了什么(我很好奇)?

有没有人能告诉我为什么在第一个和第二个代码中,回调的第二个参数一旦在check_database()上就会改变? 顺便问一下,如果我对最后一个代码是对的,你可以确认一下吗?更确切地说,当我说call_back函数会自动将密码变量发送到check_database()?

感谢&#39; S

PS:在我之前给你看的代码中,我自愿删除了部分代码,以避免你阅读太多,因为我认为发帖时间有点长。

1 个答案:

答案 0 :(得分:1)

变量或值不会改变。在codeigniter表单验证中,回调第一个参数提供值。

$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database[x]');

....

function check_database($str, $param1)
{
     echo $str;   // password
     echo $param1; // x
}

如果您希望提供其他输入后的参数,这更容易:

$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');

function check_database($str)
{
     $username = $this->input->post('username'); // same input post value
     ....
}

希望这有帮助。

http://www.codeigniter.com/user_guide/libraries/form_validation.html#callbacks-your-own-validation-methods