Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Codigneter II - Form validation

Pessoal, estou tentando colocar o form validation porém a cada tentativa de inclusão de produto o formulário retorna sem inclui-lo e em branco. Veja como ficou meu código:

public function novo()
        //Adicionando o produto do formulário
        {    
        $this->load->library("form_validation");
        $sucesso = $this->form_validation->run();
        $this->form_validation->set_rules("nome", "nome", "required|min_length[5]");
        $this->form_validation->set_rules("descricao", "descricao", "required|min_length[10]");
        $this->form_validation->set_error_delimiters("<p class='alert alert-danger', </p>");

        if ($sucesso) {
            //se o formulário for preenchido corretamente então...
            $usuariologado = $this->session->userdata("usuario_logado");
            $produto = array(
            "nome" => $this->input->post("nome"),
            "preco" => $this->input->post("preco"),
            "descricao" => $this->input->post("descricao"),
            "usuario_id" => $usuariologado['id']
            );

        $this->load->model("produtos_model");
        $this->produtos_model->salva($produto);
        $this->session->set_flashdata("success", "Inserido com sucesso"); 
        redirect("/");
            } else {
            //se não, volta para o formulario
            $this->load->view("produtos/formulario");
            };
        }


<?php 
    validation_errors();
    echo form_open("produtos/novo");

            echo form_label("Título", "nome");
            echo form_input(array(
                "name" => "nome",
                "class" => "form-control",
                "id" => "nome",
                "maxlenght" =>255,
            ));
            echo form_error("nome");

            echo form_label("Preço", "preco");
            echo form_input(array(
                "name" => "preco",
                "class" => "form-control",
                "id" => "preco",
                "maxlenght" =>255,
                "type" => "number"
            ));
            echo form_error("preco");

            echo form_label("Descrição", "descricao");
            echo form_textarea(array(
                "name" => "descricao",
                "class" => "form-control",
                "id" => "descricao",
                "maxlenght" =>500
            ));
            echo form_error("descricao");

            echo form_button (array(
                "class" => "btn btn-primary",
                "content" => "Cadastrar",
                "type" => "submit",
            ));
            ?>
4 respostas

Oi Pedro, tudo bom?

Tenta verificar o que está sendo passado pra função salva, exatamente, e compartilha aqui com a gente? =)

Roda seu código com um var_dump antes de salvar:

public function novo()
        //Adicionando o produto do formulário
        {    
        $this->load->library("form_validation");
        $sucesso = $this->form_validation->run();
        $this->form_validation->set_rules("nome", "nome", "required|min_length[5]");
        $this->form_validation->set_rules("descricao", "descricao", "required|min_length[10]");
        $this->form_validation->set_error_delimiters("<p class='alert alert-danger', </p>");

        if ($sucesso) {
            //se o formulário for preenchido corretamente então...
            $usuariologado = $this->session->userdata("usuario_logado");
            $produto = array(
            "nome" => $this->input->post("nome"),
            "preco" => $this->input->post("preco"),
            "descricao" => $this->input->post("descricao"),
            "usuario_id" => $usuariologado['id']
            );

        $this->load->model("produtos_model");
var_dump($produto);die();
        $this->produtos_model->salva($produto);
        $this->session->set_flashdata("success", "Inserido com sucesso"); 
        redirect("/");
            } else {
            //se não, volta para o formulario
            $this->load->view("produtos/formulario");
            };
        }

Olá André tudo bem e você?

Segue minha função de salvar: public function salva($produto) {//Insere o produto no banco de dados $this->db->insert("produtos", $produto); }

Ainda acho que o problema está na validação do formulário. Se retiro as linhas de validação do formulário, o produto é inserido com sucesso.

solução!

É necessario incluir as configurações de validação antes de pedir pra rodar as validações:

Esta assim :

$sucesso = $this->form_validation->run();
        $this->form_validation->set_rules("nome", "nome", "required|min_length[5]");
        $this->form_validation->set_rules("descricao", "descricao", "required|min_length[10]");
        $this->form_validation->set_error_delimiters("<p class='alert alert-danger', </p>");

Deve ficar assim :

        $this->form_validation->set_rules("nome", "nome", "required|min_length[5]");
        $this->form_validation->set_rules("descricao", "descricao", "required|min_length[10]");
        $this->form_validation->set_error_delimiters("<p class='alert alert-danger', </p>");
$sucesso = $this->form_validation->run();

Sim Breno, agora deu certo!

Muito obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software