0

我正在尝试使用 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>  

为什么不显示错误消息?

谢谢。

4

2 回答 2

0

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

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

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

在此处查找有关自定义回调的信息。

这就是我编写控制器的方式;

<?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> 
于 2013-04-24T11:50:47.887 回答
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()”函数。

于 2013-04-24T11:52:49.943 回答