Para finalizar nossa série de aulas sobre a criação de um CRUD genérico com PHP orientado a objetos iremos aprender a fazer as consultas e retornar os dados do banco. Para que tudo atenda as necessidades mínimas de uma consulta, iremos ajustar nossa função de execução de SQL no banco para alimentar um dataset com os dados da consulta.
Iremos criar também a função responsável por devolver este dataset em forma de objeto ou array conforme nossa necessidade. Em seguida criaremos as funções de seleção propriamente ditas e testaremos as mesmas para ver sua funcionalidade.
Depois de assistir, deixe um comentário com sua opinião sobre a aula, aguardamos sua participação.
Este post faz parte de uma série, confira tudo que já foi publicado sobre o mesmo assunto.
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.
Atualmente temos 64 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.
Você pode criar uma classe só para consultas e colocar todo tipo de opção que necessitar.
ResponderOlá, bom dia. Primeiramente gostaria de parabenizar pelo excelente material. Excelente didática, simplicidade e objetividade no assunto.
Tenho uma pequena dúvida com relação a tratamento das informações. Como você faria, nessa estrutura explicada, para tratar alguma informação. Por exemplo, como você faria para no caso de um campo como data de nascimento, seja tratado para identificar que é uma data válida? Não quero aqui me apegar ao tratamento em si, mas como as informações seriam manipuladas antes de serem incluídas no objeto. O tratamento ficaria no arquivo base ou cliente? Pergunto, pois em outras literaturas vejo a repetição do SET e GET no arquivo correspondente ao objeto justamente para fazer esse tratamento, mas no seu exemplo você fez isso em um só arquivo, evitando a redundância de código. Imagino que seria no arquivo cliente mas não consegui criar uma forma tão simples como o restante do código feito por você.
Desde já agradeço pelo material e pela resposta.
ResponderVocê poderia criar uma classe dedicada somente a fazer validações (assim como temos a classe BANCO teria uma para VALIDAR), dessa forma, tudo que precisa ser validado é enviado para essa classe antes de ser adicionado ao objeto.
ResponderOi amigo como pode ser utilizado o INNER JOIN para ver os dados de duas tabelas com o método selecionaCampos ? E possível ou tenho que criar outro método para esta consulta no bd ?
ResponderAconselho que crie uma classe dedicada somente a consultas e implemente nela todos os métodos necessários. Esse curso visa dar uma norte sobre o assunto e cabe a cada um adicionar mais recursos conforme necessidades específicas.
ResponderOlá Ricardo, gostei muito da aula, obrigado desde já.
O meu código gera o seguinte erro só ao final dessa aula
Erro:
Notice: Undefined property: stdClass::$id in C:\xampp\htdocs\PROJETO\teste.php on line 20
Ele lista o nome e sobre nome mas gera esse erro
Minha linha 20 no teste.php -> echo $res->id.' / '. $res->nome. ' / '.$res->sobrenome.'';
Até o momento onde você faz a função selecionaTudo não tive nenhum erro não esperado, mas na função selecionaCampos gera esse erro, não devia mesmo mostrar o id, mas deveria apresentar esse erro?? revisei todos códigos todos arquivos mas ainda está com esse erro.
Pode dar uma força?
Muito bom, parabéns.
ResponderBom dia.
Meu nome é Reinaldo Bernardi, eu já trabalhava com programação off web à bastante tempo, e agora resolvi fazer um site, mas não tinha nem noção de por onde começar.
Então há poucos dias encontrei suas aulas no youtube. Elas são muito boas mesmo. Elas já me deram o Sul e o Norte que eu buscava, parabéns pelo seu trabalho.
Um grande abraço;
Muito obrigado por disponibilizar esse curso Ricardo! Me ajudou muito mesmo!
ResponderBom dia Ricardo,
Primeiro quero parabenizar pelas aulas.
Estou com uma dúvida sobre consulta no banco com o CRUD.
Exemplo:
Como que eu faço para consultar duas tabelas no banco de dados
Tabela CLIENTES e tabela PEDIDOS.
Na Tabela CLIENTES tenho os campos (id, nome, sobrenome)
1|marcos|pereira
2|Sandra|maria
3|Daniel|oliveira
4|jose|carlos
Na Tabela PEDIDOS tenho os campos (id, id_clientes, produto)
1|1|bolsa
2|1|saia
3|2|saia
4|4|meia
SELECT C.id, C.nome, C.sobrenome, P.produto FROM CLIENTES C, PEDIDOS P
WHERE C.id = P.id_clientes;
Com o resultado assim
ID | NOME | SOBRENOME | PRODUTO
1|marcos|pereira|bolsa
1|marcos|pereira|saia
2|Sandra|maria|saia
4|jose|carlos|meia
Desde já agradeço muito.
ResponderFabio, esta série de aulas apresenta apenas exemplos simples para ajudar na lógica de quem nunca trabalhou com OO, exemplos mais completos e complexos, como uma classe exclusiva para consultas por exemplo, ficam a cargo de cada um implementar e adaptar conforme a necessidade.
ResponderOLA RICARDO,
Ok, mas você sabem de uma aula ou script que possa me auxiliar??
estou muito dependendo disso.
Ja fiz estas aula e a do painel administrativo do php orientado ao objeto.
desde ja agradeço.
ResponderNão. Sugiro que você mesmo desenvolva com base na lógica aprendida neste curso.
ResponderRicardo, primeiramente bom dia, boa tarde ou boa noite .
Bom estou com o seguinte ERRO : Parse error: syntax error, unexpected T_PUBLIC in crud\modules\class\banco.class.php on line 133
Mais verifico minha linha 133 e ela esta correta,
linha 133 - > public function trataerro($arquivo=NULL,$rotina=NULL,$numerro=NULL,$msgerro=NULL,$geraexcept=FALSE){
Não sei oque fazer, com relaxação as estrutura de if e else e seus fechamentos ';' ou ':' esta tudo correto, sempre quando vou fazer alguma condição faço toda a estrutura e depois escrevo o bloco de código .
ResponderErro de digitação, verifique. Aproveite e leia este post: http://dev.rbtech.info/entendendo-e-interpretando-erros-em-scripts-php/
ResponderComo converter para pdo esses métodos?
ResponderDaí é com você amigo, eu fiz a lógica para que todos tenham uma linha de raciocínio para seguir.
ResponderPoderia criar uma aula sobre PDO.
ResponderBoa tarde Ricardo, parabéns pelo conteúdo do site. Dificil encontrar alguém que tenha paciência de ensinar em detalhes como desenvolver sites hoje.
Estou com um pequeno erro que já tentei de todas maneiras encontrar, inclusive já vi as aulas uma dezena de vezes, inclui echo nas variaveis e refiz o código 3 vezes, mas não consigo sair dessa após clicar no botão de logar.
O erro que recebo é:
Warning: require_once(/usuarios.class.php): failed to open stream: No such file or directory in /Applications/AMPPS/www/aula/classes/autoload.php on line 6
Fatal error: require_once(): Failed opening required '/usuarios.class.php' (include_path='.:') in /Applications/AMPPS/www/aula/classes/autoload.php on line 6
Poderia me ajudar?
Grato,
Junior
Dá uma lida neste post: http://dev.rbtech.info/entendendo-e-interpretando-erros-em-scripts-php/
ResponderObrigado Ricardo. Funcionou!
ResponderRicardo, quero agradece-lo verdadeiramente, pois soube com maestria transmitir não somente as sintaxes do BD, mas uma nova visão de como projetar.
Tinha visto outros cursos, bem mais longos, porém não conseguia compreender o sentido das coisas e com você não só os consegui como os
ampliei.
Gosto da forma que se expressa e também das políticas que estipulou, creio que assim pode qualificar seu público com seriedade.
Dificilmente compartilho, salvo quando é de extrema qualidade, e os seus cursos faço questão de divulgar.
Pretendo no futuro conseguir ser um programador e não um digitador de códigos.
Parabéns, sucesso e até breve.
Ricardo, muito obrigado por este projeto maravilhoso que é doar um pouco do seu conhecimento, suas aulas foram primordiais para meu projeto, valeu.
ResponderOlá, li com atenção a política de comentários e entendo que vocês não tem qualquer obrigação de solucionar problemas de terceiros, ainda mais de alguém como eu que ainda não sou um usuário que utiliza os recursos pagos do blog, porém, peço gentilmente, se puderem é claro, me ajudar a entender melhor sobre PHP e orientação de objetos, acabei de concluir a visualização de todos os vídeos desta sequencia (CRUD genérico com PHP e OOP), gostei muito das aulas e do modo em que se é explicado o assunto abordado. Acompanhei as explicações e a escrita dos códigos que funcionaram perfeitamente em meus testes.
Estou com dificuldades em exibir dados de outra tabela do banco de dados em uma mesma página, por exemplo:
- Tenho uma tabela chamada "ocorrências", e outra chamada "locais";
- Na tabela "ocorrências" existem duas colunas, 'nome' e 'local'
- Na Tabela "Locais" existem duas colunas, 'loc_id' e 'nome_do_local';
- Em 'nome' se armazena o nome de um funcionário e em 'local' o número referente ao nome da empresa que ele trabalha que na tabela "locais" esse número seria 'loc_id';
Minha dúvida é, como exibo os dados da tabela "ocorrências" porém, em lugar do local não exibir o número referente ao local e sim o nome do local que equivale a aquele numero (loc_id) na tabela "locais"?
Sei que é simples, se trata de um projeto somente para aprendizado, desde já agradeço a atenção.
ATT.
Júnior Oliveira
Aprendi muito OOP com esse CRUD mas que tal adicionar uma sexto vídeo explicando como usar o FOR, WHILE, IF...
Assim fica mais fácil entender como funciona eles com as classes.
exemplo:
listar com o FOR e WHILE ou foreach..
formas de usar where ou algumas situações no sql.
estou postando por estar tendo dificuldade em usar o FOR para listar a tabela menu e dentro desse FOR listar o submenu.
ResponderOla Ricardo, poderia explicar melhor o:
while($res = $cliente->retornaDados())
Não entendi muito bem.
ResponderEnquanto a variável $res não for igual aos dados retornados da consulta faça...
ResponderOla, Eu gostaria de tirar uma duvida fui apresentado a OO atravéz de suas aulas. Mas ao pesquisar em outras fontes encontrei muitos falando do PDO. Que pelo que pude entender é uma extenção do php. Pelo que falaram ele é uma evolução ou uma forma melhor de trabalhar com SGBD que o puro OO. Gostaria de saber se você esta familirazado com o PDO, caso esteja, se você realmente acha ele melhor, você desvantagens nele, por que pelo que entendi nele é necessario que um drive do php esteja habilitado e se o servidor em que eu vá hospedar o site não me permita configurar o php.ini . Bem, enfim caso ele seja melhor mesmo, vc ja abordou ou pretende abordar esse assunto?
Desde, ja agradeço.
PDO nada mais é que uma classe para trabalhar com o BD, se você criar rotinas e funções bem planejadas o resultado final será o mesmo e você não corre o risco de não poder hospedar o projeto em algum servidor.
ResponderCara, muito bom. Essas aulas e conteúdo estão entre as melhores que eu vi.
Pude tirar inúmeras duvidas que eu tinha com o php OO.
Meus parabéns pelo trabalho.
Vou utilizar o aprendido aqui na tentativa de criação de um sistema. Grande abraço.
Obrigado pela aula!
ResponderSuas aulas me ajudaram bastante em meu projeto.
ResponderE ai, Ricardo.
Sou programador Delphi, asp, asp.net, c#, winform, wpf, e algumas coisitas mais. E agora, estou interessando-me por PHP, graças a vocês com suas vídeo aulas. Quero agradecer pela sua dedicação, e dizer que vou prosseguir vendo se aprendo alguma coisa. Já estou até mudando meu site, usando codeigniter (que vi nas suas video aulas). Você é muito bom, cara! Que Deus te abençoe muito.
Olá Ricardo...
Já olhei a quinta aula umas 3 vezes e refiz os códigos, mas continua me dando erro.. não sei o que fazer...
/* Mtodo para retorna dados */
public function retornaDados($tipo = NULL){
switch(strtolower($tipo)):
case "array":
return mysql_fetch_array($this->dataset);
break;
case "assoc":
return mysql_fetch_assoc($this->dataset);
break;
case "object":
return mysql_fetch_object($this->dataset);
break;
default:
return mysql_fetch_object($this->dataset);
break;
endswitch;
}
o erro que ele retorna está na parte do default.. mas refiz as aulas e está igual ao seu codigo... mas continua dando erro..
o erro que ele retorna e o seguinte:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL
o que acha que pode ser??
ResponderO fato de estar acontecendo erro nesta função, não quer dizer que é esta função que está errada. Confira o restante do seu código, provavelmente há erro na hora de alimentar a propriedade DATASET da classe.
ResponderConsegui resolver o problema, o erro estava em um parenteses que coloquei no lugar errado..
Muito Grato pela Ajuda..
Parabens suas Video Aulas são nota 10!!!
ResponderGostaria de saber como faço a seleção em outra tabela.
Tenho uma tabela de posts e esses posts tem uma ou mais categorias que devem ser buscadas em outra tabela.
Ex.:
faço a consulta na tabela de posts.
titulo do post é php
a categoria do post é 1,2
tenho que fazer uma consulta na tabela categorias e pesquisar qual é o titulo da categoria 1 e o título da categoria 2
Não sei se coseguiu entender a minha dúvida?
ResponderÉ só fazer outro select dentro do laço de repetição dos resultados dos posts ou então usar INNER JOIN no SQL
ResponderMas se vou usar outra tabela do banco de dados teria que ter outra classe, mas não posso ter duas classes extendidas da classe base na mesma página. Então como ficaria?
ResponderBasta você criar um objeto do tipo Categoria dentro do loop de repetição dos posts e pegar os dados que você precisar.
Ou então crie uma classe de consulta que comporte suas necessidades.
Ricardo Bernardi blz, velho por favor me ajuda...
estou tentando fazer o crud mais esta dando erro somente na hora do selecionaCampos,
da o mesmo erro que ocorreu com você no video, mais mesmo eu colocando o " ." ainda continua ... e o erro só esta dando nessa funçao ... já fiz de tudo para resulver e nada ... o que esta de errado.
código fonte excluído pois não foi postado conforme regras
Ricardo, parabéns você merece um beijo mas fica pra próxima...
ResponderAgradeço, mas prefiro só um "muito obrigado".
ResponderBoa tarde Ricardo.
Louvável sua iniciativa de compartilhar seus conhecimentos conosco.
Consegui acompanhar as vídeo aulas e funcionar quase tudo.
Estou com um problema na função selecionaCampos. Esta retornando um erro de sql, ou seja, não está pegando os campos pelo laço. Fiz vários testes e comparei os códigos com os seus e tudo bate, porém, mesmo assim não está pegando os campos para preencher a consulta.
Veja:
código fonte excluído pois não foi postado conforme as regras
Os [echos] coloquei para testar a sql.
O engraçado da história é que nas outras funções retorna OK.
Poderia me ajudar?
Desde já agradeço a atenção.
Oi tudo bem, você teve retorno do seu erro??? estou com o mesmo problema!
se você conseguiu resolver me da moral ... me fala como se faz, porque já fiz de tudo mesmo assim nada.
Fala Ricardo, tranquilo!
Olha só. Eu vim assistir o curso do CRUD para poder pegar os arquivos para usar no Painel ADM.
Fiz tudo exatamente como está na aula, só mudei o nome do banco. Está tudo funcionando corretamente, mas estou recebendo essa mensagem:
"Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /home/u681251518/public_html/classes/banco.class.php on line 114", pode dar uma força?
Abraços e obrigado pelo seu compartilhamento.
Fim do curso, gostaria de te agradece mais essa oportunidade de compartilha conhecimento com a galera.
ResponderRicardo, estou tendo problemas com a função selecionaTudo,
quando vou fazer o teste de seleção e utilizo
Código fonte excluído por não ter sido postado de acordo com as regras
a função é feita, mas não me mostra os dados contidos em minha tabela.. pode me iluminar?
ResponderOlá Ricardo.
Eu estou com um problema aqui no meu código, eu incluo ele no meu site, ele altera o CSS dele, justamente no header da página, o que será que está acontecendo?
como faço para corrigir o erro?
Faça testes e verifique sua codificação.
ResponderQuando eu dou o include na classe que tah com o require_once na class base, dá o erro do CSS,
não consegui até agora resolver este problema.
<?php
require_once 'banco.class.php';
abstract class base extends banco
{
public $tabela = '';
public $campos_valores = array();
public $campopk = NULL;
public $valorpk = NULL;
public $select = '';
public function addCampo($campo=NULL,$valor=NULL)
{
if($campo != NULL)
{
$this->campos_valores[$campo] = $valor;
}
}
public function delCampo($campo=NULL)
{
if(array_key_exists($campo, $this->campos_valores))
{
unset($this->campos_valores[$campo]);
}
}
public function setCampo($campo=null,$valor=NULL)
{
if($campo != NULL && $valor != NULL)
{
$this->campos_valores[$campo] = $valor;
}
}
public function getValor($campo=NULL)
{
if($campo != NULL && array_key_exists($campo, $this->campos_valores))
{
return $this->campos_valores[$campo];
}
else
{
return FALSE;
}
}
}
não vi nenhum erro até agora no código mas tah erro no css da página.
ResponderRicardo, já finalizando os estudos do código que vc passou, já próximo do final do vídeo que vc coloca o exemplo retirando o id (usando o método selecionaCampos) e depois o nome (usando delCampo) aparece uma notificação para mim, Notice:Undefined property: stdClass::$id in C:\Program Files\EasyPHP-5.3.9\www\crudgenerico\teste.php on line 16, eu não vi você definindo essas propriedades, vou voltar a rever os vídeos se for o caso, qualquer coisa dei-me uma luz se caso até lá eu não encontrar o meu erro. Valeu.
ResponderAté agora não tive exito, mas vou continuar a procurar o porque dessa notificação, pois o php está entendendo que o id e nome são uma propriedade (variável) e não um objeto instanciado vindo das identificações da tabela clientes.
ResponderPode parar de procurar, apenas configure seu servidor local corretamente como ensinamos em uma aula aqui do blog.
ResponderRicardo você é o cara, tive o mesmo problema. Rafael a aula que o ricardo se refere é esta aqui http://dev.rbtech.info/como-configurar-um-servidor-local-com-wampserver/, a resposta está lá pelo tempo 9:30 do video.
Parabéns Ricardo e obrigado por mais esta.
ResponderMas, o que seria esta mensagem?
Só desativar as notificações não resolve o problema que esta acontecendo, ele somente não ira informar o problema.
Boa tarde Ricardo, a parte visual com um formulário administrativo eu crio ele fazendo comunicação com o arquivo teste.php?
ResponderO arquivo de teste é só um exemplo de utilização, você deve criar a interface e criar a comunicação com as classes a fim de executar as ações necessárias. Mais detalhes serão vistos no curso de criação de um painel administrativo que inicia em junho.
ResponderFala Ricardo, muito interessante o seu empenho em doar o seu tempo, você sem dúvida está de parabéns.
ResponderBoa tarde!
Gostei muito da sua aula está de parabéns, mas percebi que vc não usa os if e else com os {} e sim com : depois das condições, essa é amaneira mais correta ou é só uma questão de preferência?
Esta é a maneira de mais fácil entendimento quando temos páginas com muita codificação, pois imagine uma página com 500 linhas de código e lá pelas tantas você vê uma } (fecha chaves). Você simplesmente não vai saber se é o fechamento de um while, if, for ou outro comando, e utilizando esta sintaxe fica mais simples saber do que se trata.
Eu considero a maneira mais prática para se trabalhar.
© 2008-2023 - RBTech.info | Todos os direitos reservados | Hospedado por Innova Host
É proibida a reprodução total ou parcial de qualquer conteúdo deste site.
Boa tarde,
Muito bom estas aulas sobre crud genérico, mas ainda tenho uma dúvida, se eu precisar fazer um inner join para consultar dados de mais de uma tabela, como posso fazer?