Publicado em

CRUD com Bootstrap, PHP & MySQL – Parte IV

Esta é uma série de tutoriais, na qual você vai aprender uma forma eficaz de implementar um sistema de CRUD completo, usando o Bootstrap no front-end e PHP com MySQL no back end.

Agora, neste tutorial, você vai ver como criar os arquivos funções para implementar os formulários de inserção e a edição no cadastro de clientes. Além disso, vamos criar as funções de persistência dessas informações no banco de dados.

crud-bootstrap-customers-add

Ao final deste tutorial, você vai ter uma estrutura básica de cadastro de clientes para reaproveitar no projeto, na qual o usuário vai poder preencher os dados do cadastro de clientes.

Aviso: Devido a outros projetos, vou adicionar as explicações de cada código aos poucos, durante a semana.


Antes de Começar

Eu vou assumir que você já está com o seu ambiente de desenvolvimento funcionando, e que já passou pelas partes anteriores desta série.

Se você ainda não estiver com o ambiente pronto, é só ver a introdução desta série para instalar os pré-requisitos, e criar o BD.

Este tutorial é um pouco extenso, e tem alguns códigos mais complexos. Separe um tempo para entender bem, e caso não entenda alguma parte, é só perguntar nos comentários.


Passo 1: Crie a Função de Cadastro

Voltando à pasta “customers“, adicione estas a função de cadastro no arquivo functions.php:


Passo 2: Crie o Formulário de Cadastro

Agora, crie um arquivo chamado add.php na pasta customers. Esse arquivo vai ter a marcação do formulário de cadastro do cliente:


Passo  3: Crie a Função de Persistência no BD

No arquivo database.php, implemente a função que vai inserir um registro no banco de dados:


Passo 4: Crie a Função de Edição/Atualização

Agora, vamos fazer a parte de edição, ou atualização dos clientes.

O primeiro passo é implementar a função edit() no módulo de clientes, ou seja, no arquivo functions.php:

 


Passo 5: Implemente o Formulário de Edição

Agora, crie um arquivo chamado edit.php na pasta customers. Esse arquivo vai ter a marcação do formulário de edição do cliente, que é quase igual à do cadastro:

 


Passo  6: Crie a Função de Atualização no BD

E no arquivo database.php, implemente a função que faz a atualização de um registro no banco de dados:

 


Próximos Passos…

Há várias melhorias possíveis nesse código. Mas, como este é um tutorial para você começar a entender o CRUD, aos poucos será possível adicionar outras funcionalidades e melhorar a segurança e o reaproveitamento de funções.

No próximo tutorial, vamos ver a parte de exibição dos detalhes de um registro (Details).

38 comentários sobre “CRUD com Bootstrap, PHP & MySQL – Parte IV

  1. Qual a previsão da continuação desse tutorial?, estou gostando bastante, está muito bom parabéns!

  2. Muito Bom!!! Tem algum demo?

  3. Ola, encontrei um erro em edit.php, linha 10. O update não estava funcionando, então vi que o update estava se baseando em “name”, mas deveria ser pelo “id”. Então modifiquei e funcionou, segue o trecho de código: <form action="edit.php?id=”

    1. Desculpe, não foi o código completo, na linha 10, substitua:
      $customer[‘name’] por $customer[‘id’]

    2. Muito obrigado, Iuri!
      É isso mesmo, pelo id. Passou despercebido.

      Já corrigi aqui, também.

  4. Muito bom o tutorial!
    Parabéns pelo trabalho, mas eu estou com um problema,
    ao cadastrar ou remover um elemento, não estão aparecendo as
    mensagens, elas deveriam aparecer?

  5. Boa noite pessoal !

    Segui todas as etapas do tutorial, todas as funções estão funcionando, exceto a de adicionar/inserir dados (add()), preencho todo o formulário e quando clico em Salvar, ele vai para a tela de cliente (index.php) mas não grava no banco de dados. Alguém conseguiu inserir os dados ? Obrigado

    1. Tenta comentar a linha que contém “header(‘location: …” daí você pode fazer o debug (usando print_r) pra achar seu erro.

      O código do tutorial está correto.

      1. Ruan muitíssimo obrigado, consegui descobrir pelo debug !!!
        Parabéns pelo material, pelo apoio e iniciativa.

        Valeu !!

        1. Olá, assim como o amigo fiz todas as etapas e não add no banco!
          O que o amigo fez para salvar os registros?

          Parabéns pelo post!!! 😉

  6. Primeiro parabéns pelo tutorial, agora como poderia fazer para formatar a data de nascimento , para evitar o erro de cadastro no formato dd/mm/yyyy? Dojeito que está funciona muito bem ma no formato YYYY/mm/dd sendodigitado no form. Como tratar esse POST antes de grvar no banco?

  7. Galera Consigo editar mais nao inserir um novo Registro nao da nem um tipo de erro mais nao inseri no banco alguem pode me ajudar ?

  8. Tudo funcionando muito bem, exceto ao adicionar o telefone, ele grava dados diferentes do digitado. Deve ser algo referente ao formato, vou investigar. Obrigado pelas aulas!

    1. Obrigado, Fernando.

      Se o telefone estiver como INT, pode acontecer de alguns números(grandes) não serem suportados por causa do limite. Daí ele grava diferente.

      Abs.
      Ruan

      1. É isso mesmo Ruan. Obrigado. Publiquei minha resposta no artigo errado, agora que vi sua resposta, segue meu comentário:

        Olá Ruan, escrevi mais cedo sobre o problema ao gravar o número de telefone e descobri a solução.

        O problema ocorre porque o campo telefone foi definido no banco de dados como tipo INT e como não há validação na entrada, alguns dados podem ser perdidos ou modificados ao gravar. O tamanho máximo de um campo INT é: 2147483647, no caso o dado inserido foi “3155555555”, e o sistema gravou: 2147483647.

        A melhor solução na minha opinião é alterar a definição do campo no banco de dados para VARCHAR pois o telefone além de não ser índice, apresenta-se como um valor textual e não haverá necessidade de cálculos. O mesmo deve ser feito para os campos zip_code e mobile. Apesar de aumentar um pouco o tamanho do banco de dados, esta é a melhor prática em se tratando de modelagem de dados.

        Há exceção no campo ie, que apesar de não ser utilizado para cálculos, poderia ser utilizado como índice, porém alteraria a definição para BIGINT. Se este não for utilizado como índice, a definição pode ser VARCHAR também: a mesma lógica que você utilizou para cpf_cnpj.

        Espero ter contribuído. Grande Abraço!

  9. Muito bom desenvolvimento e didática. Parabéns !

    Na parte de cadastro sem problemas, só não fiz o css ainda.
    Porém, em visualizar e editar, não está buscando os dados, nem gravando.

    1. Resolvido a visualização e edição.

      Mas não consigo excluir. Nada acontece.

  10. Adicionar cliente e o editar quando clico no botão salvar dá erro 404, o que pode ser?

  11. Olá, segui os passos do tutorial, mas estou com dificuldade na parte de inserção de dados. Quando clico em salvar o sistema vai para a tela com a tabela de clientes e o registro não é salvo. Também percebi que quando faço uma edição não está sendo exibido as mensagens de sucesso ou erro. Grato pela ajuda.

  12. Comente a linha que tem o redirecionaento: “header(‘location: index.php’)
    Daí verifique qual erro pode estar ocorrendo. Revise seu código todo, desde o database.php

    As mensagens não estão implementadas, ainda.

  13. Muito organizado e limpo o seu projeto. As vezes fica até difícil de entender um pouco, porque você tenta resumir e reutilizar os códigos o máximo possível, o que é bom.

    1. Obrigado, Leandro.

      A intenção é essa mesma: reutilizar código.

  14. boa tarde!
    gostei muito do seu trabalho

    estou com um problema
    Notice: Use of undefined constant open_database – assumed ‘open_database’ in C:\wamp64\www\exc\index.php on line 5

    e nesse aqui
    Fatal error: Call to undefined function add() in C:\wamp64\www\exc\customers\add.php on line 3

    poderia ajudar

  15. Boa Noite, Parabéns pelo site e tutoriais é de grande importância para quem está aprendendo..

    Estou com uma dúvida: no cadastro da data de nascimento, temos que digitar no input o formato americano para que a data seja salva corretamente no banco. Como digitar o formato brasileiro e ele ainda sim cadastrar o americano? Obrigado.

  16. Olá queria colocar um modal pra quando salvar aparecer mensagem para usuário como posso fazer isso ?

  17. Bom dia Ruan! Sobre a inserção de um novo registro no BD, copiei fielmente sua instrução e quando clico no botão salvar de cadastro do novo cliente, nada acontece e volto a pagina index.php de cliente. Já testei os outros comandos, atualizar, deletar e funcionam perfeitamente, mas a inserção nem da erro em tela ou pelo inspetor de elementos do Chrome, nem cadastra os dados que coloquei nos inputs. Poderia me ajudar? Desde já agradeço pelo ótimo tutorial.

    Links no PasteBin com meu código
    http://pastebin.com/taE8z8QM
    http://pastebin.com/mGj0YBri
    http://pastebin.com/LFUpQNqD

    1. Valney Filho, conseguiu resolver, estou na mesma situação.

      1. Tentando resolver esta situação também da inserção dos dados.

    2. Comente a linha que contém “header(‘location: …” ); Essa função que faz o redirecionamento.

      Depois, use a função print_r( $variavel ) em cada função para fazer o debug e achar seu erro.

      1. Já consegui Ruan, obrigado! Agora só estou com um problema pra mostrar os dados que vem nesta parte da função find( );

        if ($result) {
        if ($result->num_rows > 0) {
        $found = $result->fetch_all(MYSQLI_ASSOC);
        }
        }
        Aqui o que faço? Aqui dá erro no mysqli mesmo, não dá pra debugar rsrsrs… pesquisei aqui e ainda não encontrei o erro. Esta linha que vem o $found vem comentada no código do tutorial.

  18. Boa Tarde, Estou com o mesmo problema na página add.php segui o processo na medida que está no site, o botão salvar não acessa o banco e não armazena as informações. Vejo que vai para página index.php.

    Favor Alguém pode me ajudar, por que o código está bom bem organizado, mas está faltando algo, como não sou mestre em PHP, estou começando agora..
    Aguardo a respostas de amigos..
    Grato,
    Marcos

    1. Nesta parte Marcos, só consegui resolver quando alterei na tabela do banco de dados os tipos de dados que o formulário recebe… rsrs… ou você trata no próprio código ou então vai direto na tabela e joga um String em algumas destas variáveis.

  19. PARA QUEM ESTÁ COM PROBLEMA EM INSERIR OS DADOS NA TABELA, QUANDO CLICA EM SALVAR:

    O erro está na função save(), quando vai inserir os valores com SQL: Está faltando espaços. Apenas isto. Segue:
    $sql = “INSERT INTO ” . $table . ” ($columns) ” . ” VALUES ” . “($values);”;

    Pelo menos no meu era isso. Para quem estiver com outro problema, experimente dar print_r($columns) e print_r($values) antes da apresentar a variável $sql e execute a função no add.php clicando em Salvar, vendo o que está inserindo e se a quantidade de campos da tabela batem com a quantidade de parâmetros. Senão, faça bater. No meu, também não batia. Pois eu segui o tutorial fazendo já o meu projeto, que são campos diferentes. Então, eu sem querer acabei copiando campos do tutor que não existiam na minha tabela SQL.
    Se mesmo assim houver outro erro, vão colocando print_r($variável) sempre depois da variável receber algum valor e teste direto no sistema web procurando o erro.
    Espero ter ajudado!!
    Abraço.

    1. Bom, não encontrei erros na função.
      Mas, obrigado pela contribuição, que pode servir a alguém.

  20. Boa tarde, Ruan. Adorei seu tutorial, muito obrigado!! Estou conseguindo produzir meu projeto de processo seletivo graças a ele.
    Estou com uma dúvida:
    Na function save() dentro de database.php, eu estava com erros ao inserir os valores no BD. Porém, no meu try {}, não estava mostrando nenhuma mensagem sobre o registro cadastrado ter sucesso ou não, pelo $_SESSION.
    Tem ideia do que posso fazer e por onde começar?
    Obrigado!
    Abraços

    1. O $_SESSION deve estar sendo definido, mas não exibido.

      Você pode usar o print_r($_SESSION) nas páginas (views) pra ver o que tem, e depois criar uma

      <

      div> pra exibir as mensagens, quando tiver.

  21. Como eu poderia modificar o $modified[‘name’] por exemplo na função de cadastro (add.php) ? pois tenho
    um campo $modified[‘valor] no meu programa, só que por algum motivo não consigo modificar…
    tentei colocar $modified[‘valor’] = função_que_formata($modified[‘valor’]); Mas nao deu certo… ele duplica a chave ‘valor’. 🙁

    1. é $customer[‘valor’] em vez de $modified[‘valor’]. Apenas me corrigindo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *