在codeigniter中使用回调表单验证比较日期

时间:2019-05-08 13:39:44

标签: php mysql 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();
}

例如: 输入日期:5/2/2019 上次付款日期:5/5/2019

它应该返回false并返回错误

1 个答案:

答案 0 :(得分:0)

解决了问题。 显然,回调函数中的第一个参数是输入字段,第二个参数是您要传递的数据。

所以现在的回调是

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;
    }
}