Intereting Posts
Как получить разницу в времени для чтения человеком с помощью Laravel 5 PHP создает текстовый файл на сервере Производительность экземпляров mySQL RDS на Amazon Webservice дублировать запись для ключа 'idx_client_id_parent_id_alias_language' при ручной вставке базы данных joomla перенаправить пользователей на страницу входа в систему PHP – содержимое массива lookup с синтаксисом точки Двустороннее шифрование: мне нужно хранить пароли, которые можно получить Создайте сеанс во время вызова ajax (php-xajax) Онлайн-приложение для голосования. Как избежать повторного голосования от одного и того же пользователя Как удалить фатальную ошибку при извлечении массива-члена str_replace () на многобайтовых строках опасно? GeoIP и IP для страны в PHP exec () работает медленнее в PHP – такая же команда работает намного быстрее в интерактивном режиме Каков самый быстрый и эффективный способ хранения и получения изображений, когда у вас есть миллионы пользователей на сервере LAMP? Исходный код PHP в файлах UTF-8; как правильно интерпретировать?

Валидация не работает в codeigniter

Проверка не работает. Все поля формы идут динамически. Это зависит от пользователя, сколько полей он выбирает. Если он выберет 2 и отобразит 2 поля в представлении. Если выбрать 3, тогда отобразится 3 поля и т. Д. У меня есть более 30 полей

Я установил 3 массива (для целей тестирования я установил только 3. Это будет полное количество полей) на моей странице проверки формы. Если я удаляю последний массив, чем работает проверка, потому что я получаю только 2 поля в представлении. Я не могу использовать более двух массивов на моей странице проверки формы.

Обязательно ли требовать, чтобы количество полей в представлении равно количеству наборов массивов правил в форме проверки?

Посмотреть

Это моя динамическая страница просмотра

<?php echo form_open('formbuilder_control/enxample_from_view'); foreach ($data as $key) {// I am getting output $exp_fields_name=$key->fields_name; $exp_fields_type=$key->fields_type; $exp_form_elements=$key->form_elements; $abc=explode(',',$exp_form_elements); foreach ($abc as $value) { if ($exp_fields_name == $value) {?> <div class="form-group row label-capitals"> <label class="col-sm-5 col-form-label"><?php echo $exp_fields_name;?></label> <div class="col-sm-7"> <input type="<?php echo $exp_fields_type;?>" name="<?php echo $exp_fields_name;?>" placeholder="<?php echo $value;?>" class="form-control" /> <?php echo form_error($exp_fields_name); ?> </div> </div> <?php }}}?> <div class="form-buttons-w btn_strip"> <input type="submit" name="submit" value="Save" class="btn btn-primary margin-10"> </div> <?php echo form_close(); ?> 

Form_validation.php

 $config = array( 'test'=>array( array('field' =>'firstname', 'label' => 'First Name', 'rules' => 'required' ), array('field' => 'lastname', 'label' => 'lastname', 'rules' => 'required' ), array('field' => 'middlename', 'label' => 'middlename', 'rules' => 'required' ) ), ); 

контроллер

 public function test() { if($this->form_validation->run('test') == TRUE) { echo "working"; } $this->load->view('test1'); } 

Related of "Валидация не работает в codeigniter"

Конечно, это провалится. Ваши правила проверки определяют поле «middlename» по мере required , и это поле даже не существует в форме.

Недопустимое поле не может удовлетворять required правилу.

Можно иметь гибкие наборы правил с минимальным кодом. Рассмотрим этот пример form_validation.php

 <?php $first_last = array( array('field' => 'firstname', 'label' => 'First Name', 'rules' => 'required' ), array('field' => 'lastname', 'label' => 'lastname', 'rules' => 'required' ), ); $middle_name = array( array('field' => 'middlename', 'label' => 'middlename', 'rules' => 'required' ) ); $config = array( 'fullname' => array_merge($first_last, $middle_name), //first, middle and last name fields 'shortname' => $first_last, //only first and last name fields ); 

Это предоставляет два разных набора полей для использования с form_validation->run() .

Например: в форме, использующей поля с первым, средним и последним именем

 if($this->form_validation->run('fullname')) { ... 

Или, когда форма содержит только поля первого и последнего имени

 if($this->form_validation->run('shortname')) { ... имя if($this->form_validation->run('shortname')) { ... 

Как уже говорили другие, вам требуется поле, которого не существует. Вам либо необходимо:

  • Добавьте поле в свое представление с именем middlename
  • Удалите правило проверки, которое требует, чтобы поле middlename существовало

Не внося свой вклад в вашу проблему, но в аспекте юзабилити вы, скорее всего, захотите изменить ярлык в своих правилах middlename и middlename чтобы сделать их более удобными для пользователя.

 $config = array('test'=>array( array('field' =>'firstname', 'label' => 'First Name', 'rules' => 'required' ), array('field' => 'lastname', 'label' => 'lastname', 'rules' => 'required' ), array('field' => 'middlename', 'label' => 'middlename', 'rules' => 'required' ) ), ); 

Кроме того, в документации есть другие полезные советы для разных пользовательских правил, если вы не пытаетесь потребовать имя middlename но хотите дезинформировать или подтвердить свой формат перед вставкой в ​​базу данных.

https://www.codeigniter.com/userguide3/libraries/form_validation.html#form-validation-tutorial

Ну, так как вы хотите иметь один набор правил проверки, и у вас есть две различные формы для проверки, вы можете сделать это, используя очень хороший вариант с функцией callback проверки Codeigniter. Я собираюсь опубликовать простой пример:

Ваш файл вида:

 <!DOCTYPE html> <html> <head> <title></title> </head> <body> <?php echo form_open('formbuilder_control/test');?> <input type="text" name="firstname"> <input type="hidden" name="which_form" value="first_form"> <?php echo form_error('firstname'); ?> <input type="text" name="lastname"> <?php echo form_error('lastname'); ?> <input type="submit" name="submit" value="submit"> <?php echo form_close(); ?> <?php echo form_open('formbuilder_control/test');?> <input type="text" name="firstname"> <input type="hidden" name="which_form" value="second_form"> <?php echo form_error('firstname'); ?> <input type="text" name="lastname"> <?php echo form_error('lastname'); ?> <input type="text" name="middlename"> <?php echo form_error('middlename'); ?> <input type="submit" name="submit" value="submit"> <?php echo form_close(); ?> </body> </html> <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class YourController extends CI_Controller { public function save() { //.... Your controller method called on submit $this->load->library('form_validation'); // Build validation rules array $validation_rules = array( array( 'field' => 'A', 'label' => 'Field A', 'rules' => 'trim|xss_clean' ), array( 'field' => 'B', 'label' => 'Field B', 'rules' => 'trim|xss_clean' ), array( 'field' => 'C', 'label' => 'Field C', 'rules' => 'trim|xss_clean|callback_required_inputs' ) ); $this->form_validation->set_rules($validation_rules); $valid = $this->form_validation->run(); // Handle $valid success (true) or failure (false) } public function required_inputs() { if( $this->input->post('which_form') == "second_form" && !$this->input->post('middlename')) { $this->form_validation->set_message('middlename', 'Middle name is required!'); return FALSE; } return TRUE; } } 

Из приведенного выше примера вы можете видеть, что функция required_inputs похожа на обычную функцию, где вы можете написать любой PHP-код. Так что бы я советовал, у вас есть одно скрытое поле в обеих формах, jus, чтобы проверить, какая форма была отправлена, а затем установить функцию обратного вызова для middlename проверки правильности middlename и в этой функции, проверить, какая форма отправлена ​​пользователем, и на основе он возвращает TRUE или FALSE.

Надеюсь, это даст вам всю идею, что вы можете сделать.

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