CodeIgniter Form_validation无法正常工作

时间:2014-10-21 09:35:20

标签: php forms codeigniter validation

我遇到了表单验证的问题,我用它来创建用户使用CodeIgniter创建的Web应用程序。
提交表单时所做的只是刷新页面(即使所有输入都正确),但没有显示任何错误消息。将验证规则放在控制器而不是配置文件中,这让我能够提交表单和过程,但没有做任何验证让我甚至提交一个空表单(正确导致数据库错误)。
我的代码如下:

控制器

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();
                }
            }
    }

配置文件夹中的表单验证规则

<?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>

我很抱歉代码的格式,因为它看起来有点混乱。我真的没有尝试纠正这个错误的想法,即使我很确定它在某个地方有点小错误。
提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

在尝试验证之前,您需要确保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)
{
    // ...