Validação de formulário do CodeIgniter com exemplo de envio de formulário

Formulário no CodeIgniter

Os formulários fornecem uma maneira para os usuários interagirem com o aplicativo e enviarem dados. Pode ser utilizado para um formulário de contato que um visitante do site pode preencher e nos enviar as informações. As informações recebidas geralmente são armazenadas em banco de dados ou enviadas por e-mail.

Estrutura do formulário HTML

O código a seguir mostra a estrutura de um formulário HTML típico.

<form id="frmUsers" name="frmUsers" method="POST" action="create_user.php">
	<input type="text" id="user_id" name="user_id">
	<input type="password" id="password" name="password">

	<input type="submit" value="Submit">
</form>

AQUI,

  • … são as tags de abertura e fechamento do formulário. Os atributos id e name especificam o nome e o id do formulário. O atributo method especifica o verbo HTTP a ser usado. Isso geralmente é especificado pelo verbo POST
  • Especifica os elementos do formulário. O atributo name é o nome da variável que é enviado ao servidor backend para processamento.

Auxiliar de formulário CodeIgniter

HTML é ótimo, fácil de entender e escrever, mas CodeIgniter torna as coisas ainda mais simples. CodeIgniter possui funções integradas para criar formulários HTML.

Vamos considerar o seguinte código de envio de formulário do CodeIgniter que usa o auxiliar de formulário para criar um formulário

 <?php
        echo form_open('create_user.php', ['id' => 'frmUsers']);
        
        echo form_label('User Id', 'user_id');
        echo form_input(['name' => 'user_id']);
        
        echo form_label('Password', 'password');
        echo form_input(['type' => 'password', 'name' => 'password']);
        
        echo form_submit('btnSubmit', 'Create User');
        
        echo form_close();
        ?>

AQUI,

  • echo form_open('create_user.php', ['id' => 'frmUsers']); cria a tag de abertura do formulário, define a ação como POST Verb e define a URL da ação como create_user.php
  • echo form_label('ID do usuário', 'user_id'); cria um rótulo que diz ID do usuário para o campo de entrada com o nome user_id.
  • echo form_input(['nome' => 'user_id']); cria um campo de entrada do tipo texto com o nome user_id
  • echo form_submit('btnSubmit', 'Criar usuário'); cria um botão de envio com o rótulo Criar usuário
  • eco form_close(); fecha o formulário

Como você pode ver no código CodeIgniter acima, os auxiliares de formulário facilitam a criação de formulários usando PHP puro. Ao passar atributos para os métodos auxiliares do formulário, podemos personalizar o HTML gerado para o formulário.

O código acima gera o seguinte código de formulário HTML

        <form action="http://localhost:3000/index.php/create_user.php" id="frmUsers" method="post" accept-charset="utf-8">
            <label for="user_id">User Id</label>
            <input type="text" name="user_id" value=""/>

            <label for="password">Password</label>
            <input type="password" name="password" value=""/>

            <input type="submit" name="btnSubmit" value="Create User"/>
        </form>

A maior vantagem de usar o auxiliar de formulário é que ele gera código semanticamente correto que segue os padrões HTML definidos.

Você pode consultar a documentação oficial do CodeIgniter para mais detalhes

https://codeigniter.com/user_guide/helpers/form_helper.html

Exemplo de formulário CodeIgniter

Depois de abordar o básico do CodeIgniter, vamos voltar ao nosso projeto tutorial no qual estivemos trabalhando ao longo deste artigo. Série de tutoriais do CodeIgniter. Em resumo, o projeto tutorial constrói um aplicativo de gerenciamento de contatos que armazenará os detalhes no banco de dados.

Criar contato

no tutorial anterior, criamos rotas para nossas aplicações e visualizações simples. Abra application/views/contacts/create.php

Modifique o código para create.php da seguinte maneira

<div class="column">
    <h2 class="title">Create Contact</h2>
    <form action="<?= base_url('contacts/store') ?>" method="POST">
        <div class="field">
            <label class="label">Contact Name</label>
            <div class="control">
                <input id="name" name="name" class="input" type="text" placeholder="Type the contact name">
            </div>
        </div>
        <div class="field">
            <label class="label">Contact Number</label>
            <div class="control">
                <input id="name" name="name" class="input" type="text" placeholder="Type the contact number">
            </div>
        </div>
        <div class="field">
            <label class="label">Email Address</label>
            <div class="control">
                <input id="email" name="email" class="input" type="email" placeholder="Type the email address">
            </div>
        </div>
        <div class="field is-grouped">
            <div class="control">
                <button class="button is-link">Save Contact</button>
            </div>
        </div>
    </form>
</div>

Nota: o código acima usa HTML simples para criar formulários.

Vamos agora ver como ficam nossos formulários no navegador da web

Carregue o seguinte URL em nosso navegador.

http://localhost:3000/contacts/create

Se você estiver criando o projeto do tutorial, deverá ser capaz de ver o seguinte

Formulário CodeIgniter

Validação de formulário no CodeIgniter

A validação desempenha um papel muito crítico no processamento de dados de formulários. Digamos que um usuário esteja se inscrevendo em um site; queremos ter certeza de que eles preencham os dados necessários e o endereço de e-mail. Precisamos ter certeza de que o endereço de e-mail inserido é válido. Se estivermos trabalhando com valores de data, queremos ter certeza de que os intervalos de datas são válidos. Não teríamos que aceitar uma data com 32 dias em um mês, etc.

A validação resolve os problemas acima. A validação do CodeIgniter é feita em duas (2) frentes ao trabalhar com aplicações web.

A validação do lado do cliente é feita pelo navegador da web. Isso geralmente envolve o uso de HTML e JavaScript. A validação do lado do cliente melhora o desempenho, pois tudo é feito no lado do cliente. Portanto, não há necessidade de enviar os dados para o servidor. A desvantagem da validação do lado do cliente é que o usuário tem controle sobre ela. Se você confiar em JavaScript para validar e o usuário desabilita JavaScript no navegador, então sua validação falhará.

A validação do lado do servidor é feita no lado do servidor. A desvantagem dessa validação é que o usuário precisa enviar os dados ao servidor para processamento e aguardar a resposta. Isso consome recursos da rede e pode degradar o desempenho. A principal vantagem da validação do lado do servidor é que você tem maior controle e tem a garantia de que suas regras de validação funcionarão mesmo se o usuário desabilitar JavaScript no navegador.

Uma estratégia melhor é usar o lado do cliente como estratégia de validação primária e o lado do servidor como mecanismo de fallback.

Adicionando regras de validação de formulário

CodeIgniter possui uma biblioteca de validação integrada. A biblioteca é carregada usando a seguinte linha

$this->load->library('form_validation');

A biblioteca de validação de formulário CodeIgniter pode ser usada para realizar algumas das seguintes ações

  • Verifique os campos obrigatórios. Isso examina os valores enviados e retorna um erro se um campo marcado como obrigatório não tiver um valor
  • Validação de tipo de dados – alguns campos podem exigir apenas valores numéricos. Se um valor não numérico for detectado, a biblioteca retornará um erro. A execução do envio do formulário também é abortada.
  • Validação de comprimento – alguns tipos de dados exigem que os campos tenham um determinado número mínimo ou máximo de caracteres. A biblioteca de validação é útil nesses casos.
  • Sanitização de dados – a biblioteca de validação também possui recursos que removem códigos maliciosos dos dados enviados por motivos de segurança. Se, por exemplo, os valores enviados tiverem ativos JavaScript ou código de injeção SQL neles, a biblioteca de validação remove o código prejudicial e o torna inútil.
  • Valide campos exclusivos do banco de dados – suponha que você tenha um formulário onde os usuários se inscrevem usando um endereço de e-mail. Você gostaria de garantir que o endereço de e-mail seja exclusivo. A biblioteca facilita a verificação dos dados enviados em uma tabela e campo do banco de dados. Isso permite saber que o valor já foi sacado.

As regras de validação são definidas usando o seguinte formato

$this->form_validation->set_rules('field','human readable field','rule',['custom message']);

AQUI,

  • 'campo' especificou o nome do campo do formulário a ser validado pela biblioteca
  • 'campo legível por humanos' especifica o formato legível por humanos do campo em validação. Isso é exibido de volta ao usuário quando ocorre um erro.
  • 'regra' especifica a regra de validação a ser aplicada, como obrigatório, numérico, verificar se o comprimento mínimo é… etc.
  • ['mensagem personalizada'] é opcional e pode ser usada para definir uma mensagem de validação personalizada que deve ser exibida quando a regra de validação falhar.

A seguir está um exemplo de envio de formulário no CodeIgniter para validar o nome do contato

$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');

AQUI,

  • O código acima verifica se o campo contact_number foi inserido. Se não estiver definido, retornará um erro informando que o campo Número de contato é obrigatório.

Para executar a validação de acordo com as regras definidas, usamos a seguinte função da biblioteca de validação

$this->form_validation->run()

Se o código acima retornar falso, uma ou mais regras definidas falharam. Se retornar verdadeiro, todas as regras de validação foram aprovadas e você poderá prosseguir com outras ações.

Vejamos mais exemplos de regras de validação. Suponha que você queira validar alguns campos como o nome do contato, número e endereço de e-mail, você pode usar o código a seguir para fazer isso.

$rules = array(
        array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
        ),
        array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                        'required' => 'You must provide a %s.',
                ),
        ),
        array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
        )
);

$this->form_validation->set_rules($rules);

AQUI,

  • No exemplo de validação de e-mail acima no CodeIgniter, fornecemos um array de campos com regras para a função set_rules da biblioteca. Isso facilita na hora de validar alguns campos.

Validação Única

Se quisermos validar o número de contato para garantir que não salvaremos o mesmo número duas vezes, podemos usar a seguinte regra para fazer isso.

$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');

AQUI,

  • | é usado para unir várias regras
  • is_unique[contacts.contact_number] verifica se o valor de contact_number é exclusivo em relação aos valores do campo contact_number na tabela de contatos do banco de dados.

Exibindo mensagens de erro de validação de formulário

Se ocorrer um erro durante o processamento do formulário, você pode usar o código a seguir para exibir os erros de validação ocorridos

<?php echo validation_errors(); ?>

AQUI,

  • A função acima retorna todos os erros que ocorreram.

Preenchendo dados de formulário enviados: formulários fixos

Alguns formulários possuem muitos campos e, se ocorrer um erro, você deseja garantir que os dados adicionados corretamente sejam preservados. A biblioteca de validação possui mecanismos para fazer isso. Fazemos isso usando o código a seguir.

<?php echo set_value('field_name'); ?>

AQUI,

  • O código acima exibe a entrada que o usuário inseriu.

Para um guia de referência completo sobre os métodos disponíveis na biblioteca de validação, você pode consultar a documentação da API no guia do usuário oficial do CodeIgniter

https://codeigniter.com/userguide3/libraries/form_validation.html

Exemplo de validação de formulário CodeIgniter

Ao longo desta série de tutoriais, adicionamos mais código ao nosso projeto de tutorial, que é um aplicativo de gerenciamento de contatos. Nesta seção, carregaremos a biblioteca de validação e veremos como podemos colocá-la em uso prático usando um exemplo de aplicativo do mundo real.

Modifique o código de rotas da seguinte maneira para incluir o método store

$route['default_controller'] = 'welcome';
$route['contacts'] = 'contacts';
$route['create'] = 'contacts/create';
$route['store'] = 'contacts/store';
$route['edit/:id'] = 'contacts/edit';
$route['update/:id'] = 'contacts/update';
$route['delete/:id'] = 'contacts/delete';
$routes['users'] = 'welcome/users';

Vamos agora carregar a biblioteca de validação de formulários no controlador de Contatos e definir algumas regras de validação.

Modifique o código conforme mostrado na validação do formulário abaixo no exemplo do CodeIgniter:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
    }

    public function index() {
        $this->load->view('header');
        $this->load->view('contacts/index');
        $this->load->view('footer');
    }

    public function create() {
        $this->load->view('header');
        $this->load->view('contacts/create');
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->view('header');
            $this->load->view('contacts/create');
            $this->load->view('footer');
        } else {
            redirect(base_url('contacts'));
        }
    }

    public function edit($id) {
        $this->load->view('header');
        $this->load->view('contacts/edit');
        $this->load->view('footer');
    }

    public function update($id) {
        $this->load->view('header');
        $this->load->view('contacts/update');
        $this->load->view('footer');
    }

    public function delete($id) {
        $this->load->view('header');
        $this->load->view('contacts/delete');
        $this->load->view('footer');
    }
}

AQUI,

  • $rules = array(…) sets define as regras de validação
  • $this->form_validation->set_rules($rules); define as regras de validação
  • if ($this->form_validation->run() == FALSE) {…} executa as regras de validação e se elas falharem o formulário é exibido novamente com erros de validação. Se a validação for aprovada, estamos simplesmente redirecionando para a página da lista de contatos. Em circunstâncias normais, gravaríamos os dados no banco de dados. Faremos isso nos próximos tutoriais quando olharmos para bases de dados.

Modifique a visualização de criação no código application/contacts/create.php conforme mostrado no exemplo de validação de formulário do CodeIgniter abaixo:

<div class="column">
    <h2 class="title">Create Contact</h2>
    <div class="notification is-danger">
    <?php echo validation_errors(); ?>
    </div>
    <form action="<?= base_url('contacts/store') ?>" method="POST">
        <div class="field">
            <label class="label">Contact Name</label>
            <div class="control">
                <input id="contact_name" name="contact_name" class="input" type="text" value="<?php echo set_value('contact_name'); ?>" placeholder="Type the contact name">
            </div>
        </div>
        <div class="field">
            <label class="label">Contact Number</label>
            <div class="control">
                <input id="contact_number" name="contact_number" class="input" type="text" value="<?php echo set_value('contact_number'); ?>" placeholder="Type the contact number">
            </div>
        </div>
        <div class="field">
            <label class="label">Email Address</label>
            <div class="control">
                <input id="email_address" name="email_address" class="input" type="email" value="<?php echo set_value('email_address'); ?>" placeholder="Type the email address">
            </div>
        </div>
        <div class="field is-grouped">
            <div class="control">
                <button class="button is-link">Save Contact</button>
            </div>
        </div>
    </form>
</div>

AQUI,

  • exibimos os erros que ocorrem, se houver, durante o processo de validação
  • define o valor que foi definido anteriormente, se houver

Você precisa carregar o seguinte URL em seu navegador. Em seguida, clique em Criar contato sem inserir nenhum valor

Validação de formulário CodeIgniter

Resumo

  • Os formulários fornecem uma maneira para os usuários interagirem com o aplicativo e enviarem dados.
  • HTML é ótimo, fácil de entender e escrever, mas o CodeIgniter torna as coisas ainda mais simples. CodeIgniter possui funções integradas para criar formulários HTML.
  • A validação desempenha um papel muito crítico no processamento de dados de formulários.
  • Neste tutorial, vimos as principais estratégias de validação e seus prós e contras. Também aprendemos como definir regras de validação e enviar mensagens de erro usando a biblioteca de validação integrada do CodeIgniter. Encerramos a lição implementando o conhecimento adquirido em uma aplicação prática.