CRUD com PHP orientado a objetos, PDO e MySQL
HTML-код
- Опубликовано: 15 окт 2024
- Criar um sistema de cadastro em PHP não é um bicho de sete cabeças.
No vídeo de hoje vamos desenvolver um sistema de cadastro completo - aquele famoso CRUD - utilizando PHP orientado a objetos, PDO e MySQL.
Durante esse desenvolvimento você aprender o conceito de query builder e como isso pode diminuir a complexidade do cadastro dentro do seu sistema.
Tem alguma dúvida? Comenta aqui que a gente te ajuda!
-------------
Requisitos para o vídeo:
PHP 7 ou superior
MySQL
Composer
-------------
Ambiente PHP, Apache e MySQL com Docker:
Blog do Marcos Teodoro: marcosteodoro....
PHP e MySQL:
Linux: www.digitaloce...
Mac: jasonmccreary....
Windows: www.apachefrie...
Composer: getcomposer.or...
________
Código no GitHub: github.com/wil...
________
Redes sociais:
Instagram: / wdevoficial
Facebook: / wdevoficial
Twitter: / wdevoficial
________
Créditos
Abertura utiliza vídeos do Pexel (www.pexels.com/) dos autores Carlos Arribas, Joseph Redfield e BuildWith Angga
________
#php #mysql #crud
Eu pesquisei vários tutoriais gringos, e posso dizer com propriedade, o seu foi o melhor que encontrei, e o mais didático. Parabéns pelo seu canal e seu potencial. Grande abraço. Ganhou um novo fã.
Muito obrigado, Leopoldo!
Fico muito feliz em ajudar
Muito obrigado pelo carinho e por acompanhar o canal!
Grande abraço!
Demorei um dia para realizar o projeto inteiro.
Apesar de não assimilar tudo com clareza, por falta de conhecimento da minha parte, valeu apena cada minuto.
Obrigado.
Agradecidissímo!!!
Kara fiquei matutando um tempão essas soluções finais kkkkkkkkkk
dai fuçava, rellia o código, testava e nada... só continuei e deu tudo certo!
Aprendizado para quando a variável não está sendo encontrada > Verificar o escopo da instância!
Thanks!!!!!
Melhor vídeo sobre construção de CRUD com PHP que já assisti. Muito bem explicado, muito boa a didática. Parabéns.
Mesmo depois de algum tempo o vídeo ainda é SHOWWW de bola....
curti muito a sua aula e os erros que foi informado no final fui tratando durante a aula e fazendo o tratamento
Entrou na minha lista de referências sobre programação. Muito obrigado!
Muito obrigado, Igor! Grande abraço!
Essa aula sem dúvida dispensa comentários! Eu só me perdi um pouco com a velocidade na explicação e na troca de telas. Como o vídeo é longo, mesmo pausando e tentando voltar foi um pouco complicado.
Parabéns e muito obrigado por compartilhar tanto conhecimento.
Todas as aulas desse cara são excelentes! Recomendo assistir todas elas.
Parabéns pelo conhecimento, didática e organização. Vale cada minuto de atenção ao conteúdo.
Sensacional a didática do conteúdo, consegui aprender oque não consegui em meu curso técnico. Reduziu bastante ruído em relação a programação em PHP. GRATO
Esse vídeo deveria ser utilidade pública, esse cara é sensacional.
Show!!!!!! Parabéns pela objetividade e clareza. Didática perfeita. Quero mais conteúdos desse naipe.
Sinceramente, muito bom seu vídeo, você tem um dom para transmitir as informações de maneira simples e compreensível. Parabéns !!!
... excelente conteúdo! parabéns pelo trabalho...
Excelente curso.. Super Indico.. Parabens meu amigo !!!
O seu vídeo me ajudou MUITO, agora sei como posso utilizar melhor POO, eu não sabia como utilizar pdo de uma classe em outra classe, mas o seu vídeo, além de me ajudar em tirar essa minha duvida do PDO, me deu mais ideias em relação a POO para utilizar em meus projetos.
Conteúdo certo no momento certo da minha curva de aprendizado. Valew a inscrição. Parabéns pelo conteúdo!
Gostei muito do seu vídeo. Conclui com sucesso todo o desenvolvimento. É claro que não terminei em 1 hora e 37 minutos. Sou programador há muitos anos em várias linguagens orientadas a objetos mas no php eu tenho pouca experiência. Gostei muito porque você desenvolveu de uma maneira que mostra até mesmo como perseguir os erros de programação que aliás são muitos frequentes e precisamos de uma forma de debugar isto. Uma sugestão seria que você desse um tempinho maior ao concluir uma digitação pois assim fica mais fácil dar uma parada no vídeo para podermos ler o código na tela e digita, mas no geral gostei da sua didática. Muito obrigado por compartilhar seus conhecimentos.
O video ficou bem bacana...olhando a estrutura podemos utilizar isso em qualquer projeto...tenho alguns projetos que ja penei com o CRUD mais dessa forma achei BEM SHOW DE BOLA!!!!
Aula incrível, com certeza este professor além de lecionar também trabalha com desenvolvimento, pois ele propõe formas ágeis de você economizar muitas linhas de códigos, um exemplo é a função insert, por muitas vezes eu criei na mão e sempre caia em algum erro por falta de interrogações ou etc... Parabéns pela ótima aula
Que satisfação assistir o vídeo até o final!!! Adorei o conteúdo!
sensacional mano, me ajudou muito, entrei em uma empresa agora com sistema legado e vim do mundo somente de laravel e me ajudou!
Ótima explicação, segui o passo a passo e deu certinho, didática excelente, Agoira pintou uam duvida, aliás problema para mim, subi o site pelo filezila hospedado na hostinger, e por la não funciona, e não consegui resolver .
Excelente material como sempre, ja refiz esse vídeo 3 vezes, adaptando a projetos pessoais
Um aviso para quem for criar utilizando o PHP 8+, a função strlen() deve ser substituída por !empty()
oxe, sério? Mas são coisas diferentes. É isso mesmo?
Perfeito!!! Sua aula me ajudou muito. Muito obrigado
Cara é brabo! Tô fazendo minhas primeiras aplicações conectadas a bancos de dados com PHP, e acabei de perceber que não uso praticamente nada do que realmente interessa, PHP orientado a objetos e PDO. Obrigado!
Merece meu like umas mil vezes, didática muito boa, obrigado, muito obrigado mesmo!
Muito bom! Didática perfeita.
Muito bom tua explicação, consegue pasar muito bem as logicas e funções do sistema. Abraço!
Muito obrigado, esse CRUD me deu uma vaga de emprego !
sério mano?
Uma aula excelente. Parabéns professor Willian, 'vossa excelência' ensina de maneira simples e clara.
Isso é para poucos! Muito obrigado por compartilhar esse conhecimento.
Fantastico o CRUD realizado nesta aula. Parabéns.
Eu gostei muito da explicação. Na hora da listagem, achei bagunçado fazer uma variavel pra armazenar o foreach, preferi colocar o foreach dentro do tbody e deixar como por exemplo, $vaga->titulo dentro do
Excelente conteúdo, parabéns!
Aprendi muito contigo.
Muito bom seu video, dá pra ter uma boa experiencia na linguagem. Parabéns. Só percebi uma coisinha no query builder, a dificuldade em aplicar JOINS... do mais, foi tudo MASSA.
Excelente aula ! Parabens.
Muito bom esse CRUD. To tentando fazer rodar aqui.
parabens
Primeiramente quero agradecer ao conteúdo de excelente qualidade.
Surgiu o seguinte exercício. Notei que o update realiza a modificação independentemente de estarem iguais, por exemplo:
Se eu editasse apenas o status a where final ficará UPDATE tabela SET artigo=? , descricao=?, status=?
Se eu apertar em salvar a edição mesmo não havendo mudança alguma também será dado como alteração com sucesso.
pensei... há uma forma de comparar os dados anteriores para realizar o update somente no campo alterado?
Seria bacana se houvesse algo sobre.
Valeu 👋
Amei essa aula! Parabéns, excelente didática!!
Excelente! Tudo funcionando adequadamente. Muito obrigado, WDEV.
sensacionallll... parabens!!!
Aula top! Parabens pelo conteudo, aprendi muita coisa
parabens, a comunidade PHP estava precisando de tutorias de alto nivel igual aos que vc esta fazendo .
Excelente! Muito bom o conteúdo e as explicações. Sugestão: exemplos simulando o Master/Detail (Notas/Itens), formulário de entrada de dados buscando dados de tabelas principais (lookup). Relatórios com quebras e sumarizações (PDF) e dashboard).
professor vc é o cara! Parabéns
Sensacional! Parabéns!!!
Valeu demais pelo vídeo!
Se é loco brother, cara tenho 2 curso completo em PHP fullstack e esse único vídeo me deu muito mais informação do que os dois cursos juntos Kkkkk... Caraca meu irmão, parabéns pelo canal e continua nos ensinando, a forma como você explica e detalha as coisas é o seu diferencial, to feliz de mais por esses vídeos parabéns.
o problema é que o pessoal que passa os cursos, acreditam que todo mundo tem muita noção só com a aula sobre variaveis. Eu fiz um curso que considero razoavel, porem os professores sequer falaram em crud, que ao meu ver, ja deveria ser ensinado desde o começo, moral da historia: fiquei fera em operações, arrays e não tinha a menor ideia do que fazer com isso. Eu só fui aprender mesmo a lidar com php aqui com o prof. william.
ótimo video. Depois poderia gravar um video de um sistema CRUD com autenticação de usuário utilizando o padrão de diretórios MVC
Muito boa tua aula mano obg.
cria uma plataforma de curso mano onde e dividido em 20 min cada curso e 5 min obrigatorio de descanso pq assim nao fica tao extensa e ajuda melhor no aprendizado. mas conteudo execelente gostei pra camba muito bom mesmo parabens e obg mais uma vez
Like 1000 vezes !!!
Sensacional !!!
Valeu Professor!!!
Professor, agora só falta fazeres um com MVC que viveremos felizes para sempre, cambio
IiijiiiniiiiiiiminijjiinjijnninjinijiijnnninnnmoomninnnnnnIiijiiiniiiiiiiminijjiinjijnnnnninjinijiijnnninnnmoomninnnnnnnnnnnninnnn
Estou começando em desenvolvimento e seu conteúdo ajudou muito. Só me ocorreram 2 problemas: Na hora de criar os input radio, se eu não deixa-los com o mesmo "name", eles se comportam como checkbox; outro foi na hora de testar onde você usa o "die('cadastrar');" que no meu caso, preenchendo ou não os campos, sempre retorna "cadastrar". Minha sugestão é que se possível, comente os possíveis problemas ou os mais comuns em cada etapa de debug q vc fizer. Ótimo trabalho e obrigado por compartilhar, vc não tem noção do quanto isso ajuda.
Muito obrigado pelo Feedback, Evandro!
Fico muito feliz em ajudar e é muito bom saber que os conteúdos estão te ajudando hehe
Sobre os pontos que destacou sobre os radios e dar mais detalhes nos momentos do debug, vou tentar detalhar melhor durante os vídeos sim.
Mas já deixo aqui uma explicação pra te ajudar: os radios necessitam realmente de ter o mesmo valor do atributo "name" para que o navegador entenda que apenas um deve ser selecionado, é meio que uma forma de agrupar essa informação.
Já sobre o die('cadastrar'), não estamos validando se os valores foram preenchidos, mas sim se eles existem dentro do $_POST (isset).
Você pode adicionar mais validações usando strlen($variavel) ou empty($variavel) e assim deixar o formulário com uma validação bem completa! hehe
No vídeo sobre arrays aqui do canal, dou mais detalhes sobre o isset (ruclips.net/video/0ODab_KrjCg/видео.html) e várias outras funções para manipularmos arrays.
E como o $_POST é um array, o que vemos nesse vídeo pode ajudar bastante hehe
Muito obrigado por acompanhar o canal e um grande abraço!
Parabens pelo material!!! Como fez esse debug(aparecer toda a linha)?
Parabéns pela excelente aula. Tenho uma dúvida.... Como seria para usar um campo select de chave estrangeira? seria feito uma function left join entre as tabelas? E na listagem também usaria o left join?
Oi William, aproveitei essa aula pra criar um cadastro de Ordens de Serviço, ficou muito bom. Com uma ressalva, não estou conseguindo salvar o campo tipo DATETIMEPICKER no DB. Você tem alguma aula que ensine isso???
Parabéns. Gostei da aula. Vou tentar fazer amanhã.
Muito bom mano, sua explicação é perfeita e o CRUD tá fantástico...
Dica de vídeo: Poderia fazer um vídeo ensinando fazer um sistema de login seguro, seria muito bom..
Parabéns!!! Muito boa a sua didática! Excelente vídeo! Estou aprendendo POO contigo. Tem como ensinar alguma coisa com Laravel ?
Professor, poderia por favor nos dar uma aula nos ensinando a criar DO ZERO um modelo MVC para PHP?? A partir do qual poderíamos desenvolver qualquer sistema. Obrigado e mais uma vez parabéns pelo excelente conteúdo e didática.
Quero estar junto nessa? Já foi feito essa aula ou ainda não ?
Essa é a idéia do vídeo
Muito bom!!! Parabéns pelo vídeo, me ajudou muito.
Vídeo muito bom, você pensa em abordar o tema de pensamento computacional também? Quebrando um problema maior em partes e resolvendo cada uma separadamente para chegar em um resultado final!
Olá, Isaque. Tudo bem?
Realmente é um ótimo tema e pretendo trazer conteúdos sobre isso no canal em breve.
Provavelmente dividiremos em capítulos, para facilitar o entendimento hehe
Muito obrigado pelo feedback e pela indicação de tema
Grande abraço!
Hey, prof William, obrigado pelo conteudo de alta qualidade e de valor, porém tenha geradouma duvida!
No caso, de tivermos muitos objectos, como por exemplo, professor, aluno, funcionario, etc, será necessario criar classes para manipulação com DB para cada objecto?
Excelente video, já me inscrevi no canal, uma sgestão faz um video fazendo um crud com padrão MVC, ai seria muito legal.
Obrigado e Sucesso!
Muito obrigado, Pedro!
Obrigado pela dica de conteúdo também: pode deixar que vou fazer um vídeo com MVC também!
Abraços!
Excelente sugestão! Seria o máximo converter essa mesma aula em MVC. Eu até forcei um pouco e tentei pelo menos dar os nomes das pastas no padrão MVC conforme a ação de cada classe. Mas sei que falta muita coisa que ainda não compreendo...
Cara, tu é muito bom! Sou fã e estou aprendendo muito contigo.
mano que aula top😸
Tutorial muito bom!
Olá professor, estou instalando o VsCode e achei muito bacana o visual e a facilidade de interação que você tem para digitar os códigos, fora colorização, etc...
Você teria uma lista de recomendação ou vídeo falando sobre quais extensões você usa aí para fazer suas aulas ?
Obrigado e desculpe pelo assunto Off-topic.
Sigo teus vídeos e estou aprendendo muito com eles. Parabéns 👏👏👏
Depois faz um vídeo ensinando a usar Ajax (Vanilla)
Muito bomm a explicação, parabéns !!!!
Ótimo vídeo. Parabéns, já me inscrevi pra aguardar os próximos. Teria como fazer algum conteúdo abordando bitwise com PHP?
Opa, muito obrigado @ZendirGamer!
Bitwise é um tema muito bacana e seu uso correto pode trazer grandes benefícios ao sistema, com certeza trarei um vídeo sobre. Obrigado pela indicação hehe
obrigado agora é só praticar.
Projeto muito legal para uma primeira demonstração e a arquitetura adotada também foi muito satisfatória. Tenho duas observações, somente (opiniões pessoais):
1 Não acho muito legal quebrar o HTML em diferentes documentos (não sei se tem como evitar isso, não parei pra testar ainda, mas se tiver, acredito que deve ser prioridade deixar o documento completo em um arquivo só);
2 Antes de começar um desenvolvimento desse tipo, seria interessante ilustrar para o público um diagrama do projeto com as entidades e suas relações. Acredito que todos entenderiam a abordagem tomada para desenvolver a aplicação.
Enfim, são apenas essas minhas principais observações. Espero que faça sentido.
Continue com o ótimo trabalho, precisamos de mais pessoas como você na comunidade!! 🚀
Abraço!!
Parabéns Gustavo Lima... Mandou muito bem com essa aula, abandona o sertanejo e ajuda agente estudar !
hahaha Muito obrigado, Matheus!
Grande abraço! haha
Men, tentei fazer, esse codigo, mais apartir do teste de insert no banco tudo desandou, nada mais funcionou, tentei corrigir ao maximo meu codigo mais sem sucesso, se pudesse por gentileza me dar uma dica do que esta acontecendo, eu subi meu codigo no repositório GitHub.
github.com/matheushenrycb/www.escola.com.br.git
@@matheushenry19 olhei seu repositório no GitHub, mas estão faltando as pastas includes e a pasta app também.
Você poderia subir essas pastas também, por favor?
@@wdevoficial deve ter dado um errinho na hora de subir. Atualizei e adicionei as pastas
Obrigado mesmo por conferir. Fiz de uma forma diferente, mas acredito que o conceito foi o mesmo
Dentro do seu exemplo como insiro commit e rollback , estou fazendo uma aplicacao que tenho que inserir ao mesmo tempo varios insert no banco de dado, caso um insert gere erro preciso que seja cancelado toda acao
Professor, pq não consigo usar o $this->tableName dentro do getVagas? Fiz um protected $tableName = 't_vagas'; e fiz assim: Database($this->tableName))->select, mas retorna esse erro: Using '$this' when not in object context
Mestre William, poderia dar apenas uma luz ? grato - canal foda o teu, meus parabéns
Professor, tudo bem??
Estou procurando material de como trabalhar com campos multivalorados na hora de pegar a query do banco para o php, tem algum conteúdo a respeito? Vlw
Salve prof, muito obrigado pelo conteúdo e pela didática. Gostaria de um auxílio. Na parte da listagem das vagas na hora de fazer o método select no arquivo Database.php não consigo do retorno em tela nem do PDOStatement, nem do select. Teria algo a ver com o editor? Uso o sublime text, mas o que me gera essa dúvida é que consegui retorno de objetos e arrays em outros momentos. Grato desde já.
uma dúvida em 27:00 se eu tiver uma chave estrangeira que se relaciona com essa tabela eu específico ela nas variáveis da classe?
Ajudou muito! Grato
Cara, parabéns ótimas explicações, se vc puder fazer um vídeo com PDO com INNER JOIN, seria uma maravilha. ( relacionamentos de tabelas ).
Olá Andre. Tudo bem?
Muito obrigado feedback e pela indicação de tema. Vou preparar um conteúdo bem legal sobre JOINs hehe
Grande abraço!
cara, não sei se é isso que tu procura, mas eu consegui trabalhar com duas tabelas assim (não sei se o professor aprova isso, não tenho tanta noção de como usar php corretamente)
//aqui é o que o professor ensinou
public function insert ($values){
$fields = array_keys($values);
$binds = array_pad([],count($fields),'?');
$query = 'INSERT INTO '.$this->table.' ('.implode(',',$fields).') VALUES ('.implode(',',$binds).')';
$this->execute($query,array_values($values));
//insere os dados na tabela principal e em uma outra tabela, criei uma segunda query...
$query2 = 'INSERT INTO sua_tabela_adicional ('.implode(',',$fields).') VALUES ('.implode(',',$binds).')';
$this->execute($query2,array_values($values));
//volta ao que o professor ensinou
return $this->connection->lastInsertId();
}
Se o professor ver esse comentario, poderia me dar um feedback sobre a minha solução e sugerir melhorias?
44:13 qual é esse atalho para organizar a formatação do código?
Ali no Index, não posso declarar uma nova entidade?? ( ex Vagas e Empresas)
Se adiciono uma nova, para de funcionar tudo..
Sensacional
É uma ideia muito interessante ter instruções SQL em linha de comando, pelo menos usar uma ferramenta como o MySQL Workbench.
Oi! Eu travei na parte de criação do DB no codigo, onde eu encontro as credenciais, inicialmente segui o video e utilizei o phpmyadmin do xampp. Ta errado ?
Parabéns!!!! Poderia fazer um vídeo sobre API restfull?
Cara, muito bom!
Parabéns ganhou mais um inscrito no seu canal
Qual seria o atalho para inserir a phpdoc nas variaveis?
Professor, pq não usar os métodos gets e sets?
Parabéns pelo excelente conteúdo.Por favor qual a extensão de comentário você está usando?
Olá, Lúcia! Muito obrigado!
Uso a extensão "docblockr" no Atom para auxiliar nos comentários de propriedades, classes e métodos.
Esse cara eh bom
Por favor. Mais pra frente faz um vídeo de como seria editar um formulário onde os dados ficam em tabelas diferente (Banco de Dados Relacional). Fiz uma gambiarra no meu formulário, porque não encontrei nada sobre isso, com uma explicação tão boa. Faça um curso pago, você tem uma ótima didática. Parabéns.
Olá Paulo, muito obrigado pelo feedback!
E pretendo avançar o tema de bancos relacionais aqui no canal, pode ter certeza que logo faremos esse conteúdo.
E sobre o curso, estou planejando algumas coisas para 2021
Muito obrigado por seguir o canal e grande abraço!
Qual IDE você utiliza?
Muito boa sua explicação, parabens!
ATOM
Uma pergunta, se alguém puder me esclarecer?
No livro Clean Code, fala que não devemos comentar o nosso código, se fazemos isso significa que não estamos programando direito e o nosso código deve falar por si próprio e estar claro o suficiente para o entendermos, e também comentando ele, ao efetuar alguma alteração, podemos esquecer de mudar o comentário.
Então vai a pergunta: Devemos comentar o código ou não?
Faço esta pergunta porque estou vendo o professor comentar tudo, e me gerou essa dúvida, se ele está comentando somente por fins didáticos ou se devemos usar isso no nosso ambiente de produção.
Muito bom!
Aula espetacular! Agora, penso que programação orientada a objetos pode gerar excessos de fragmentação de código desnecessários, deixando código bem mais complexo do que deveria ser.