Проверка динамического поля в codeigniter - PullRequest
0 голосов
/ 29 мая 2018

У меня есть форма, созданная моим собственным конструктором форм, мой конструктор форм похож на форму Gravity для WordPress.Все работает нормально, кроме проверки.Каждый раз, когда я отправляю форму, она возвращает true.

В частности, я проверяю поле select, потому что пользователь может редактировать значение из веб-инспектора и отправлять значение, поэтому я проверяю значение по сохраненным значениям в БД, где динамическая формасохраняетсяВот моя попытка

where $post is $_POST[] array, $postKey is fieldName, & $postValue is submitted value by user.

public function validate()
{
    $post = $this->ci->input->post();
    //check form tempering
    if(empty($post)) 
        return false;

    $formId = $post['form_id'];
    //get form from db
    $data=[];
    $this->ci->db->select('formData');
    $this->ci->db->where('formId', $formId);
    $query = $this->ci->db->get(TBL_FORM_DATA);
    if($query->num_rows() > 0)
    {
        $data = $query->row();
    }
    if(empty($data) ) 
        return false;
    //unset submit button and 0 if occurs

    unset($post['submit']);
    unset($post['0']);

    //decode json
    $data = json_decode($data->formData,true);
    $fields = $data['field'];
    //debug($fields);
    //iterate post values and keys

    foreach ($post as $postKey => $postValue) 
    {
        //echo '<br>'.$postKey;
        if(strpos($postKey, '@'))
        {
            list($fieldName,$field_id) = explode('@', $postKey);

            $field_display_name = ucwords(str_replace('_', ' ', $fieldName));

            if(strpos($field_id,'|')) {
                list($field_id,$price) = explode('|', $field_id);
            }

            $field = $fields[$field_id];
            //debug($field['choice'],false);

            if(isset($field['choice']) && (isset($field['choice']['label']) && isset($field['choice']['value'])) )
            {
                /*if(!in_array($postValue, $field['choice']['value'])) 
                {*/
                    //$list = implode(',', $field['choice']['value']);

                    $this->ci->form_validation->set_rules($postKey,$field_display_name,'callback_check_field['.$list.']');
                    /*$this->ci->form_validation->set_rules($postKey, $field_display_name,"in_list[".$list."]",
                        array('in_list' => 'Invalid Selection. Please Select from available choices.')
                    );*/
                /*}*/
            }

            if(isset($field['required']) && $field['required']=='on'){
                $this->ci->form_validation->set_rules($postKey, $field_display_name,'required|trim');
            }

            //$duplicate = isset($field['no_duplicate']) ? true : false;
            //$this->ci->form_validation->set_rules('form_id',' ','required');
            //$this->ci->form_validation->set_rules('inkform_total',' ','required');    
        }
        $this->ci->form_validation->set_error_delimiters('<div class="clearfix"></div><p class="alert alert-danger">','</p>');

        return $this->ci->form_validation->run();

    }


    //echo validation_errors();

}

Функция обратного вызова для проверки значений полей выбора

function check_field($field,$list)
{ 
    if(!is_array($list)) {
        $list = explode(',', $list);
    }
    if(!in_array($field, $list)){
        $this->ci->form_validation->set_message('check_field','Invalid Post');
        return false;
    }else{
        return true;
    }

}

А позже я просто хочу получить доступ validate() функция для проверки.

1 Ответ

0 голосов
/ 29 мая 2018

Ход

$this->ci->form_validation->set_error_delimiters('<div class="clearfix"></div><p class="alert alert-danger">','</p>');
return $this->ci->form_validation->run();

снаружи foreach

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...