php - 在codeigniter中使用回调表单验证比较日期
问题描述
我进行了回调,并有一个 if 条件,将输入字段的付款日期与数据库中的最后一个付款日期和今天的日期进行比较。它不应等于或早于最后付款日期,并且应等于或小于今天的日期。
当我选择的日期大于今天的日期时,它返回 false,但即使我选择的日期等于或早于最后一个付款日期,它也会返回 true。
我尝试比较控制器内的输入字段和最后付款日期,而不是在回调函数中,它工作得很好。当我在 comparePaymentDate 中回显 $projectID 时,它会显示来自输入日期字段的日期,而不是项目 ID。但是当我在 validatePaymentAdd 函数中回显 $projectID 时,它显示正确的项目 ID。
在我的控制器中
$validate = $this->my_form_validation_lib->validatePaymentAdd($projectID);
$this->form_validation->set_rules($validate);
和回调
public function comparePaymentDate($projectID){
$latestPayment = $this->payment_model->getLatestPayment($projectID);
$fieldPaymentDate = strtotime($this->input->post('form_payment_date'));
if($fieldPaymentDate <= strtotime($latestPayment['payment_date']) || $fieldPaymentDate > strtotime(date('Y-m-d'))) {
$this->form_validation->set_message('comparePaymentDate', 'Payment Date should be later date than the latest payment and earlier or equal to the date today.');
return FALSE;
} else{
return TRUE;
}
}
我的自定义库中返回规则的函数
function validatePaymentAdd($projectID){
$rules = array(
array(
'field' => 'form_milestone',
'label' => 'Milestone',
'rules' => 'trim|required|alpha_numeric_spaces'
),
array(
'field' => 'form_payment_date',
'label' => 'Payment Date',
'rules' => 'required|callback_comparePaymentDate['.$projectID.']'
),
array(
'field' => 'form_payment_made',
'label' => 'Amount Paid',
'rules' => array(
'trim', 'required', 'greater_than_equal_to[0]',
'callback_payment'
)
),
array(
'field' => 'form_payment_remarks',
'label' => 'Payment Remarks',
'rules' => 'trim|required'
),
array(
'field' => 'remarks_subject',
'label' => 'Remarks Subject',
'rules' => 'trim|required'
),
array(
'field' => 'remarks_field',
'label' => 'Remarks',
'rules' => 'trim|required'
)
);
return $rules;
}
从数据库中获取最后付款日期的函数
public function getLatestPayment($projectID){
$this->db->select('payment_date');
$this->db->from('payment');
$this->db->where('project_id', $projectID);
$this->db->order_by('payment_id', 'Desc');
$this->db->limit(1);
$payment = $this->db->get();
return $payment->row_array();
}
例如:输入日期:2019 年 5 月 2 日最后付款日期:2019 年 5 月 5 日
它应该返回 false 并返回错误
解决方案
解决了这个问题。显然回调函数中的第一个参数是输入字段,第二个参数是您要传递的数据。
所以现在的回调是
public function uniqueProjectName($input_field, $clientID){
$projectName = $this->client_profile_model->compareProjectName($clientID);
if($projectName > 0) {
$this->form_validation->set_message('uniqueProjectName', 'Project Name should be unique.');
return FALSE;
} else{
return TRUE;
}
}
推荐阅读
- django - Django - “NoneType”对象没有属性“年份”
- outlook - Windows 10 上的 IBM Notes(又名 Lotus Notes) - 自动化对象错误
- cmake - cmake -> libpthread.so.0:添加符号时出错:命令行中缺少 DSO
- express - 将嵌套数组快速转换为字符串
- c - 计算C中2^n的数字总和
- javascript - 点击时用最大值填充输入
- r - ggplot2:geom_histogram 不能处理大的异常值?
- python - plotly python中的多个绘图错误
- javascript - 声明自定义异常以与 Firestore 可调用函数和 VueJS 一起使用
- python - 在 PyQt5 / Python 的两个选项卡中使用变量/数据