CodeIgniter中的验证规则

时间:2013-04-24 11:00:30

标签: codeigniter codeigniter-2

我正在尝试使用CodeIgniter的form_validation库来验证电子邮件和密码。但是当我输入错误的电子邮件或密码时,不会显示validation_rules的错误消息。

控制器:

public function anuncios() 
{
    $usr=$this->input->post('Usuario');
    $this->input->post('Contrasenya');

    $this->form_validation->set_rules('drcorreo','Nombre de usuario',
            'trim|required|min_length[5]|xss_clean');
     $this->form_validation->set_rules('contrasena','Contraseña',
     'trim|required|min_length[8]|md5|xss_clean');

    if($this->form_validation->run()) 
     {
        $this->load->model('modelo_usuarios');

        if($this->modelo_usuarios->puede_entrar()) 
         {
            echo "Credenciales correctos";
            $this->load->model("modelo_bd");
            $data['vanc']=$this->modelo_bd->datos();
            $this->load->view('vancios',$data);

            return true;
         }
        else { //this one is never displayed

                                    echo "Credenciales incorrectos";
                echo "Usuario o contrasenya incorrectos<br /><br />";
                $this->load->view('indice');

                return false;
             }
     }  
    else { //this one is displayed but not the rules specified in 
                   //form_validation_lang.php file

            echo "Las reglas no son validas";
            $this->load->view('indice');
         }

}

查看:

<div id="acformulario"> 
    <form action="http://localhost/Pruebas/index.php/cindice/anuncios" method="post">
        <label for="correo" id="dcorreo">Direcci&oacute;n de correo</label>
        <input type="text" name="drcorreo" id="dcc"/><br /><br />
        <label for="contrasenya" id="cont">Contrase&ntilde;a</label>
        <input type="password" name="contrasena" id="cmcont"/><br /><br />
        <!--<label for="enviar"></label>-->
        <input type="submit" name="envia" id="bentrar" value="Entrar" />    
    </form>
</div>  

为什么不显示错误消息?

感谢。

2 个答案:

答案 0 :(得分:0)

传递规则后传回“无法输入”消息。当表单验证为真时,它位于 if 语句内。

如果您希望显示此消息,请将消息加载到视图中,或将其设置为闪存数据。

为什么不将puede_entrar()模型调用到自定义回调表单验证规则中,然后将其添加到设置的规则中。

查看here以获取有关自定义回调的信息。

这就是我对控制器进行编码的方式;

<?php

class Foo extends CI_Controller {
    public function anuncios() {
    // xxs_clean set globally in config
        $this->form_validation->set_rules('drcorreo','Nombre de usuario', 'trim|required|min_length[5]|callback_puede_entrar');
        // should use sha1 at least for hashing, see http://www.freerainbowtables.com/tables/
        $this->form_validation->set_rules('contrasena','Contrase&ntilde;a', 'trim|required|min_length[8]|md5');

        if($this->form_validation->run()) {
            $this->load->model('modelo_bd');
            $data['vanc']=$this->modelo_bd->datos();
            $this->load->view('vancios',$data);
        } else { 
            // redisplay form with validation errors
            $this->load->view('indice');
        }
    }

    public function puede_entrar($val) {
        $this->load->model('modelo_usuarios');

        if($this->modelo_usuarios->puede_entrar()) {
            return TRUE;
        } else {
            $this->form_validation->set_message('puede_entrar', 'Las reglas no son validas.');
            return FALSE;
        }
    }
}

视图(假设您已自动加载或已在其他地方加载$this->load->helper(array('form', 'url')); $this->load->library('form_validation'););

<div id="acformulario"> 
    <form action="http://localhost/Pruebas/index.php/cindice/anuncios" method="post">
        <?php echo form_error('drcorreo'); ?>
        <label for="correo" id="dcorreo">Direcci&oacute;n de correo</label>
        <input type="text" name="drcorreo" id="dcc"/><br /><br />
        <label for="contrasenya" id="cont">Contrase&ntilde;a</label>
        <?php echo form_error('contrasena'); ?>
        <input type="password" name="contrasena" id="cmcont"/><br /><br />
        <!--<label for="enviar"></label>-->
        <input type="submit" name="envia" id="bentrar" value="Entrar" />    
    </form>
</div> 

答案 1 :(得分:0)

我假设您在autoload.php文件中调用“表单”帮助程序,

像这样使用你的观点;

<div class="errors"><?php echo validation_errors(); ?></div>
<div id="acformulario"> 
    <form action="http://localhost/Pruebas/index.php/cindice/anuncios" method="post">
        <label for="correo" id="dcorreo">Direcci&oacute;n de correo</label>
        <input type="text" name="drcorreo" id="dcc"/><br /><br />
        <label for="contrasenya" id="cont">Contrase&ntilde;a</label>
        <input type="password" name="contrasena" id="cmcont"/><br /><br />
        <!--<label for="enviar"></label>-->
        <input type="submit" name="envia" id="bentrar" value="Entrar" />    
    </form>
</div>

这里的点是“validation_errors()”函数。