CRUD genérico com PHP e OOP - Aula 2

  • Publicado em: 30/01/2012
  • Revisado em: 25/10/2012
  • Categoria(s)PHP
  • Autor: Ricardo Bernardi
  • Newsletter: Inscreva-se

Em nossa segunda aula sobre a criação de um CRUD com PHP e OOP faremos a criação da classe que irá servir como base para toda e qualquer classe necessária para manipular uma tabela do banco de dados.

Iremos ver como criar e manipular os dados dessa classe com exemplos práticos para que todos possam entender o funcionamento como um todo. Nesta aula apenas iremos testar a classe base, para que a partir da próxima aula possamos fazer nossa primeira interação com o banco de dados, a inclusão de um registro.

Depois de assistir, deixe um comentário com sua opinião sobre a aula, aguardamos sua participação.

Mais posts desta série

Este post faz parte de uma série, confira tudo que já foi publicado sobre o mesmo assunto.

Compartilhe esse post:

Sobre o autor

Ricardo Bernardi

Sou técnico em hardware e desenvolvedor web, e sobre estes dois assuntos comecei a compartilhar aulas e artigos, tornando-me blogueiro em 2008. Em 2010 esse hobby virou profissão, e desde então tenho buscado melhorar e profissionalizar cada vez mais os projetos que mantenho na web.

Comentários

Atualmente temos 40 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.

  • carlos comentou em

    Olá ricardo,parabéns pelas aulas. Sei que as aulas são de 2012 mas vc poderia me ajudar, sou iniciante e ao replicar as aulas os comandos mysql_connect está descontinuado, neste caso o que deveria utilizar no lugar ? vlw

    Responder
  • Marco Túlio comentou em

    Estou com o seguinte erro e já refiz todo o código:
    Fatal error: Can't use method return value in write context in C:\wamp\www\CRUD\classes\base.class.php on line 16
    Por favor me ajude!

    Responder
  • marcosfbo comentou em

    Bom dia, professor!

    Estou na aula 02 do CRUD OOP:

    apos o 1º teste para verificarmos o __construct do cliente; e em vosso teste não ocorre tudo ok e não é apresentada mensagem ( ECHO '???'), em teste ( visualizado duas vezes em vossa aula) não identifiquei o pq deste erro:
    ------------------------------------------
    ( ! ) Warning: mysql_close() expects parameter 1 to be resource, string given in C:\Program Files\VertrigoServ\www\projetos\crudgenerico\classes\banco.class.php on line 20

    Call Stack# time memory Function Location

    1 0.0040 363088 banco->__destruct( ) ..\banco.class.php:0
    2 0.0040 363120 mysql_close ( ) ..\banco.class.php:20

    me ajude!

    Responder
  • Anderson Antonio comentou em

    Ótima aula, e como você mesmo diz: Taí o bichinho!
    tudo funcionando corretamente, como manda o figurino.
    Se puder me responder só pra esclarecimento de raciocínio:

    Em html, tenho a condição de estilizar minhas páginas em um arquivo externo ("estilo.css"), neste caso, posso entender que o sentido seria basicamente o mesmo?

    Como estou iniciando agora, na área da programação e esse curso já tem um tempo, pergunto:
    Há alguma mudança nesses códigos, embora em localhost esteja funcionando corretamente?

    De momento agradeço pela seriedade e qualidade dos conteúdos.

    até+

    Responder
  • Bruno Cardoso comentou em

    Cara, primeiramente parabéns e muito obrigado por suas aulas, estão me ajudando muito.

    Não pedindo muito, teria como enviar o script desta.. Pois está dando um erro na linha 27 do banco.class e já verifiquei uma centena de vez no meu e está correto aqui!

    Responder
  • André Ventura comentou em

    Olá Ricardo.

    É possivel utilizar a propiedade campopk com chaves compostas ?

    Caso não, poderia dar uma dica por onde seguir para que possa ser possível o uso de chaves compostas ?

    Obrigado,

    André Ventura

    Responder
    • Estes exemplos não foram pensados para trabalhar com multiplas tabelas ou PKs, mas tudo é possível se planejado. Eu apenas quis mostrar possibilidades com estes vídeos, agora fica a critério de cada um queimar alguns neurônios e montar classes mais complexas.

      Responder
  • Francisco Guimaraes comentou em

    Olá Ricardo, Parabéns pelo seu trabalho e a excelência didática de suas videoaulas. Já sou inscrito no seu canal e leitor se seu blog.

    Agora venho com uma dúvida e uma sugestão.

    A dúvida:

    Como eu poderia executar o inserir() com múltiplos objetos?
    Teria que adaptar a função para aceitar? ou teria que modificar a estrutura do array contido no bloco do IF em cliente.class.php?

    Bem, eu fiz uma gambiarra.. mas não sei se é o melhor jeito.

    Sugestão:

    Nos métodos da classe base.class.php, você poderia acrescentar um return $this para poder encadear os métodos!

    Por gentileza Veja o jeito que tentei executar:

    http://pastebin.com/yY1xLvLc

    Ps: não ocorreu erros, inseri os 2 registros... mas tive que instanciar 2 objetos da classe.. este é o melhor jeito?

    Fico no aguardo.

    Responder
    • O método criado no curso permite a inserção de registros únicos, para trabalhar com processamento em lote sugiro que crie um método específico e use arrays de dados para fazer a inserção.

      Responder
  • Sérgio comentou em

    Boa Tarde Ricardo!
    obrigado pelas VA's e parabens pelo seu trabalho...
    o meu construtor da classe banco não esta iniciando, na verdade eu recebo um erro fatal informando que o construtor não pode ser chamado já verifiquei a codificação toda e principalmente onde está gerando o erro.

    obrigado!

    Responder
  • Professor muito obrigado pelas video aulas, estou reimplementando alguns scripts no site que eu mantenho, pois o mesmo não tem nenhum tipo de segurança, agora já estou conseguindo reescrever os arquivos que interagem com o banco, muito bom.
    Essa semana talvez eu possa ter algumas dúvidas mas por enquanto é só um muito obrigado.

    Responder
  • Filipe comentou em

    Olá Ricardo. Estou com um problema que surge mais ou menos aos 20min de vídeo, quando você atribui os valores ao array cliente. Cada vez que eu atribuo um valor ao objeto cliente, por exemplo, não aparece nada na tela. Já de eu apenas criar o objeto e dar um print_r, ele mostra os valores do que foi preenchido. Alguém saberia me dizer o que pode estar ocorrendo?

    Responder
  • pedro felipe comentou em

    não estou conseguindo usar o delecampo, quando eu uso ele aprece Undefined property: Cliente::$campo_valores e Warning: array_key_exists() expects parameter 2 to be array, null given já revi o video muitas vezes não sei o que esta errado

    Responder
  • Juliano comentou em

    Olá Ricardo, parabéns pelo conteúdo aqui apresentado, cada assunto aqui apresentado é melhor que o outro, estou aprendendo muito com suas Vídeo Aulas, continuem assim, um forte abraço!

    Responder
  • fcbinfo comentou em

    Ricardo, eu novamente... já estou virando quase um flooder de comentários. Mas vamos lá. Se eu quiser unir os arquivos banco e base vou estar errando muito? É que sei la... require daqui e require de la, um que puxa o outro que é abstrato do outro (lol) complica demais pra mim que estou começando, e acho q se unir os 2 vai ficar mais fácil pra entender. Vai ficar muito errado se eu colocar todas as propriedades no inicio do arquivo banco e todas as funções logo abaixo?

    Responder
    • É que estas duas classes apesar de terem ligação, no meu ponto de vista não devem ser uma só, pois uma delas é a comunicação com o banco e outra é a base para a criação das classes relativas a cada tabela do seu sistema.

      Responder
  • Lucas comentou em

    Olá boa tarde Ricardo. Venho lhe parabenizar pelas vídeo aulas, estão excelentes.

    Estou com uma dúvida ,coloquei os codigos tudo certo mas na hora que eu vou dá um

    $cliente ->addCampo('bairro');

    vou ver lá na pagina de internet e aparece:

    [nome] => 
    [sobrenome] => 
    [1] =>

    Em vez de aparecer o nome do campo [bairro] aparece [1].
    Estou preso nesta parte e queria dá continuidade nas VA.
    já vi e revi a 2ªVA , se puder me ajudar serei muito grato !

    Responder
  • Fabio comentou em

    ops consegui achar o meu erro, tinha usado parentens no logar de []

    valeu, estou aprendendo muito aqui...

    Responder
  • Fabio comentou em

    Boa noite primeiramente parabéns pelo material, estou aprendendo muito em seu site.

    ao testar a classe cliente apresenta um erro "Can't use method return value in write context in C:\wamp\www\crud2\classes\base.class.php on line 13"

    na classe base linha 13 tenha o metodo abaixo:
    código fonte excluído pois não foi postado conforme as regras

    Note que não usei : apos if():, pois no dreamweaver não permitiu. poderia dar uma ajuda?

    obrigado

    Responder
  • Jameson Rodrigues comentou em

    Boa tarde, Ricardo

    estou na segunda aula já olhei todo o código e esta dando este erro:

    Catchable fatal error: Object of class clientes could not be converted to string in xxxclassesbanco.class.php on line 54

    $sql .="VALUES (";
    		for($i=0; $i<count($objeto->campos_valores); $i++):
    		$sql .= is_numeric($objeto->campos_valores[key($objeto->campos_valores)]) ? 
    		$objeto->campos_valores[key($$objeto->campos_valores)]:
    		"'".$objeto->campos_valores[key($$objeto->campos_valores)]."'";

    o que será?

    Responder
  • Adilson Rumão comentou em

    Valew Ricardo analizando aqui em casa com mais calma era problema de BIOS mesmo.

    Estava errando nesta linha

    if($campo !=NULL $$ $valor !=NULL): -- Errado
    if($campo !=NULL && $valor !=NULL): -- Certo

    Está ok até aqui, vou pra VA 3. Obrigado pela atenção.

    Responder
  • Adilson Rumão comentou em

    Boa tarde a todos.
    Estou acompanhando as vídeos e na hora de fazer o testa desta 2ª VA não aparece nada no navegador.
    A tela abre em branco. Não dá nenhuma mensagem de erro e fica toda branca. O que pode estar acontecendo de errado?
    Já revi a VA umas 3 x e não encontrei o problema.

    Responder
    • Você deu o comando para mostrar algo na tela? Se você não pedir pra dar um echo nas funções como fiz no exemplo a tela ficará toda vazia mesmo, pois nada é mostrado ao conectar com o banco.

      Responder
  • Professor, ADOREI suas aulas! Gostaria de saber quando será a aula 3 da CRUD Genérico... Estou ansioso! Ficou ótimas e estou trabalhando em algo semelhante.

    Responder
  • Wilson comentou em

    Saudações, professor Ricardo.
    Primeiramente deixe-me parabenizá-lo por suas aulas de excelente qualidade.
    Pra mim foi um achado neste ano que passou ter conhecido seu site.

    Tenho uma dúvida e sugestão para essas agora de CRUD Genérico.
    Como trabalhar com duas ou mais tabelas?
    Pra seguir o exemplo que está usando da tabela clientes, imaginemos que tivéssemos mais uma tabela grupos (id_gropo, grupo) com os seguintes valores: Física e Jurídica.

    Eu faria algo assim:
    $sql = "SELECT c.*, g.* FROM clientes c, grupos g WHERE c.id_grupos = g.id_grupos ";

    E aí, como ficaria esse caso?

    Abraço e meus votos de cada vez mais sucesso!

    Responder
    • Olá Wilson, até que enfim alguém faz um comentário sobre o conteúdo, já estava ficando preocupado pois achei que o conteúdo estava ruim...
      Bom vamos à sua dúvida: confesso que já pensei no assunto mas não montei a lógica do mesmo ainda, portanto minha idéia inicial seria criar uma classe genérica para consultas, implementando nesta classe métodos capazes de ler todos os dados vindos de arrays, como um array contendo os nomes das tabelas das quais você precisa recuperar os dados por exemplo.

      Outra possibilidade é fazer na classe base uma verificação para saber se os dados são apenas strings ou arrays e tratá-los da melhor forma para montar o select.

      Mas somente fazendo alguns testes para chegar à uma conclusão...

      Responder

Deixe seu comentário