Edição de clientes com Modal do Bootstrap e CodeIgniter

UPDATE 14/11/2014

Atenção, muitos visitantes têm reclamado de um erro que acontece ao rodar este projeto, mesmo baixando o arquivo zipado aqui do site. O erro que acontece é que a view não encontra a variável $clientes que vem do controller. Na verdade não é um problema no código.

Em meus projetos eu costumo trabalhar como short_open_tag PHP habilitado. Isso server para não precisar escrever <?php ?> no código, mas somente <? ?>.

Pra resolver o problema do projeto, basta habilitar essa função no seu PHP. Abra o php.ini e procure por short_open_tag, então, tire o comentário do começo da linha, salve e reinicie o apache. Ou então, troque no código tudo que tem <?  ?> por <?php ?>, tomando o cuidado para quando tiver assim: <?= ?>, trocar por isso: <?php echo ?>.

Olá

O post de hoje é especialmente importante pois é algo que eu sempre vejo pessoas tendo dúvidas em como fazer isto, ou em como integrar várias soluções juntas

Neste post eu vou explicar detalhadamente como funciona um pequeno cadastro de clientes que fiz, onde eu integrei diversas soluções.

Veja abaixo quais soluções estão presentes neste pequeno sistema:

Eu vou partir do princípio que você já saiba como Instalar o CodeIgniter, a como configurá-lo para acessar um Banco de Dados e como funciona o padrão MVC. Caso não sabia, recomendo que leia os posts antes.

Para não ficar tão grande o post, eu vou explicar as partes mais importantes de cada arquivo.

O sistema funciona assim: ao abri-lo, uma tabela é preenchida com os dados de vários clientes cadastrados no banco de dados, neste caso, somente os campos Nome e Email, e uma terceira coluna para a Ação, que somente fará a Edição dos dados do Clientes.

Não estou abordando aqui a inserção e a deleção, mas como a Edição é a parte mais complicada, acredito que você tenha condições em adaptar o sistema para inserir e excluir clientes.

Quando o usuário clica no botão Editar, abre-se uma janela Modal do Bootstrap com os dois campos Nome e Email já preenchidos com os dados do cliente escolhido.

Ao clicar no botão Salvar Alterações, estes dados são salvos no banco de dados.

Bem simples e objetivo, mas acredito que serve como base para muitos que estão patinando nesta área.

O código está bem comentado e é bem pequeno.

O código abaixo é o controller home.php, que é responsável para fazer aparecer a primeira página do sistema. É dentro da função index() deste controller que conecto ao banco de dados e atribuo à variável $clientes a lista de clientes, que será enviada à view:

 

Abaixo vemos a view home.php, que é responsável por carregar o Bootstrap, JavaScripts e mostrar os dados do cliente na tela:

O pulo do gato aqui é na função carregaDadosClienteJSon, que é chamada quando é clicado no botão Editar.

Esta função é responsável por buscar os dados do cliente através do seu ID, e depois preencher cada campo do formulário de edição. Como vários campos serão preenchidos, preferi utilizar jSon para esta função.

É nesta etapa também que muitos se perdem. Para que eu saiba com qual cliente estou lidando, eu criei um capo do tipo hidden no formulário que recebe o id_cliente, e este campo é preenchido em todas as vezes que alguém clica no botão Editar. Assim, eu garanto que estou trabalhando com aquele cliente.

O código abaixo é o model m_cilentes.php, que tem somente duas funções. Uma que carrega os dados de todos os clientes ou somente de um cliente caso seja passado com parâmetro o id deste cliente.

A outra função serve para atualizar os dados do cliente na tabela.

No código abaixo está o controller clientes, que é responsável por tratar funções relacionadas aos clientes. Ele também tem duas funções apenas. A primeira que traz os dados do cliente e a segunda, que trata os campos a serem atualizados na tabela e faz o salvamento das informações no banco de dados.

Estes são os arquivos principais do nosso sistema. Vale lembrar que eu também alterei o arquivo config/autoload.php para carregar a biblioteca database  e o helper url.

Configurei também o meu controller padrão dentro do arquivo /config/routes.php.

E por último, segue o dump do banco de dados para você poder testar aí no seu computador:

Bom, então é isto.

No link abaixo você pode baixar o sistema completo e testar no seu computador ou no seu servidor. Espero que seja útil e que sirva de base para suas aplicações.

-> Download do Mini Cadastro de Clientes

Veja o projeto funcionando ao clicar no link abaixo:

>>>Testar o Projeto – Versão 2

>>> Veja um vídeo mostrando como colocar um botão Novo Cadastro no projeto.

P.S. Se tiver alguma dúvida ou sugestão de post, use a área de comentários abaixo.

Fábio S. Reszko

Sou Programador PHP desde 2006 e eu acredito sinceramente que programar usando um Framework PHP é a solução para os problemas de códigos desorganizados, difíceis de entender e de dar manutenção no futuro. Se você também acredita nisto, então fique à vontade em explorar meu blog.

  • Excelente tutorial amigo, parabéns!
    Só não entendi uma coisa, onde você definiu a variável $clientes, para gerar as linhas da tabela? Aqui deu erro por conta dessa variavel

  • Olá Thiago

    Esse é o funcionamento do padrão MVC. Esta variável é gerada no controller home.php e repassada para a view.

    Olhei meu post agora e percebi que esqueci de colocar este código. Já fiz a correção e você pode acompanhar pelo post, ou então baixar o projeto zipado no final da página.

    Obrigado pelo comentário.

    Fabio

  • Ademar

    baixe o código hoje mais ainda estar dando o erro da variável cliente

  • Olá Ademar

    Acabei de baixar o projeto que está para download no post e instalei ele exatamente como está aqui na área de projetos do site. Você pode clicar no link e vê-lo funcionando.

    Caso o erro ainda persista, me diga exatamente qual mensagem aparece para voce.

    O link para o projeto está no final do post.

    Abraços

    Fabio

  • Ademar

    o meu estar dando esta mensagem
    A PHP Error was encountered

    Severity: Notice

    Message: Undefined variable: cliente

    Filename: views/home.php

    Line Number: 98

  • Olá Ademar

    Dê uma revisada no seu home.php, o erro é ali. É estranho pois o código tá certinho no zip. O erro diz que a variável cliente não está definida, na linha 98.

    Tente novamente dar uma olhada lá.

    Abraços

  • Gisele

    Olá Fabio!

    Ótimo artigo, muito agradecida.
    O erro citado pelo Ademar aparece aqui também, na variável cliente nas linhas 96, 97 e 98
    da uma olhada no print:
    https://sites.google.com/site/localrevenda/arquivos/tela.png

    Lendo o código e tentando solucionar surgiram as seguintes duvidas: o return que esta dentro do foreach na view (nas linhas que aparece o erro) não deveria estar no controller home.php? Algo como ‘cliente’ => $this ->clientes->clientes()->result() ???

    Minha duvida é pq o return esta no model: return $this->db->get(“cad_clientes”); mas no controller não… e sim diretamente na view, dentro do foreach como citei acima, e achei que deveria passar primeiro pelo controller home.php ao invés de ir direto pra view.

    por outro lado entendo que no controller home.php :

    $this->load->model(“m_clientes”, “clientes”); // esta carregando o model m_clientes e a função clientes

    $dados[‘clientes’] = $this->clientes->clientes(); // aqui seria a variavel clientes recebe as informações da função clientes (que contem o return) e estas informações são armazenadas na variavel $dados certo?

    $this->load->view(‘home’, $dados); // ai aqui carrega a view home e os dados da variavel dados… onde a variavel dados esta carregando as informações do DB né?

    Mas ai é que esta, se for isso mesmo, na view home.php não tem a variavel $dados nenhuma vez. Então não faz sentido pra mim ter um foreach clientes se já tem os dados carregados na variavel $dados la no controller home.

    Ai por outro lado a variavel $cliente é criada dentro do foreach na view e nenhuma vez mencionada no controller, dai seria o motivo de aparecer o erro como variavel indefinida?

    Não sei se consegui expor minhas duvidas ou se fiz confusão rsrsrs mas gostaria muito de entender melhor o motivo do erro.

  • Olá Gisele

    Quando eu crio o vetor $dados[‘clientes’] e passo para a view através do comando $this->load->view(‘home’, $dados), significa que o índice do vetor existirá como variável dentro da view. Neste caso, o CI irá criar uma variável chamada $clientes dentro da view.

    Se eu quisesse uma variável chamada $banana dentro da view, por exemplo, eu deveria apenas acrescentar mais um índice no mesmo vetor dados, assim: $dados[‘banana’], e dentro da view, esta variável seria acessada normalmente, $banana.
    Esta é a maneira que o CI faz para passar informações para view.

    Em relação ao erro, tenha sempre em mente que antes de um controller chamar uma view, você precisa criar a variável que vai utilizar dentro da view. No caso do projeto, a função dentro do controller que chama a view home é a index dentro do controller home, por isso que eu crio a variável clientes através do vetor dados, ANTES de chamar a view.

    Mas repare que se o seu código está igual ao do post, o erro aparece na variável $cliente, e não na variável $clientes. A variável $clientes é a que vem do controller com as informações do Banco de Dados, e a variável $cliente é a variável que é criada dentro do foreach, e é através desta variável que eu acesso os campos da tabela.
    O foreach vai pegar cada registro e vai atribuir à variável $cliente.

    Este erro acontece também quando você baixa o projeto e roda na sua máquina?

    Abraços
    Fabio

  • Gisele

    Obrigada 😀
    Entendi a explicação do vetor foi uma luz, e que a view carrega o indice, no caso a variavel $clientes. Mas ai surgiu outra duvida rsrsrs dentro do vetor entra todo o conteúdo da função clientes que foi passada para a variavel $clientes certo? Então dentro de um unico campo do vetor, no caso o campo clientes, exibe todas as informações da função $clientes… então no unico campo do vetor entra a lista de clientes (com id, nome, email)? nesse caso nem é necessário algo separadinho do tipo $dados[id_cliente, nome, email] onde cada campo do vetor é o que será retornado já que é apenas para exibição, seria isso?

    Sobre o erro sim, criei o DB e quando roda aparece o erro

  • Sim, dentro do índice do vetor chamado ‘clientes’ é colocado tudo o que a função clientes dentro do model retorna. Neste caso ele retorna um Objeto de Banco de dados do CodeIgniter, e usando o foreach com a função result() cada iteração retorna um atributo, que neste caso é o nome do campo da tabela.

    Quanto ao erro está difícil de eu encontrá-lo. Poste aqui 3 costas para eu analisar:
    1) A função clientes dentro do model m_clientes.php
    2) A função index, dentro do controller home.php
    3) O body, da view home.php

    Assim acho que fica mais fácil eu ajudar. Se quiser, poste lá no pastebin.com e mande o link do seu código aqui nos comentários.

    Fabio

  • Gisele

    O código é o mesmo que esta disponivel para download neste artigo, não há nada alterado.

    m_clientes.php http://pastebin.com/1BWDPVc0
    home.php(controller) http://pastebin.com/iiHk60HH
    home.php(view) http://pastebin.com/KjqwyUMB

  • Olá Gisele

    Descobri o problema.

    Eu costumo trabalhar com o short_open_tag do PHP habilitado, para que não seja preciso você escrever < ?php ?>. No meu servidor local e no servidor remoto, esta função está habilitada no PHP, mas provavelmente no seu servidor não esteja.

    Então há duas formas de resolver isso:

    1) Vá dentro da view e troque todos os < ? ?> por < ?php ?>, tomando o cuidado de trocar < ?= ?> por < ?php echo ?>.
    2) Ou então, basta habilitar o short_open_tag no seu servidor. Se estiver usando wamp, xamp, dá pra fazer isso pelo ícone ao lado do relógio, indo até PHP, depois settings. Ou então, abra o php.ini e tire o comentário antes da linha short_open_tag. Reinicie o apache e pronto, deve funcionar.

    Vou colocar esta observação no post para evitar estes problemas.

    Me avise se tiver dado certo.

    Abraços

    Fabio

  • Gisele

    Eeeeeee \o/\o/\o/\o/ resolvido!!!
    É isso mesmo Fabio, tudo funcionando certinho 😀
    Mais uma vez muito obrigada por compartilhar, super indico e com certeza vou acompanhar as próximas postagens. Fica com Deus!

  • Valeu Gisele por ter insistido também em resolver o erro.

    Se tiver alguma sugestão de post, fique à vontade em dizer.

    Fabio

  • Gisele

    Sugestão de post: Composer e Codeigniter! muitos falam que o Laravel e novos frameworks são melhores devido ao composer ser nativo. Mas o que isso influencia? sei pouco sobre o composer e acho que é a duvida de muitos iniciantes.

  • Gisele, pelo que tenho lido a respeito a versão atual do CodeIgniter não suporte nativamente o uso do composer, é preciso fazer algumas alterações para utilizá-lo. O CodeIgniter 3.0 já tem suporte a uso via composer, porém, a versão para download disponível no momento é a versão que ainda está em desenvolvimento.

    Agora que o CodeIgniter está sendo mantido por uma Universidade no Canadá, acredito que as coisas vão andar mais rápido. Quando a versão 3.0 stable do CI sair, eu com certeza vou fazer alguns posts aqui.

    Para não perder nenhum post, assine o site colocando seu email lá em cima onde diz ASSINE MEU BLOG.

    Abraços
    Fabio

  • Marcelo

    Boa noite, parabéns pela matéria.
    Gostaria de uma ajuda sua se possível, tentei fazer seu exemplo em meu projeto, mas no caso mostrando uma msg de confirmação de exclusão, mas não deu certo. Eu clico no botao para confirmar a exclusão mas não faz nada. Gostaria de saber se passar o projeto em seu email, vc poderia verificar e me ajudar onde esta meu erro?
    Desde já agradeço pela atenção.

  • Olá Marcelo

    Quando eu vou fazer algum sistema onde tem link para exclusão que chama uma função javascript, eu faço assim:
    Primeiro crio uma função javascript que irá excluir:

    function excluir(id) {
    if (!confirm(‘Confirma exclusão?’))
    return false;

    return true;

    }

    Agora, no link onde o usuário irá clicar para excluir, eu digito assim:

    Excluir

    Assim, quando o usuário clicar no link, irá ser chamada a função excluir() que irá somente retornar true ou false. Caso retorne true, então é permitido que o arquivo arquivo_php_que_ira_excluir.php seja chamado, caso seja retornado false, nada acontece.

    Atente-se para a palavra return dentro do onclick.

    Essa é a ideia básica, a partir daí você desenvolve a sua.

    Quanto à possibilidade de eu analisar seu código, realmente não é possível.

    Abraços
    Fabio

  • Marcelo

    ok, obg pelo retorno

  • Fabio

    Mais um excelente post!!! Me diz uma coisa, por favor, como faríamos pra poder exibir o resultado do submit no próprio modal sem fechá-lo? Exemplo: se der erro -> exibe os erros, se tudo ok -> exibe msg sucesso, tudo no próprio modal. Abs

  • Olá Fabio

    Isso é bem fácil. Repare que no botão Salvar Alterações no modal existe um código que envia um submit no formulário, onclick=”$(‘#formulario_clientes’).submit()”, e no evento success eu digo que a página será recarregada após os dados terem sido salvos no banco de dados: document.location.href = document.location.href.

    Se você não quiser que a página não seja recarregada ao enviar os dados, basta tirar a linha acima do evento success e colocar ali o seu código desejado. Que pode ser uma mensagem que você mostra ao usuário por exemplo.

    Blz.

    Abraços
    Fabio

  • Rodrigo

    Olá Fábio, parabéns pelo tutorial,

    Fiz aqui deu tudo certo porém com uma única dúvida, quando eu clico no botão salvar ele direciona para uma nova página em branco com o número 1, deveria apenas fechar o modal e aparecer minha listagem com o registro que alterei alterado, o que pode ter acontecido ?

    Vlw ^^

  • Rodrigo

    Fábio, parabéns pelo post ^^

    Fiz aqui e deu tudo certo, porém, eu queria fazer também um modal para excluir, fiz tudo certinho e abro o modal para confirmar a exclusão, só falta uma coisa, não estou conseguindo fazer aparecer o nome da pessoa que quero excluir, eu poderia usar as próprias funções de edição para chamar a variável nome ? como eu poderia fazer isso ? teria que refazer alguma função ? quebrei a cabeça aqui e não consegui.

    Obrigado amigo ^^

  • Olá Rodrigo

    O botão Fechar deve somente chamar o código que fecha a janela, no caso seria algo como $(this).close(). Se está aparecendo outra página, então o botão está chamando uma URL. Compare seu código com o do post e veja se está igual.

    Fabio

  • Rodrigo, neste caso teriam alguns passos a mais.

    A janela modal tem um evento chamado ‘open’, que é executado quando ela abre. Ali você pode colocar uma função que busca no banco de dados o nome do da pessoa que você está excluindo. Nesta função você passa o ID do registro. Você vai ter que criar um método novo no controller e outro método no model pra fazer tudo isso se comunicar. Então, após ter recebido de volta o nome da pessoa, você pode usar uma função jquery para mostrar este nome em uma tag HTML por exemplo. Esta seria a ideia. Não dá pra detalhar tudo aqui porque ficaria muito grande.

    Fabio

  • Rodrigo

    Fábio, obrigado por responder,

    fuçando e estudando o código consegui direcionar a página com redirect(”); pelo meu controller ^^ e também consegui fazer aparecer o nome no modal de confirmação de exclusão e também consegui inserir um novo registro por outro modal, ufa rs, sei que não é o caso aqui mas gostaria de compartilhar algo, caso queira é claro, pesquisando sobre mascaras para input achei o jasny bootstrap mask que é pra bootstrap, gostei porque ele é 100% compatível (até onde vi) e não causa conflito com o as classes do bootstrap (isso sim é bom rs )segue link: http://jasny.github.io/bootstrap/javascript/#inputmask é muito útil e para utilizar basta apenas lincar o jasny-bootstrap.min.js e jasny-bootstrap.min.css no header na página e acrescentar a classe no input: exemplo:

    o * no data-mask seria qualquer caracter ou seja, se for celular digita o 9 se for tel fico apenas de espaço, simples e objetivo ^^

    Obrigado por responder e agradeço pelos posts, estão me ajudando muito ^^, poderia me indicar algo para estudar sobre paginação ? falta apenas isso pra concluir meu CRUD usando CI e conceito MVC com Bootstrap

    Abraçuuuuu

  • Ok Rodrigo, valeu pela dica.

  • Gisele

    [off-topic]
    Olá Fabio,

    Tenho uma duvida que não é relacionada a este tópico, mas se puder me ajudar agradeço muito.
    Estou trabalhando com graficos do Morris Js http://morrisjs.github.io/morris.js/.

    No meu sistema codeigniter esse js esta funcionando certinho com as informações staticas que tem no js.
    Preciso pegar informações do DB como o total de itens cadastrados em cada tabela no DB ai o js Morris mostra em grafico.

    A dúvida é como trabalhar com informações dinamicas, do DB, dentro do js no codeigniter.

    Sendo possivel, agradeço essa super ajuda

  • Olá Gisele

    Bom, como você está trabalhando com javascript, as informações que vem do banco de dados devem estar presentes na sua view, pois é onde o javascript vai trabalhar.
    Eu faria assim: em algum controller eu recupero as informações do banco de dados que preciso, usando as formas tradicionais do CodeIgniter, então trataria estas informações para o formato que o morris.js trabalha e passaria estas informações através de uma variável pra view, assim elas estariam disponíveis para serem recuperadas dentro do seu javascript. Exemplo:

    Para agilizar, tente deixar a variável que vem do controller já no formato do morris, assim não vai precisa ficar fazendo tanto tratamento na view.

    Espero que tenha ajudado.

    Fabio

  • Gisele

    Obrigada Fabio, deu pra ter um ponto de partida.

    Outra coisa rsrs

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

    A linha acima tem por padrão no inicio dos arquivos php, alterar ela para depois dos comentários, como no exemplo abaixo tem algum impacto de segurança?

    <?php
    /**
    * CodeIgniter
    *
    * An open source application development framework for PHP 5.2.4 or newer
    *
    * This content is released under the MIT License (MIT)
    *
    * Copyright (c) 2014, British Columbia Institute of Technology
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    *
    * @package CodeIgniter
    * @author EllisLab Dev Team
    * @copyright Copyright (c) 2008 – 2014, EllisLab, Inc. (http://ellislab.com/)
    * @copyright Copyright (c) 2014, British Columbia Institute of Technology (http://bcit.ca/)
    * @license http://opensource.org/licenses/MIT MIT License
    * @link http://codeigniter.com
    * @since Version 1.0.0
    * @filesource
    */
    defined('BASEPATH') OR exit('No direct script access allowed');

  • Se for depois dos comentários acredito que não haja problemas.
    Só tome cuidado para não deixar espaços antes da tag PHP. Se você for usar a biblioteca session, pode dar aquele erro de http headers already sent.

    Fabio

  • Olá Fábio bom dia tudo bem? Bom tentei implementar seu código em minha aplicação não deu certo.

    Ai resolve baixar seu código e rodar na minha máquina em localhost com wamp server, e deu o mesmo erro.

    O erro é o seguinte:

    A aplicação roda, lista os clientes, quando clico em editar, aparece a janela modal porém nao traz nenhuma informação nos edits. Será que tem alguma configuração no wamp server, ou algo que esteja fazendo errado?

  • Elias, quando você abre a janela modal, é disparada uma função ajax que faz uma consulta ao banco de dados trazendo os dados daquele registro.
    Faça assim: Abra a página aperte a tecla F12 no Chrome, então, clique na abra Network e agora clique no nome de algum cliente. Quando abrir a janela modal, você vai notar que uma linha chamada ‘dados’ irá aparecer na aba Network. Clique nela e veja se em Preview aparecem os dados ou então se surge algum erro. A partir daí você pode descobrir onde está o problema.

    Fabio

  • òtimo Fábio muito obrigado, consegui achar o erro e me trouxe a resposta, porém quando eu edito, e clico em salvar não acontece nada, nem fecha a janela modal. Desculpe o incomodo, pois não entendo muito de javascript e ajax, tem um pouco de conhecimento somente em php.

  • Olá Elias

    No exemplo eu uso a função $.post() do jquery para fazer as requisições ajax. Dê uma estudada no seu funcionamento, é bem simples. Uma vez entendido isto, analise o evento que o botão salvar dispara, e então tente localizar o erro.

    Se você achou o erro anteriormente, talvez o erro da função salvar seja parecido. É importante ver também, através da tecla F12 do Chrome, se não há nenhum erro em javascript, pois caso haja, todo o código abaixo do erro não funcionará.

    Fabio

  • Flávio

    Olá Fábio,

    Primeiramente agradeço ao ótimo conteúdo do dicascodeigniter.
    Gostaria de uma opinião sua, seria uma boa prática se eu utilizasse o mesmo
    formulário de edição para cadastro também ?. Não sei se é um boa prática ,
    estou pensando na facilidade para dar manutenção….

  • Olá Flávio.

    Sim, o ideal é usar o mesmo formulário, assim a manutenção fica mais fácil. E pra implementar é bem simples. Eu costumo fazer assim: dentro do formulário eu coloco um campo do tipo hidden chamado “id_cliente” por exemplo. Toda vez que o formulário for postado, este campo irá junto no post contendo ou não um valor.

    E você determina se este campo conterá um valor dependendo do link que o usuário clicar. Se ele for editar o registro, então você passa o valor “id_cliente” pra view, caso seja uma inserção, esta variável irá vazia.

    Após o post, no controller eu verifico se este campo contém um valor. Caso sim, então entendo que é uma edição, e faço um update. Caso o campo venha vazio, entendo que é uma inserção, então faço um insert.

    No CodeIgniter fica muito fácil implementar isso, pois uma vez que você preparou os campos em um array que será enviado ao model, basta verificar se o campo id_cliente contém algo. Caso sim, faça um $this->db->where(‘campo’, $id_cliente)->update(‘tabela’, $dados), caso não, faça um $this->db->insert(‘tabela’, $dados ).

    Não entrei muito em detalhes, mas a ideia é esta.

    Abraços
    Fábio

  • Waldir

    Post show de bola!!!!!
    Só uma duvida, pq não funciona no google chrome?

    na minha aplicação só roda no firefox :/

  • Olá Waldir

    Estranho. Desenvolvi todo o código no Chrome, deveria funcionar.

    Este exemplo usa bastante javascript. Abra o Chrome e aperte F12, e veja se existe algum erro de JavaScript.

    Fabio

  • Waldir

    Irei verificar, você tem skype? queria usar o mesmo método mas para cadastro. sou meio leigo quando se trata do modal.

  • Waldir, não existe como eu dar consultoria para projetos pessoais, ficaria impossível, para mim, fazer isto.

    Peço que você vá testando e vendo alguns exemplos. Após entender a lógica não fica tão difícil.

    Abraços
    Fábio

  • Waldir

    Segui sua dica, estudei o código e entendi!! muito obrigado!! super agradecido!! :DDDDDDD!!!!!!!!!!

  • Isso aí Waldir!

  • Waldir

    [off] Bom dia Fabio!! voltei rsrs. só queria tirar uma duvida, mas em outra situação que não tem relação com o post.
    pq quando tento imprimir alguma pagina desenvolvida pelo codeiginiter aparece o link do button?
    segue a imagem: https://uploaddeimagens.com.br/imagens/captura_de_tela_2015-06-25_as_10-19-22-png

  • Olá Waldir

    Não creio que isto tenha a ver com o CodeIgniter, pois o que é impresso é somente conteúdo HTML. Em páginas onde haverá impressão é recomendado você criar um estilo voltado para impressão e um estilo voltado para a mídia tela, assim, você configura os botões de impressão para não aparecerem quando a página for impressa.

    Dê uma procurada no google por: “esconder botão impressão css”

    Fábio

  • Waldir

    obrigado! resolvido!! você é dez!

  • Meus parabéns seus post são bem didáticos e com o diferencial de disponibilizar os códigos fontes continue assim, pois e de pessoas como você que o mundo precisa.

  • Moacir

    Ola, instalei e esta rodando a listagem porem nao aparece os dados no modal. e aparece este erro que nao sei o que é.(A PHP Error was encountered

    Severity: Notice

    Message: Only variable references should be returned by reference

    Filename: core/Common.php

    Line Number: 257

  • Moacir, veja a sua versão do CI. Dei uma pesquisada rápida na web e notei que este erro ocorre em versões antigas do CI.

    Abraços

  • Lucas Medeiros

    Olá, muito bom esse seu tutorial, fiz ele e funcionou normalmente.
    Mas implementando em meu projeto tive que criar mais modais para e não sei como organizar eles dentro da tela.

    Cada um dos Modais tem um formulário diferente que chama uma função diferente. Fiz 1 pra criar novo cliente, 1 pra editar e 1 pra excluir.

    Tem jeito de unir todos esses em um modal só e no final só recarregar o conteudo deles?

  • Olá Lucas

    Você até pode fazer isto, criar somente um modal e carregar seu conteúdo dinamicamente, mas não sei se é vantagem. O código a ser carregado dentro do modal terá que ficar em algum lugar no seu código HTML, ou seja, o espaço vai ser ocupado. O ideal mesmo, inclusive para fins de entendimento de código, é você criar cada modal separado no final do arquivo HTML com seu ID exclusivo para ser chamado posteriormente. Você pode usar também os includes do PHP para separar melhor os arquivos.

  • Lucas Medeiros

    Então eu estava testando carregar os dados dinamicamente, fiz uma função na minha classe cliente que recebe o “tipo” do modal e o “id” caso seja edição ou exclusão dos dados, e atraves dessa função eu chamo uma view que é o conteúdo do meu modal, como os modais já tem que ser populados com dados eu já faço a busca na mesma função que chama a view.

    Pensei mais em fazer isso devido a quantidade de código replicada na minha aplicação, pois alguns modais tem que funcionar em todas as telas.

    O que acha, devo continuar nessa linha ou realmente é melhor deixar um código só para os modais?

    Obrigado pela atenção.

  • Walney Moreira Klein

    muito bom, consegui implementar, tem como nos ensinar a colocar os botões para incluir,excluir e pesquisar e se puder checkbox para marcar titulos minha ideia e usar isso com o que ensinou de boletos e criar um gerador de boletos pode nos ensinar e obrigado.

  • Richard Barcelos

    No CI 3 não funciona não… sabe se o arquivo foi alterado?

  • Olá Richard

    Estranho, não tem porque não funcionar. Veja se o short_open_tag está habilitado como é dito no Update no começo do post.

  • roberto joao rosa jr

    Se tivesse uma opção de adicionar novo cliente seria perfeito !
    Obrigado.

  • Seu desejo foi realizado!

    https://youtu.be/8T9_IPenQeE

  • Informática manutenção

    Ola! sou iniciante em php/codeigniter mas consegui adequar o código a minha necessidade- Vlw! Porem gostaria de fazer com que as linhas não aparecessem em ordem alfabetica e sim na ordem de cadastro, do mais novo para o mais velho. Poderia me dar uma dica para resolver isso? obrigado.

  • Informática manutenção

    Ops! Consegui. Obrigado novamente pelo post!

  • Jorge Paulo Santos

    Ola, Fábio, primeiramente lhe parabenizar pela iniciativa. Também sou iniciante em PHP e achei seu conteúdo muito bom, baixei os seus fontes e ao executar me aparece esse erro, pode me ajudar com isso.. “A PHP Error was countered Severity: Notice Message: Undefined variable: cliente Filename: views/home.php Line Number: 95”

    obrigado..

  • Olá Jorge.

    Por favor, veja o texto no início deste post.

    Abraços
    Fábio