2014-10-21 5 views
1

У меня возникла проблема с проверкой формы, которую я использую для создания пользователей из веб-приложения, которое я создаю с помощью CodeIgniter.
Все, что я делаю, когда я отправляю форму, просто обновляет страницу (даже если все введенные данные верны), но без каких-либо сообщений об ошибках. Ввод правил проверки в контроллер вместо файла конфигурации привел меня к тому моменту, когда он позволил мне отправить форму и процедуру, но без какой-либо проверки, позволяющей мне даже отправить пустую форму (по праву вызывая ошибку БД).
Мой код выглядит следующим образом:CodeIgniter Form_validation не работает

контроллер:

class Gen_client extends CI_Controller { 

     public function __construct() 
    { 
      parent::__construct(); 
      //-------------------------------------------------------------------------------------------------------- 
      //Carico le funzione del DB necessarie 

      $this->load->model('gen_client_model'); 

      //-------------------------------------------------------------------------------------------------------- 
      //Carico le librerie necessarie 

      $this->load->library('form/generazione_credenziali'); 
      $this->load->library('form_validation'); //le regole ora sono fissate sotto config/form_validation.php 
    } 


     function index() 
    { 
      //-------------------------------------------------------------------------------------------------------- 
      //Imposto tutte le regole per la validazione del form 

      $this->form_validation->set_message('alpha', 'Il campo "%s" dev\'essere composto da sole lettere.'); 
      $this->form_validation->set_message('_check_numeric', 'Il campo "%s" dev\'essere composto da soli numeri.'); 
      $this->form_validation->set_message('min_length', '"%s" dev\'essere di almeno %s caratteri.'); 
      $this->form_validation->set_message('_valid_prefix', 'Il prefisso inserito non è valido! Per favore inserire il prefisso internazionale nel formato seguente: 00XXX. Es: 0041'); 

      //----------------------------------------------------------------------------------- 
      //Parte di controllo e generazione della parte view 

      $fv = $this->form_validation->run('gen_client'); 
      if($this->form_validation->run('gen_client') == false) 
      { 
       $this->load->view('templates/header', $data); 
       $this->load->view('gen_client/gen_client', $data); 
       $this->load->view('templates/footer'); 

       $msg = validation_errors(); 

       var_dump($msg); 
       var_dump($fv); 
      } 
      else             //se il sistema sta validando il form ritornerà poi una pagina di esportazione se la validazione va a buon fine 
      { 
       $num = intval($this->input->post('num_utenti')); 


       if($num !==null && $num !==0)   //controllo se si sta cercando di generare più credenziali 
       { 
        $ids = $this->gen_client_model->addUsers($num, $this->session->userdata('id_dipendente')); 
        $this->session->set_userdata('ids', $ids); 
        $this->session->set_userdata('tipocli', $this->input->post('identificativo')); 
        $this->success(); 
       } 
       else 
       { 
        $ids = $this->gen_client_model->addUsers(1, $this->session->userdata('id_dipendente')); //inserisco solamente un utente 
        $this->session->set_userdata('ids', $ids); 
        $this->session->set_userdata('tipocli', $this->input->post('identificativo')); 
        $this->success(); 
       } 
      } 
    } 

правил Форма Validation в папке конфигурации:

<?php 
$config = array(
      'gen_client'=>array(
         array(
          'field' => 'sigla', 
          'label' => 'Sigla', 
          'id'  => 'sigla', 
          'rules' => 'min_length[3]|xss_clean|alpha' 
          ), 
         array(
          'field' => 'n_tel', 
          'label' => 'Numero di telefono', 
          'rules' => 'min_length[12]|callback__check_numeric|callback__valid_prefix' 
          ) 
       ), 
     ); 

Посмотреть:

echo form_open('', 'id="form_generazione" class="form-horizontal"'); ?> 
    <div id="form" class="col-md-4 col-md-offset-4"> 
    <label>Tipo utente</label> 
    <br /> 
    <?php   
     echo form_radio('identificativo', '1', '', 'onclick="radioChange(this)"'); 
     echo form_label('Numero di telefono','identificativo'); 
     echo "\t"; 
     echo form_radio('identificativo', '2', '' , 'onclick="radioChange(this)"'); 
     echo form_label('Sigla d\'accesso','identificativo'); 
    ?> 
    <br /> 
    <div class="u_ev"> 
     <label>Evento</label> 
     <?php 
     echo '<div class="input-group input-group-sm">'; 
      echo '<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>'; 
      echo form_dropdown('evento', $evento, 1, 'id="event" class="input-sm" onchange="changeEvent()"'); //vengono mostrati solamente se il valore della durata è -1 (che equivale a "Illimitato") 
      echo '</div>'; 
     ?> 
    </div> 
    <div class="u_gen"> 
     <label>Durata oraria</label> 
     <?php 
      echo form_error('durata', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ', '</div>'); 
      echo '<div class="input-group input-group-sm">'; 
      echo '<span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>'; 
      echo form_dropdown('durata', $durata,1, 'id="durata" class="input-sm"'); //ogni volta che viene cambiato il valore di durata verifica se è "Illimitato" per decidere se mostrare gli eventi o meno 
      echo '</div>'; 
     ?> 
    </div> 
    <div class="u_log"> 
     <label>Numero utenti</label> 
     <?php 
      echo form_error('num_utenti', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ' 
          , '</div>'); 
      echo '<div class="input-group input-group-sm">'; 
      echo '<span class="input-group-addon"><strong>#</strong></span>'; 
      echo form_input('num_utenti', set_value('num_utenti'), 'id="num_utenti" class="form-control" placeholder="Numero utenti.."'); 
      echo '</div>'; 
     ?> 
     <br /> 
     <label>Sigla</label> 
     <?php 
      echo form_error('sigla', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ', '</div>'); 
      echo '<div class="input-group input-group-sm">'; 
      echo '<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>'; 
      echo form_input('sigla', set_value('sigla'), 'id="sigla" onkeyup="previewUser(this)" class="form-control" placeholder="Sigla.."'); //ad ogni pressione di un testo faccio aggiornare dinamicamente la preview 
      echo '</div>'; 
     ?> 
     <br /> 
     <label>Preview sigla utente</label> 
     <?php 
      $prossimo = $this->generazione_credenziali->generateUname("",01); 
      echo '<div class="input-group input-group-sm">'; 
      echo '<span class="input-group-addon"><span class="glyphicon glyphicon-arrow-right"></span></span>'; 
      echo form_input('prossimo_utente','', 'disabled id="prossimo_utente" class="form-control"'); //preview della sigla del prossimo utente che non è modificabile e non viene mandato in post 
      echo '</div>'; 
     ?> 
    </div> 

    <div class="u_tel"> 
     <label>Numero di telefono</label> 
     <?php   
      echo form_error('n_tel', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ', '</div>'); 
      echo '<div class="input-group input-group-sm col-md-12">'; 
      echo '<span class="input-group-addon"><span class="glyphicon glyphicon-earphone"></span></span>'; 
      echo form_input('n_tel', '', 'id="n_tel" class="col-md-8 form-control" placeholder="00XXAABBBCCDD"'); 
      echo '</div>'; 
      echo '<small>Inserire il numero di telefono preceduto dal prefisso internazionale. Es: 0041 12 345 67 89</small>' 
     ?> 
    </div> 
    <br /> 
    <?php 
     echo form_submit('submit', 'Conferma', 'class="btn btn-default submit"'); 
    ?> 

    <br /> 
    <?php 
     echo form_close(); 
    ?> 
    </div> 

Прошу прощения за формат кода, поскольку он может показаться немного противоречивым.
У меня действительно не хватало идей о том, что пытаться исправить эту ошибку, даже если я уверен, что это какая-то небольшая ошибка.
Спасибо всем заранее.

ответ

0

Необходимо выполнить следующие действия: load the form validation rules config, затем set the rules, прежде чем пытаться его проверить.

// Loads a config file named form_validation_rules.php 
// and assigns it to an index named "form_validation_rules" 
$this->config->load('form_validation_rules', TRUE); 

// Retrieve a config item named "gen_client" 
// contained within the form_validation_rules array 
$validation_rules = $this->config->item('gen_client', 'form_validation_rules'); 

// Set the rules 
$this->form_validation->set_rules($validation_rules); 

// Run the validation 
if($this->form_validation->run() == FALSE) 
{ 
    // ... 
+0

Хорошо, я проделал свой путь вокруг вашего решения и получил его на работу! Большое спасибо: D – MarKxEasy

+0

Нет проблем! Как вы думаете, какая-то часть моего решения может быть улучшена? – jleft

+0

Нет, ваша часть решений была именно тем, что было необходимо. Единственной другой ошибкой было отсутствие правил на моем конце в файле form_validation.php, просто нужно было добавить другое настраиваемое правило. Еще раз большое спасибо за ваше время и готовность помочь! – MarKxEasy

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