我目前正在使用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:在我之前给你看的代码中,我自愿删除了部分代码,以避免你阅读太多,因为我认为发帖时间有点长。
答案 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
....
}
希望这有帮助。