Aplicação CRUD com PHP + CodeIgniter + MySQL

Olá,

No meu segundo post vou mostrar a vocês uma pequena aplicação CRUD usando o CI. Achei muito simples e intuitivo desenvolver esta primeira aplicação. O CI é realmente um framework com uma pequena curva de aprendizado, não senti tanta dificuldade em implementar e as poucas que tive bastou consultar a documentação e googlar alguma coisa mais específica.

Vamos ao que interessa.

Primeiro de tudo crie uma nova database no sgbd de sua preferência. No meu caso escolhi o MySQL por já vir integrado com php no xampp:

create database crud;

Após ter criado sua nova base, adicione à ela uma nova tabela que será responsável por armazenar os dados das pessoas.

CREATE TABLE `pessoa` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(50) NOT NULL,
`celular` VARCHAR(15) NOT NULL,
`endereco` VARCHAR(100) NULL DEFAULT NULL,
`email` VARCHAR(25) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);

Feito isto e com a configuração de seu banco de dados no arquivo application/config/database.php, vamos iniciar o desenvolvimento da aplicação. Você pode até aproveitar a aplicação que você configurou através do meu Primeiro Post.

Como sabe-se o CI é um framework MVC, se você não sabe do que se trata é bom dar uma lida a respeito antes.
Nas pastas:

  • application/models
  • application/views
  • application/controllers

Ficarão nossos arquivos referentes ao nosso Model, View e Controller do CRUD Pessoa que desejamos implementar.

Primeiramente vamos criar nossa classe responsável por acessar os dados e persistir os dados na nossa tabela pessoa que criamos no início. Ela é o nosso Model.
No CI temos que seguir o padrão de nomenclatura Entidade_model, e o nome do arquivo será entidade_model.php.
Note também que devemos sempre estender a classe CI_Model, ela que nos fornecerá uma interface com métodos de acesso à nossa database.

Assim nossa classe Pessoa_model ficará assim:

<?php
        class Pessoa_model extends CI_Model{
               
        //atributo que referencia o nome da tabela que desejamos acessar
                private $tabela = 'pessoa';
               
                /* Construtor da classe
                 * Devemos sempre chamar o construtor da classe pai, no caso CI_Model
                 */
                function __construct(){
                        parent::__construct();
                }
 
                /* Método responsável por atualizar os dados de uma pessoa
                 * Devemos atribuir o id do pessoa que queremos atualizar
                 * e o CI se responsabiliza por fazer a atualização
                 */
                function atualizar($id, $pessoa){
                        $this->db->where('id', $id);
                        $this->db->update($this->tabela, $pessoa);
                }
               
                /* Método responsável por deletar uma pessoa
                 * Assim como no método atualizar, ele referencia o id
                 * e depois apaga o pessoa de acordo com seu id passado
                 */
                function deletar($id){
                        $this->db->where('id', $id);
                        $this->db->delete($this->tabela);
                }
               
                /* Adiciona uma novo pessoa à tabela
                 * Bem intuitivo, passamos a tabela e o objeto pessoa
                 * que estamos adicionando
                 */
                function inserir($pessoa){
                        return $this->db->insert($this->tabela, $pessoa);
                }
               
                /* Método que recupera a lista de todos as pessoas
                 * cadastrados na tabela ordenando pelo atributo "nome"
                 *
                 */
                function getPessoas(){
                        $this->db->order_by('nome', 'asc');
                        return $this->db->get($this->tabela);
                }
               
                /* Método que recupera uma pessoa específica de
                 * acordo com seu id
                 */
                function getById($id){
                        $this->db->where('id', $id);
                        return  $this->db->get($this->tabela);
                }      
               
 
        }
?>

Feito isto vamos criar nossa classe que será responsável por fazer a comunicação entre o nosso Model e a nossa View. Esta é a nossa classe Controller. Vamos criar o arquivo pessoa.php e coloca-lo na pasta controllers. Lembrando que da mesma forma do Model, nossa classe Controller deve sempre estender a classe CI_Controller. Assim teremos a classe Pessoa a seguir:

<?php
        class Pessoa extends CI_Controller{
               
               
                function __construct(){
                       
                        parent::__construct();
                       
                        //Carregar a library form_validation
                        $this->load->library(array('form_validation'));
                         
                        //Carregar o model
                        $this->load->model('Pessoa_model','',TRUE);
                         
                        //Carregar o helper url
                        $this->load->helper('url');
                       
                }
               
                function atualizar(){
                        //Recebendo dados do form via post
                        $id = $this->input->post('id');
                       
                        $pessoa = array('nome' => $this->input->post('nome'),
                                                         'endereco' => $this->input->post('endereco'),
                                                         'celular' => $this->input->post('celular'),
                                                         'email' => $this->input->post('email'),
                                                );
                       
                        $this->Pessoa_model->atualizar($id, $pessoa);
                       
                        //Retornar ao index
                        $this->index();
                }
       
                function deletar($id){
                        $this->Pessoa_model->deletar($id);
                       
                        redirect('pessoa/index', 'refresh');
                }
               
                function inserir(){
                        //Recebendo dados do form via post
                        $pessoa = array('nome' => $this->input->post('nome'),
                                                 'endereco' => $this->input->post('endereco'),
                                                 'celular' => $this->input->post('celular'),
                                                 'email' => $this->input->post('email'),
                                        );
               
                        $this->Pessoa_model->inserir($pessoa);
                        $this->index();
                }
               
                function prepararInsercao(){
                       
                        //Criando os campos do form
                        $this->form_validation->id = '';
                        $this->form_validation->nome = '';
                        $this->form_validation->endereco = '';
                        $this->form_validation->email = '';
                        $this->form_validation->celular = '';
                       
                        //Array data que armazena algumas variaveis usadas na view
                        $data = array(
                               'title' => 'Novo',
                               'action' => site_url('pessoa/inserir'),
                );
                       
                //carregar view passando os valores do array data
                $this->load->view('pessoa/cadastro_pessoa', $data);
                }
 
                function prepararAtualizacao($id){
                        $pessoa = $this->Pessoa_model->getById($id)->row();
                       
                        //Populando form com dados da Pessoa selecionada
                        $this->form_validation->id = $id;
                        $this->form_validation->nome = $pessoa->nome;
                        $this->form_validation->celular = $pessoa->celular;
                        $this->form_validation->endereco = $pessoa->endereco;
                        $this->form_validation->email = $pessoa->email;
                       
                        $data = array(
                               'title' => 'Editar',
                               'action' => site_url('pessoa/atualizar'),
                );
                       
                $this->load->view('pessoa/cadastro_pessoa', $data);
                       
                }
               
        }
 
?>

Por fim temos a nossa view. Criaremos uma nova pasta “pessoa” dentro do diretorio views para deixar a aplicação mais organizada. Já que na view teremos dois arquivos: Um para o Cadastro/Atualizacao e outra para Listagem.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <title>Cadastro de Pessoas</title>
        <meta name="description" content="Formul&aacute;rio de cadastro de pessoas." />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="language" content="pt-br" />
       
</head>
<body>
        <form name="cadastroPessoa" id="cadastroPessoa" action="<?php echo $action; ?>" method="post">
                        <input type="hidden" name="id" class="text" value="<?php echo $this->form_validation->id; ?>"/>
               
                        <table style="font-family: tahoma; font-size: 12px;">
                                <tr>
                                        <td><label for="nome">Nome:</label></td>
                                        <td><input type="text" name="nome" size="30" maxlength="30" id="nome" value="<?php echo $this->form_validation->nome; ?>" /></td>
                                </tr>  
 
                                <tr>                           
                                        <td><label for="endereco">Endere&ccedil;o:</label></td>
                                        <td><input type="text" name="endereco" size="60" maxlength="100" id="endereco" value="<?php echo $this->form_validation->endereco; ?>" /></td>
                                </tr>
                               
                                <tr>                           
                                        <td><label for="celular">Celular:</label></td>
                                        <td><input type="text" name="celular" id="celular" size="10" maxlength="14" value="<?php echo $this->form_validation->celular; ?>" /></td>
                                </tr>
                               
                                <tr>                                   
                                        <td><label for="email">E-mail:</label></td>
                                        <td><input type="text" name="email" id="email" size="30" maxlength="30" value="<?php echo $this->form_validation->email; ?>" /></td>
                                </tr>
                               
                                <tr>   
                                        <td><input type="submit" id="botaoEnviar" value="Enviar" /></td>
                                        <td><input type="button" id="botaoCancelar" value="Cancelar" onclick="history.go(-1)" /></td>
                                </tr>
                               
                        </table>
        </form>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <title>Listagem de Pessoas</title>
        <meta name="description" content="Tela de Listagem de Pessoas." />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="language" content="pt-br" />
       
</head>
<body>
        <div>
                <table cellspacing="0" style="width: 70%;">
                <tr style="font-weight: bold;">
                        <td width="20%">Nome</td>
                        <td width="40%">Endere&ccedil;o</td>
                        <td width="15%">E-mail</td>
                        <td width="5%">Celular</td>
                        <td width="5%">&nbsp;</td>
                </tr>
               
                <?php
                        //Preenche a tabela com o array $pessoas que vem do controller
                        foreach($pessoas as $pessoa){
                                echo "<tr>";
                                        echo "<td>" . anchor('pessoa/prepararAtualizacao/'.$pessoa->id, $pessoa->nome) . "</td>";
                                        echo "<td>" . $pessoa->endereco . "</td>";
                                        echo "<td>" . $pessoa->email . "</td>";
                                        echo "<td>" . $pessoa->celular . "</td>";
                                        echo "<td>" . anchor('pessoa/deletar/'.$pessoa->id,'deletar',
                                                                  array('onclick'=>"return confirm('Tem certeza que deseja excluir?')")) . "</td>";
                                echo "</tr>";
                        }
                ?>
               
                </table>
                

               
                <?php echo anchor('pessoa/prepararInsercao/','Novo', array('id' => 'novo')); ?>
        </div>
</body>
</html>

_

Agora já temos o nosso primeiro CRUD usando o CI.
Simples né? 🙂

No próximo post vou falar sobre autenticação no CI, com um exemplo simples de uma tela de login.
Estou aceitando sugestões de posts também.

Abraços

Anúncios

4 comentários em “Aplicação CRUD com PHP + CodeIgniter + MySQL”

  1. Obrigado me ajudou muito. valeu mesmo. tá legal o post. continua postando.

    sabe como fazer upload de arquivo?

    valeu!!

    1. Oi Júnior,

      Valeu, cara! To começando com o CI agora e espero contribuir muito pra quem tá iniciando assim como eu.

      Ainda não sei, mas seria um post interessante para os próximos capítulos.
      Obrigado pela dica, apareça sempre!
      Abração

  2. Boa tarde Henriqueluz, estou revivendo seu post aqui por que estou treinando o codeigniter e me surgiu uma duvida quanto o seu código, no formulário você cria uma variavel $action, ela pesquisando vi depois que deveria ser feita uma declaração na function principal, blz, $data[‘action’] = site_url(‘aluno’); . Aluno seria o nome do meu controller, criei uma classe Aluno, ok, mas continuo me deparando com um erro de constante não definida… o que poderia ser?

    1. Oi Andson, beleza?

      Você está fazendo o binding do array $data no seu form/view desta forma?
      $this->load->view('pessoa/cadastro_pessoa', $data);
      Este binding deve ser feito antes de carregar seu form.

      Funciona?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s