2015-06-16 5 views
0

У меня есть форма с двумя полями даты, эти поля определяют период времени, характеризующийся начальной датой и датой окончания, вместо того, чтобы заставить пользователя вводить дату, я использую селектор дат javascript для этих дат, У меня есть правила валидации для каждого поля через обратные вызовы, например:Правило валидации для пропусков дней в кодеигнитре?

$this->form_validation->set_rules('fechainicio', 'Fecha de Inicio', 'required|callback_startDate_valid'); 
    $this->form_validation->set_rules('fechafin', 'Fecha de Fin', 'required|callback_endDate_valid'); 

Правила работы Хорошо, индивидуально, без проблем! но поскольку эти поля определяют период (дней), мне нужно, чтобы дата начала была старше даты окончания, это будет мое третье правило проверки, но как это сделать, если поля даты являются отдельными? Если я использую значения post, они известны только после того, как были выбраны даты, это вызывает начальную ошибку (индекс неизвестного массива), потому что поля пусты, когда вы загружаете форму в принципе, какую-либо идею? Thxx i.a.

+2

Если вы используете ci 3 doc, говорим: «Если вам нужно получить дополнительный параметр в методе обратного вызова, просто добавьте его обычно после имени метода между квадратными скобками, как в:« callback_foo ** [bar] ** », то он будет передан как второй аргумент вашего метода обратного вызова. ' – splash58

ответ

2

вы можете принять значение начальной даты в своей функции endDate.

function endDate_valid($endDate) 
{ 
    $startDate = $this->input->post('fechainicio'); 

    if($startDate > $endDate){ 
    $this->form_validation->set_message('endDate_valid','End Date must be greater than start date'); 
    return FALSE; 
    } 
    return TRUE; 
} 
0

Я решил ее тестирование даты, прежде чем они достигнут даты, таким образом:

if (isset($_POST['save'])){ 
     $post_data = array(); 
     if($this->input->post()){ 
      $post_data = $this->input->post(); 
      if($post_data['fechainicio'] < $post_data['fechafin']){ 
       $data['fechaUno'] = $post_data['fechainicio']; 
       $data['fechaDos'] = $post_data['fechafin']; 
      }else{ 
       echo "There´s an error in dates order."; 
      } 
     } 
    } 

хотя я вижу некоторую избыточность в isset($_POST['save']) и состояние if($this->input->post()), в любом случае он работал, я просто попытался @ совет jagad89 и отлично работает !, спасибо!

+0

Почему вы сделали' if ($ this-> input-> post()) '?? – jagad89

+0

Поскольку я хотел проверить, было ли что-то опубликовано, но, как я уже сказал, он избыточен после 'if (isset ($ _ POST ['save'])). –

+0

Я хотел бы видеть ваш контроллер функции. я думаю, что если вы делаете 'if ($ this-> form_validation-> run()! = FALSE)' (и вы должны были это сделать, потому что используете проверку формы), где в вашей функции вам это не нужно. Во-вторых, это палка для codeignitor. Не используйте '$ _POST' как основные глобальные переменные, потому что' $ this-> input-> post ('fieldname') 'поставляется с проверками безопасности. – jagad89

Смежные вопросы