2015-04-05 5 views
1

Я использую codeigniter и пытаюсь проверить свою форму с помощью пользовательской функции проверки обратного вызова. Но это действительно смущает меня, потому что валидация всегда возвращает FALSE.Codeigniter: Form_validation всегда возвращает FALSE

Вот form_input:

echo form_input(array(
     'id' => 'aff_hos_0', 
     'name' => 'aff_hos[]', 
     'value' => '', 
     'class' => 'form-control auto_form', 
     'placeholder' => 'Masukkan Nama Rumah Sakit', 
     'style' => 'width:100%')); 

Вот POST данные по форме:

Array 
(
    [0] => RS Pantai Indah Kapuk, Cengkareng, Jakarta, Jakarta 
    [1] => RS Siloam Kebonn Jeruk, Kb. Jeruk, Jakarta, Jakarta 
) 

Это когда я установил form_validation:

$this->form_validation->set_rules('aff_hos[]', 'Afiliasi Rumah Sakit ', 'callback_check_chosen_filled[Afiliasi Rumah Sakit]'); 

И это callback_check, то, что я пытаюсь достичь с помощью этого обратного вызова, - проверить, есть ли массив ввода (aff_hos []) не пустые:

function check_chosen_filled($post_array, $field) { 
    if (!isset($post_array) || (!is_array($post_array) && !count($post_array) > 0)) { 
     $this->form_validation->set_message('check_chosen_filled', $field . ' wajib diisi'.print_r($post_array)); 
     return FALSE; 
    } else { 
     foreach ($post_array as $row): 
      if (strlen($row) == 0) { 
       $this->form_validation->set_message('check_chosen_filled', $field . ' wajib diisi'); 
       return FALSE; 
      } 
     endforeach; 
    } 
    return TRUE; 
} 
+0

http://stackoverflow.com/questions/23163697/this-form-validation-run-returns-false-without-validation-rules/33949081#33949081 – Jimubao

ответ

0

Проблема заключается в том, что вы берете первый параметр как массив в вашей функции обратного вызова. На самом деле это не массив. Библиотека проверки CI выполняет итерацию каждого значения массива для вызова пользовательского обратного вызова. Вот почему ваш код должен быть таким.

function check_chosen_filled($value, $field) { 
    if (empty($value)) { 
     // set validation error msg 
     return FALSE; 
    } 
    return TRUE; 
} 

Надеюсь, это будет полезно для вас.

+0

Hi Arkar Aung, да, вы правы. Теперь он решен. Хотя я нашел другое решение из другого сообщения здесь: http://stackoverflow.com/questions/17771980/how-to-validate-array-value-in-codeigniter, но ваш гораздо лучше. Короче и аккуратно. Спасибо дружище. – yodann

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