Retorno da Função como Vazia Como Tratar?

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.