É chegada a hora de fazer nossa primeira operação do CRUD, a inserção de dados. Agora já temos nossa classe base construida e podemos implementar o método INSERIR da classe banco, que será construido dinamicamente baseado no objeto passado como argumento para a função.
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 40 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.
Olá Ricardo, no caso do "seleciona tudo", gostaria de saber como posso mostrar o resultado de somente uma id específica da tabela no BD.
ResponderPor que você não cria uma função selecionaID pra isso? Bem mais simples.
ResponderOlá Ricardo Bernardi,
Gostaria de uma opinião se possível sobre os métodos do CRUD, pensando em relação à performance e enxutamento de classes, dessa forma abordada, para cada objeto instanciado da classe clientes, por exemplo, eu teria um insert, update, e por ai vai (CRUD), o que faria que se eu tivesse 4 objetos criados eu teria 4 vezes os métodos do CRUD, então pensando em melhorar isso, criei uma classe CRUD estendida da classe banco, onde estão esses métodos, e quando há a necessidade de alguma operação no banco, instancio ela e chamo o método necessário.
Como não tenho bons conhecimentos em php não sei considerar se isso é uma boa prática, o que me diz?
O que foi mostrado no curso é apenas uma forma de fazer, cada um fica livre para melhorar/expandir/incrementar tudo que foi ensinado aqui.
ResponderOlá Ricardo, voltando a ideia de fazer múltiplas inserção no banco de dados, eu pensei mais um pouco e consegui resolver dessa forma:
com essa estrutura de arrays:
$array_camposValores = array(
"campos" = array("cliente", "cpf"),
"valores" = array(
array("CLIENTE1", "CPF1"),
array("CLIENTE2", "CPF2"),
array("CLIENTE3", "CPF3")
)
);
e com essa função para tratar as informações
public function inserir($obj=array()){
/// MODELO: INSERT INTO {TABELA} (CAMPO1, CAMPO2) VALUES ('VALOR1','VALOR2'), ('VALOR3', 'VALOR4')
$campos=implode(", ", array_values($obj->list['campos']));
foreach($obj->list['valores'] as $valor):
$valores.="(";
//$valores.=implode(", ", array_values($valor));
for($i=0;$i<count($valor);++$i):
$virgula=($itabela . " ({$campos}) VALUES {$valores}";
echo $SQL;
$this->excSQL($SQL);
} /// fim inserir();
veja o que você acha da função e da ideia.
ResponderTá funcionando? Resolveu sua necessidade?
Então está certo.
--------- ÚLTIMA CORREÇÃO DO COMENTÁRIO --------
Olá Ricardo, eu de novo! Desculpa fazer tantas perguntas!
Por exemplo, se por ventura eu precisar inserir vários registros na mesma tabela com valores diferentes, exemplo:
P.S: Isso seria só uma lógica, sei que o código não funciona!
<?php
for( $i=1; $i inserir();
}
?>
Mas como eu faria isto? caso fosse necessário!
ResponderVocê deve ter em seu sistema uma função para inserir uma linha e outra para inserção em lote (meu ponto de vista), uma vez que para inserção em lotes não é necessário fazer um INSERT para cada registro. Mais detalhes vide documentação em http://dev.mysql.com/doc/refman/5.6/en/insert.html
Veja a parte que demonstra uma inserção de vários registros:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Não sei se a minha ideia está correta, mas por exemplo, se eu colocasse:
setValor('cliente',array("VALOR1", "VALOR2", "...", "VALOR_N")); ?>
Talvez esteja correto, mas como eu faria para caso o valor dele fosse um ARRAY, para tratar esse array e botar no formato do comando SQL [ VALUES(1,2,3),(4,5,6),(7,8,9) ] ... tentei de varias maneiras, mas já não consigo mais pensar! rsrsrs, me ajuda por favor...
ResponderQuando você não consegue mais pensar, é porque algo está errado. É hora de largar o código fonte, pegar um pedaço de papel e caneta e botar a lógica no papel antes de continuar programando.
ResponderOlá Ricardo, estou adorando as aulas de OOP e antes de ver estas tuas aulas eu fiz um método simplificado para inserir, não sei se está correto, mas funcionou, poderia me dar opiniões sobre este meu código? Obrigado...
public function inserir($table, $valkey)
{
$campos="";
$valores="";
foreach($valkey as $keys => $vals):
$campos .= $keys.',';
$valores .= '\''.$vals.'\',';
endforeach;
$campos = substr($campos, 0, strlen($campos)-1);
$valores= substr($valores, 0, strlen($valores)-1);
$query = mysql_query("INSERT INTO $this->prefix_table{$table} ({$campos}) values ({$valores})");
return $query;
}
Existem N formas de fazer a mesma coisa, vai da lógica de cada um e também da necessidade.
ResponderMas esta lógica que eu exerci, não está necessariamente errada? existe alguma falha que possa ocorrer futuramente?
ResponderIsso somente os testes dirão. Tente simular diversas situações para então poder concluir a eficiência da rotina.
ResponderOlá Ricardo, agradeço desde já pelos cursos e aulas e pelo Site, uma Belezura que só tudo de bom mesmo. Mas vamos a minha dúvida: em minhas horas vagas no serviço é onde eu procuro aprender PHP e Java, mas por motivos de segurança não é permitido baixar programas na rede, como posso ter um programa para rodar minhas aulas e ver se estou realmente aprendendo e tirar minhas duvidas pois codifico toda a aula revejo os métodos e no final não tenho como ver os resultados. Voce pode me ajudar, existe algum programa que rode um Browser sem precisar estar conectado na Internet?
Obrigado
Rubens.
Sem executar um servidor local somente enviando os arquivos para um servidor de hospedagem, outra forma desconheço.
ResponderOlá, gostaria de saber como faço para inserir um registro e ele me retornar o ID inserido, onde devo modificar na classe para funcionar essa função? Obrigado
ResponderAltere a função de inserção ou então a de execução das queries no banco para retornar o valor necessário. Ou melhor ainda, armazene o ID do último registro inserido em uma propriedade da classe para fácil acesso.
Responderótimas aulas!
ResponderOlá ricador fiz tudo certinho mais na hora de grava os dados na database n vai eu fico dando f5 e nada acontece
ResponderOlá Ricardo blezura? O meu sistema ta funcionando redondo, mas to com uma dúvida na qual não estou conseguindo resolver, eu tenho duas tabelas no meu BD, clientes e cadastro. Conforme os arquivos que estao no link abaixo:
http://pastebin.com/7qrgBVuC
Eu criei a classe cadastro e também a classe clientes, o que eu quero fazer é um relacionamento n/n entre o id da tabela cadastro com a tabela clientes, conforme está no código disponibilizado no link acima, o único erro na hora de inserir dinamicamente na tabel que o valorpk fica 0. Já tentei diversas formas e nada, continua na mesma, será que alguém poderia me dar um help?
Desde já agradeço
Eu apenas criei exemplos simples de uso do CRUD, cabe a cada usuário implementar e adicionar novas funcionalidades, tais como relacionamentos ou então tratamento de mais de uma tabela na mesma classe. Com um pouco de lógica tudo é possível.
ResponderBom dia pessoal, tudo tranquilo, então, to começando a programar php orientado a objetos, mas to com um probleminha na hora de gravar os dados do usuário no banco.
Tenho um arquivo onde executo esta função, neste arquivo eu estou criando uma classe usuário e extendendo ela da classe principal que é onde esta a função de conexão com o banco, até ai tudo OK, dentro desta classe usuário eu precisaria que ele gravasse em 2 tabelas, na usuarios e na permissões, se eu colocar pra gravar em só uma tabela, grava certinho, mas como eu coloco pra gravar as permissões, vou por o código do arquivo ae
LINK PARA O CÓDIGO
http://pastebin.com/rrz1mcbY
Bom, era isso, espero que alguém gaste 5 minutinhos pra tentar me ajudar
Abraço a todos e bom fim de semana
ResponderAlém da classe usuários você precisa criar a classe permissões, assim cada uma cumpre seu papel no sistema.
ResponderOla Ricardo, parabens pelo Blog e conteudo, são excelentes. Tenho uma duvida quanto a aula: Na hora de inserir os metodos para Inserção, Update, etc. Estes métodos poderiam ficar na classe BASE.class.php? Pois assim a classe BANCO.class.php ficaria apenas as informações relacionadas ao Banco e Conexão, e a classe BASE.class.php, como ja tem os metodos para manipular de certa forma os dados das tabelas, também se encarregaria de fazer o CRUD, só para deixar tudo mais certinho (se é que eu esteja certo?).
Gostaia de ouvir sua opinião, se isto é possivel.
Valeu.
Essas aulas de PHP OO são ótimas.
ResponderOlá, Ricardo vc poderia me informar como eu faria a inserção com upload de images usando essa mesma logica?
obrigado e parabéns pelas ótimas aulas.
Crie a classe com os métodos necessários para as operações de upload.
ResponderOlá ricardo,
eu estou com um problema olhei a aula e fiz o código olha:
public function inserir($objeto){
# INSERT INTO tabela (campo1, campo2...) VALUES (valor1,valor2...)
$sql = "INSERT INTO ".$objeto->tabela." (";
for ($i=0; $i<count($objeto->campos_valores); $i++):
$sql.= key($objeto->campos_valores);
if($i < (count($objeto->campos_valores) -1)):
$sql.= ", ";
else:
$sql.= ") ";
endif;
endfor;
next($objeto->campos_valores);
reset($objeto->campos_valores);
$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)]."'";
if($i < (count($objeto->campos_valores)-1)):
$sql.= ", ";
else:
$sql.= ") ";
endif;
endfor;
echo $sql;
} # End inserir
Mas aparece:
INSERT INTO clientes (Nome, Nome, Nome, Nome, Nome) VALUES ('', '', '', '', '')
clientes Object
(
[tabela] => clientes
[campos_valores] => Array
(
[Nome] =>
[Sobrenome] =>
[nome] => Natan
[sobrenome] => Alves
[bairro] => centro
)
[campopk] => ID
[valorpk] =>
[extras_select] =>
[server] => localhost
[user] => root
[pass] => vertrigo
[db] => php
[conexao] =>
[dataset] =>
[linhasafetadas] => -1
[connect] => Resource id #6
)
Sem o Nome, sobrenome e o bairro.
Poderia me ajudar?
ResponderVerifique sua codificação e encontre seu erro. Se necessário refaça os scripts para descobrir o que está errado.
ResponderEu verifiquei e consegui encontrar o erro sozinho.
Mas obrigado assim mesmo.
Respondernessa mesma dúvida...
quando meu codigo aparece no print ele fica todo em linha assim:
INSERT INTO clientes (nome, sobrenome) VALUES ('Ricardo', 'Bernardi') clientes Object ( [tabela] => clientes [campos_valores] => Array ( [nome] => Ricardo [sobrenome] => Bernardi ) [campopk] => id [valorpk] => [extras_select] => [servidor] => localhost [usuario] => root [senha] => [nomebanco] => aulas [conexao] => Resource id #6 [dataset] => [linhasafetadas] => 1 )
ao inves de fica como na tela dois dessa duvida!!
ResponderColocou a tag "pre" em sua saída de resultado?
ResponderPow Brother, brigadão mesmo. eu estava usando a tag "prev" ao invés de "pre".
mtas horas de estudo dar nisso!
Olá natan estou com os 'mesmos problemas' você conseguiu resolver o seu?
se sim me add no skype = meu nick.
ResponderParabéns novamente! Que didática! hehe!
Aguardo a 4a. aula! ;)
Abs.
ResponderCara eu fico tao feliz quando eu vejo uma coisa nova e difícil e aprendo eu conseguir fazer a parte de atualização usando a lógica que você usou nessa aula :D
Vlw por contribuir com agente
:D
Ate mais Abraços
ResponderParabéns Romulos, vejo que você realmente está interessado em aprender, pois está empregando os conhecimentos ao invés de esperar tudo pronto. Na próxima aula você poderá conferir se pensamos da mesma maneira, pois na aula 4 será passada a parte de UPDATE.
Responder© 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.
Alguém pode me ajudar estou tendo o seguinte erro ao clicar no sair Painel, aula 5
Fatal error: Uncaught Error: Cannot call constructor in /var/www/html/sgvo/classes/usuarios.class.php:14 Stack trace: #0 /var/www/html/sgvo/funcoes.php(26): usuarios->__construct() #1 /var/www/html/sgvo/funcoes.php(3): Inicialize() #2 /var/www/html/sgvo/painel.php(2): require_once('/var/www/html/s...') #3 {main} thrown in /var/www/html/sgvo/classes/usuarios.class.php on line 14