【问题标题】:Form Validation of codeigniter is not showing error messagecodeigniter 的表单验证未显示错误消息
【发布时间】:2016-10-14 02:15:59
【问题描述】:

我正在做一个项目,我正在使用 codeigniter 表单验证,但是有一个问题,我用 if 进行检查验证,但我的错误消息没有出现在视图中。

代码如下:

Ci控制器

    public function envia(){
        $this->form_validation->set_rules('nome', 'nome', 'required');
        $this->form_validation->set_rules('descricao', 'descricao', 'required');
        $this->form_validation->set_rules('preco', 'preco', 'required');
        if ($this->form_validation->run() == TRUE){
            $produtos = array(
            "nome"  => $this->input->post("nome"),
            "descricao" => $this->input->post("descricao"),
            "preco" => $this->input->post("preco"),
             ); 
            $this->load->model("produtos_model");
            $this->produtos_model->salva($produtos);
            redirect('/produtos/');
        }else{
            redirect('/produtos/novo');
        }   

    }

查看

    <div class="container">
        <div class="row">
            <?php echo validation_errors(); ?>
            <h2>Cadastro</h2>
            <?php echo form_open('produtos/envia');?>
            <div class="form-group">
            <?php
            echo form_label("Nome:", "nome");
            echo form_input(array(
                "name"  => "nome",
                "id"    => "nome",
                "class" => "form-control"
            ));
            ?> 
            </div>
            <div class="form-group">
            <?php
            echo form_label("Descricao:", "descricao");
            echo form_input(array(
                "name"  => "descricao",
                "id"    => "descricao",
                "class" => "form-control"
            )); 
            ?>
            </div>
            <div class="form-group">
            <?php
            echo form_label("Preço:", "preco");
            echo form_input(array(
                "name"  => "preco",
                "id"    => "preco",
                "class" => "form-control"
            ));
            ?>
            </div>          
            <div class="form-group">
            <?php
            echo form_submit(array(
                "class"   => "btn btn-primary",
                "value" => "Cadastrar"
            )); 
            ?>
            </div>
            <?php echo form_close();?>

感谢大家的关注。

【问题讨论】:

  • 如果用户的提交没有通过验证,您必须将用户重定向到“produtos/novo”页面?
  • 这似乎很有用bit of documentation
  • 您应该加载视图而不是重定向以显示错误消息

标签: php codeigniter validation


【解决方案1】:

在 else 部分不要使用重定向,因为重定向会重新加载页面,这就是您无法获得验证消息的原因。在那里使用$this-&gt;load-&gt;view('your_view')

public function envia(){
            $this->form_validation->set_rules('nome', 'nome', 'required');
            $this->form_validation->set_rules('descricao', 'descricao', 'required');
            $this->form_validation->set_rules('preco', 'preco', 'required');
            if ($this->form_validation->run() == TRUE){
                $produtos = array(
                "nome"  => $this->input->post("nome"),
                "descricao" => $this->input->post("descricao"),
                "preco" => $this->input->post("preco"),
                 ); 
                $this->load->model("produtos_model");
                $this->produtos_model->salva($produtos);
                redirect('/produtos/');
            }else{
                $this->load->view('your_view_where_is_your_form');
            }   

        }

【讨论】:

    【解决方案2】:

    你的代码应该是这样的:

    public function produtos()
    {
        $status = $this->uri->segment(2); // Sample url: http://localhost/productos/success
    
        if(!empty($status) && $status = 'success')
        {
            $this->load->view('view_success');
        }else
        {
            $this->form_validation->set_rules('nome', 'nome', 'required');
            $this->form_validation->set_rules('descricao', 'descricao', 'required');
            $this->form_validation->set_rules('preco', 'preco', 'required');
            if ($this->form_validation->run() == TRUE){
                $produtos = array(
                "nome"  => $this->input->post("nome"),
               "descricao" => $this->input->post("descricao"),
               "preco" => $this->input->post("preco"),
             ); 
    
            $this->load->model("produtos_model");
            $this->produtos_model->salva($produtos);
            redirect('/produtos/success'); //Success
            }else{
               $this->load->view('view_form_input') // Your form was here
           }
    
         }
    
    
     }
    

    ** 请记住,为了获得错误验证,切勿使用redirect 函数。验证成功时才使用redirect函数。

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 2013-09-05
      • 2022-11-09
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多