3
respostas

Campo Isbn não aparece os dados

Bom dia !

Estou com problema com o campo ISBN não aparece nada em todos os campos.

Aqui está o código:

 classe Produto.php 

public function temIsbn() {
        return $this instanceof Livro;
    }

produto-lista.php

<td>
                <?php 
                    if ($produto->temIsbn()) {
                        echo "ISBN: ".$produto->getIsbn();
                    }
                ?>
            </td>

adiciona.php

if ($tipoProduto == "Livro") {
    $produto = new Livro($nome, $preco, $descricao, $categoria, $usado);
    $produto->setIsbn($isbn);
} else {
    $produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
}

altera.php

if ($tipoProduto == "Livro") {
    $produto = new Livro($nome, $preco, $descricao, $categoria, $usado);
    $produto->setIsbn($isbn);
} else {
    $produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
}

produto-formulario-base.php

<td>Tipo do produto</td>
    <td>
        <select name="tipoProduto" class="form-control">
            <?php
            $tipos = array("Livro", "Produto");
            foreach($tipos as $tipo) : 
                $esseEhOTipo = get_class($produto) == $tipo;
                $selecaoTipo = $esseEhOTipo ? "selected='selected'" : "";
            ?>
                <option value="<?=$tipo?>" <?=$selecaoTipo?>>
                    <?=$tipo?>
                </option>
            <?php
            endforeach 
            ?>
        </select>
    </td>
</tr>
<tr>
    <td>ISBN (caso seja um livro)</td>
    <td>
        <input type="text" name="isbn" class="form-control" 
            value="<?php if ($produto->temIsbn()) { echo $produto->getIsbn(); } ?>" >
    </td>
</tr>

Pelo o que me lembre foram esses arquivos que havia altera...

3 respostas

Olá Lucas, tudo bom?

Não encontrei nenhum problema nos códigos que você colocou aqui.

Posso dar uma olhada no seu "ProdutoDAO.php" ? As vezes o problema está ao passar ou receber o produto do banco de dados =)

Tive o mesmo problema ao desenvolver a lição.

Foi resolvido revisando a função listarProdutos() da classe produtoDao.php

Verifique o if que determina se o objeto retornado da busca é um livro ou um produto :

if($tipoProduto == "Livro"){
    $produto = new Livro($produto_array['nome'],$produto_array['preco'],$produto_array['descricao'],$categoria,$produto_array['usado']);
    $produto->setIsbn($produto_array['isbn']);
}
else{
    $produto = new Produto($produto_array['nome'],$produto_array['preco'],$produto_array['descricao'],$categoria,$produto_array['usado']);
}

No meu caso ao debugar percebi que o $tipoProduto estava retornando null por que esqueci de receber o tipo de produto do banco. De modo que ao passar na verificação sempre instanciava um produto, mesmo sendo um livro.

Por fim na hora da listagem, sendo todos os objetos um produto o código ignorava o bloco que montava o isbn. A solução para o meu problema foi corrigir esse detalhe no produtoDAO.php

$tipoProduto =  $produto_array['tipo_produto'];
if($tipoProduto == "Livro"){
    $produto = new Livro($produto_array['nome'],$produto_array['preco'],$produto_array['descricao'],$categoria,$produto_array['usado']);
    $produto->setIsbn($produto_array['isbn']);
}
else{
    $produto = new Produto($produto_array['nome'],$produto_array['preco'],$produto_array['descricao'],$categoria,$produto_array['usado']);
}

Espero que esse seja o seu problema.

Lucas, mas você adicionou algum novo produto do tipo livro no banco de dados com o seu ISBN digitado?

Logo ao finalizar esta aula e abrir a tela de lista produtos, todos os campos de ISBN aparecem vazios mesmo, pois, não existe nenhum item com ISBN. Assim que adicionar um novo produto com este campo, irá mostrar. No meu foi assim e não tive nenhum problema.