Alguém poderia me ajudar? Preciso que um retorno dos registros do BD vazio produza uma inclusão de produto mas não estou conseguindo montar a lógica. Segue codigo:
if ($id != “”){
echo ("* O ID nao esta vazio * "); //Aviso de teste até aqui se é alteração ele está alterando(achou codigo do produto)
if($id == "0"){ //Não achou o produto na pesquisa!
echo ("* inicio novo registro * "); //Aviso de teste
$mensagem = "Produto não localizado!";
$action = "adiciona-produto.php";
$produto = new Produto();
$produto->setCategoria(new Categoria());
$produto->setMarca(new Marca());
//Alteração - Preencher automaticamente o código
$produto->setCodigo($_POST["codigo_barras"]);
echo ("* fim novo registro * "); //Aviso de teste
} else {
echo ("* atualizar novo registro * "); //Aviso de teste
$produto = buscaProduto($conexao, $id);
$ehAlteracao = true;
$nome = $produto->getNome() ;
$mensagem = "Produto localizado!";
$action = "altera-produto.php";
$produto->setCategoria(new Categoria());
$produto->setMarca(new Marca());
echo ("* fim atualizar novo registro * "); //Aviso de teste
}
}
E qual sua dificuldade com a lógica?
O $id não está entrando no if certo?
Não está chamado o $action corretamente?
O $produto não está sendo preenchido?
Alguma mensagem de erro?
Supondo que o $id possa estar com o valor incorreto… tente usar var_dump($id) antes do if e veja qual seu tipo e seu conteúdo…
ou você pode usar empty ao invés de == no if, exemplo:
if (empty($id)) {
...
} else {
...
}
A função empty é ótima para esses casos, porque ela interpreta valores como 0, “0”, “”, null, array vazio, etc como true…
Oi LostSoldier obrigado por dar uma olhada no código. Fiz a alteração que sugeriu mas ainda não está dando certo. Nenhuma mensagem de erro, apenas não funciona. Não passa deste trecho do código se o produto é nulo ou 0 if ($id <> “”){
O retorno do teste de inclusão é esse:
- inicio recebendo POST do Formulario** inicio funcao pesquisa * select * from produtos where codigo = ‘70432678345’* retornou id vazio… * * fim pesquisa * * O ID localizado foi : 0 ** fim recebendo POST ** O ID pesquisado foi : 0 *
Como você pode ver, ele recebe o post do formulário, faz a pesquisa no banco, retorna o id vazio, então deveria ser incluir produto. Mas nada acontece.
Naquela parte do php logo no começo do código onde o echo diz "O ID não está vazio acontece se o ID foi localizado veja:
- inicio recebendo POST do Formulario** inicio funcao pesquisa * select * from produtos where codigo = ‘214234’* retorno pesquisa BD * * retorno pesquisa BD * * fim pesquisa * * O ID localizado foi : 30 ** fim recebendo POST ** O ID pesquisado foi : 30 ** O ID nao esta vazio * * atualizar novo registro * * fim atualizar novo registro *
Por acaso seu objeto $produto possui algum método salvar/gravar/inserir/atualizar por exemplo?
O que deve estar faltando para que sua lógica funcione pode ser…
if ($id == '0') {
...
$produto->salvar();
} else {
...
$produto->salvar();
}
Pelo que entendi esse código não é seu, mas sim copiado estou certo?
Esse código deve estar usando um padrão de projeto chamado active record
O que isso quer dizer? O objeto preenchido além conhecer seus atributos, ainda consegue se “auto-persistir” na base de dados, pesquise mais a respeito…
Perdoe a franqueza, mas sugiro você retroceder um pouco seus estudos, pois esses conceitos já são um pouco avançados e você precisa conhecer bem de orientação a objetos para entedê-los e implementá-los…
Sugiro que comece por esse livro, muito bom material, bons estudos
Obrigado LostSoldier. Vou ler sim.
Esse código é em grande parte do curso FP-73 da Caelum onde aprendemos Php orientado a objetos, claro que foi a base para esse sistema porém ele não contempla diversos cenários como incluir e baixar arquivos (fotos ou documentos), fazer campo de consulta e também casos especiais como este que temos que buscar no BD um codigo do produto, se ele existir, exibir alteração para o usuario (isso até na apostila tem) mas a inclusão com uma consulta antes não.
De qualquer forma, os métodos do objeto produto estão especificados nas funções do banco-produto.
São eles: listaProdutos, insereProduto, removeProduto, buscaProduto, alteraProduto, e o buscaIDdoProdutoPeloCodigoInterno
Acho que você não entendeu, o problema não está nos métodos, porque, como te expliquei ele faz a alteração normalmente, deleta, consulta, busca (veja os testes que estão junto com código, eles trazem tudo direitinho o que ocorre tudo está funcionando menos a parte de tratar o retorno vazio.
De qualquer forma, obrigado pela ajuda LostSoldier, vou continuar a testar algumas coisas aqui e ver se chego em alguma conclusão
abraços.