Сравнение даты с использованием проверки формы обратного вызова в codeigniter - PullRequest
0 голосов
/ 08 мая 2019

Я сделал обратный вызов и у меня есть условие if, которое сравнивает дату платежа в поле ввода с последней датой платежа из базы данных и сегодняшней датой. Оно не должно быть равным или более ранним, чем последняя дата платежа, и должно быть равным или меньшим, чем сегодняшняя дата.

Возвращается значение false, когда я выбираю дату, превышающую сегодняшнюю дату, но возвращает значение true, даже если выбранная дата равна или раньше, чем дата последнего платежа.

Я попытался сравнить поле ввода и дату последнего платежа внутри контроллера, а не в функции обратного вызова, и все работает нормально. Когда я отображаю $ projectID внутри comparePaymentDate, он отображает дату из поля ввода даты вместо идентификатора проекта. Но когда я повторил $ ​​projectID внутри функции validatePaymentAdd, он показывает правильный идентификатор проекта.

В моем контроллере

$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();
}

Ex: Дата ввода: 5/2/2019 Дата последнего платежа: 5/5/2019

Он должен вернуть false и вернуть ошибку

1 Ответ

0 голосов
/ 08 мая 2019

Решил проблему.По-видимому, первый параметр в функции обратного вызова - это поле ввода, а второй параметр - данные, которые вы хотите передать.

Таким образом, обратный вызов теперь равен

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...