Проверка динамического поля в codeigniter

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

В частности, я проверяю поле 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() для проверки.

что именно "не работает" ... все? или просто выбранная вами проверка?

Alex 29.05.2018 09:38

@Alex, только валидация не работает, для всех полей не только для select. Возвращает True при каждой отправке

mrcoder 29.05.2018 09:39

mkay, и, чтобы быть уверенным, вы намеренно пытаетесь исправить это, например не вводите действительные данные? Кроме того, я не вижу никаких серьезных ошибок в вашем коде, но устранить неполадки с помощью предоставленной информации не так просто. прочтите, пожалуйста, один: stackoverflow.com/help/mcve. по сути, создать пример, который мы можем легко запустить в наших системах для устранения неполадок (полный / проверяемый). удалите ненужные биты, так что это будет минимальный.

Alex 29.05.2018 09:46

я просто делюсь полным кодом. проверьте еще раз.

mrcoder 29.05.2018 09:47

@Alex, ваш ответ помог, но не полностью, теперь у меня есть Unable to access an error message corresponding to your field name What Do You Want ?.(check_field). вернул функцию обратного вызова бу.

mrcoder 29.05.2018 09:55

где функция check_field()? в том же классе, что и validate()?

Alex 29.05.2018 09:58

имя поля - What_do_you_want_?@5, где @ - разделитель, который я использую, чтобы разбить это и получить 5, который является идентификатором поля ввода.

mrcoder 29.05.2018 09:58

Позвольте нам продолжить обсуждение в чате.

mrcoder 29.05.2018 09:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
488
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Двигаться

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

за пределами foreach

Другие вопросы по теме