Validation of filled fields of a form

0

Today I have a few forms in windows (modal) and some of these fields need to force the user to fill in today I'm doing the following:

Form:

IftheuserforgetstofillinsomefieldIusethefollowingcodewheremyformvalidatesandifthereisanerroritreturnsamessage:

Code:

functioninserir(){$this->template->set('title','InserirClientes');/*CarregaabibliotecadoCodeIgniterresponsávelpelavalidaçãodosformulários*/$this->load->library('form_validation');/*Defineastagsondeamensagemdeerroseráexibidanapágina*/$this->form_validation->set_error_delimiters('<span>','</span>');/*Defineasregrasparavalidação*/$this->form_validation->set_rules('cnome','Nome','required|max_length[40]');$this->form_validation->set_rules('emailc','E-mail','trim|required|valid_email|max_length[100]');$this->form_validation->set_rules('contato','Contato','trim|required|max_length[20]');$this->form_validation->set_rules('telefone','Telefone','trim|required|max_length[20]');$this->form_validation->set_rules('cidade','Cidade','trim|required|max_length[60]');$this->form_validation->set_rules('nameR','Representante','trim|required|max_length[60]');/*Executaavalidaçãoecasohouvererrochamaafunçãoindexdocontrolador*/if($this->form_validation->run()===FALSE){$this->session->set_flashdata('mensagem',"<div class='alert alert-danger'> preencha todos os campos antes de salvar </div>");
                redirect('clientes');
            /* Senão, caso sucesso: */
        } else {

            /* Recebe os dados do formulário (visão) */
            $data['cnome'] = ucwords($this->input->post('cnome'));
            $data['contato'] = ucwords($this->input->post('contato'));
            $data['telefone'] = $this->input->post('telefone');
            $data['emailc'] = strtolower($this->input->post('emailc'));
            $data['cidade'] = ucwords($this->input->post('cidade'));
            $data['representante'] = ucwords($this->input->post('nameR'));

            /* Chama a função inserir do modelo */
            if ($this->model->inserir($data)) {
                $this->session->set_flashdata('mensagem', "<div class='alert alert-success'> Cliente salvo com sucesso</div>");
                redirect('clientes');
            } else {
                $this->session->set_flashdata('mensagem', "<div class='alert alert-danger'> Erro ao inserir cliente</div>");
                redirect('clientes');
            }

        }
    }

Message returned in case of error:

Now explaining what I try to do, I want to leave the system more functional today if the user forgets a field he returns the list page and needs to open the register function again and enter all the fields again, my idea now is if you forget some field and click save the modal is not closed and yes the field (s) that it did not fill are highlighted in red, so I think I will need to use javascript, this is my doubt.

    
asked by anonymous 27.06.2017 / 11:57

3 answers

2

This can be done through HTML itself, just add required :

<input type="text" name="usrname" required>

It is a simple and functional option.

    
27.06.2017 / 13:34
1

Hello, follow the steps and adapt to your code to achieve the effect you want.

  

Create a private function to validate the form

private function form_cliente_insert()
{
    $this->load->library('form_validation');

    /* Define as regras para validação */
    $this->form_validation->set_rules('cnome', 'Nome', 'required|max_length[40]');
    $this->form_validation->set_rules('emailc', 'E-mail', 'trim|required|valid_email|max_length[100]');
    $this->form_validation->set_rules('contato', 'Contato', 'trim|required|max_length[20]');
    $this->form_validation->set_rules('telefone', 'Telefone', 'trim|required|max_length[20]');
    $this->form_validation->set_rules('cidade', 'Cidade', 'trim|required|max_length[60]');
    $this->form_validation->set_rules('nameR', 'Representante', 'trim|required|max_length[60]');

    // Vamos precisar retornar o _check_form para saber se vamos reabrir o modal ou não
    $_check_form = $this->form_validation->run();

    if ( $_check_form === FALSE ) {
        $this->session->set_flashdata('mensagem', "<div class='alert alert-danger'> preencha todos os campos antes de salvar </div>");
        /* Senão, caso sucesso: */
    } else {

        /* Recebe os dados do formulário (visão) */
        $data['cnome'] = ucwords($this->input->post('cnome'));
        $data['contato'] = ucwords($this->input->post('contato'));
        $data['telefone'] = $this->input->post('telefone');
        $data['emailc'] = strtolower($this->input->post('emailc'));
        $data['cidade'] = ucwords($this->input->post('cidade'));
        $data['representante'] = ucwords($this->input->post('nameR'));

        /* Chama a função inserir do modelo */
        if ($this->model->inserir($data)) {
            $this->session->set_flashdata('mensagem', "<div class='alert alert-success'> Cliente salvo com sucesso</div>");
        } else {
            $this->session->set_flashdata('mensagem', "<div class='alert alert-danger'> Erro ao inserir cliente</div>");
        }
    }

    return $_check_form;
}
  

Add this code to the Controller that manages the clients page

// Valor padrão, não mostra o modal
$data['open_modal_cliente'] = false;

if(!empty($_POST))
{
    // Valor negativo pois em caso de sucesso, retorna TRUE
    // Precisamos apenas de quando for FALSE, que é quando não validou e precisamos
    // reabrir o modal. Será necessário enviar este campo para a view..
    $_re_open_modal = !$this->form_cliente_insert();

    $data['open_modal_cliente'] = $_re_open_modal;  
}

In the view, put set_value with the field name

<input class="form-control" type="text" name="telefone" value="<?php echo set_value('telefone'); ?>" />
  

In the footer, make sure you need to open the modal and open it if necessary. The example below assumes you are using the bootstrap modal.

<?php if($open_modal_cliente): ?>
<script>
    document.addEventListener('DOMContentLoaded', function(){ 
        $('#nome-do-seu-modal').modal({
            keyboard: false,
            backdrop: 'static',
            show: true
        });
    }, false);
</script>
<?php endif ?>

The secret is not to use redirect because when you use it, you lose the information from $ _POST. See if you can do this implementation, if in doubt send us. ;)

    
27.06.2017 / 14:52
0

Ideally, you should post the form code and library used so that we can test it.

But I believe that commenting redirect('clientes'); on

  $this->session->set_flashdata('mensagem', "<div class='alert alert-danger'> preencha todos os campos antes de salvar </div>");
  //redirect('clientes');

It should solve your problem!

    
27.06.2017 / 13:34