好的,所以我在用户注册中实现了出生日期。我现在想要做的是在他们注册之前检查他们的出生日期并检查他们是否超过特定年龄(13)。他们我做 DOB 的方式有点奇怪,但它确实有效。我有 3 个字段 dob1、dob2、dob3。CodeIgniter:Tank Auth,在这里添加出生日期问题是我如何实现它,如果有人感兴趣的话。无论如何,这是我迄今为止一直在尝试的:编辑:用户输入的语法是 mm dd yyyy
function is_old_enough($input, $dob1, $dob2) {
$dob = $dob1.$dob2.$input;
$date = date('md').(date('Y')-13);
if ((int)$dob < (int)$date)
$this->form_validation->set_message('is_old_enough', 'You are not old enough to have an account on this site.');
return $input;
}
这是 register() 函数内部的内容。
$this->form_validation->set_rules('dob1', 'Date of Birth Month', 'trim|required|xss_clean|exact_length[2]');
$this->form_validation->set_rules('dob2', 'Date of Birth Day', 'trim|required|xss_clean|exact_length[2]');
$this->form_validation->set_rules('dob3', 'Date of Birth Year', 'trim|required|xss_clean|exact_length[4]|callback_is_old_enough[dob1||dob2]');
我接近了吗?我走远了吗?有人帮忙吗?现在它所做的只是假装我从未创建过这个回调并让用户加入,即使用户太年轻了。我知道它正确调用了函数,因为我对变量有一些问题。帮助?
编辑:布伦丹的回答对我帮助很大,但主要问题是逻辑错误。所以这就是我现在的工作方式:
//Check if user is old enough
function is_old_enough($input) {
$dob = $this->input->post('dob3').$this->input->post('dob1').$this->input->post('dob2');
$date = (date('Y')-13).date('md');
if ((int)$dob > (int)$date) {
$this->form_validation->set_message('is_old_enough', 'You are not old enough to register on this site.');
return FALSE;
}
return TRUE;
}
$this->form_validation->set_rules('dob1', 'Date of Birth Month', 'trim|required|xss_clean|exact_length[2]');
$this->form_validation->set_rules('dob2', 'Date of Birth Day', 'trim|required|xss_clean|exact_length[2]');
$this->form_validation->set_rules('dob3', 'Date of Birth Year', 'trim|required|xss_clean|exact_length[4]|callback_is_old_enough[]');