Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 1 da Aula 9 - Herança

Olá, criei os atributos no banco, estou conseguindo cadastrar novos produtos normal, salva no banco perfeitamente, porém não estou conseguindo exibir o isbn na página, já verifiquei os código e não consigo encontrar os erros. abaixo segue o método listaProdutos da classe ProdutoDAO:

function listaProdutos() {
        $produtos = array();
        $resultado = mysqli_query($this->conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id");
        while($produto_atual = mysqli_fetch_assoc($resultado)) {

            $categoria = new Categoria;        
            $categoria->setNome($produto_atual['categoria_nome']);

            $produto = new Produto($produto_atual['nome'], $produto_atual['preco'], $produto_atual['descricao'], $categoria, $produto_atual['usado']);


            $produto->isbn = $produto_atual['isbn'];
            $produto->setTipoProduto($produto_atual['tipoProduto']);

            $produto->setId($produto_atual['id']);
                        array_push($produtos, $produto);

        }
        return $produtos;


    }

Na página produto-lista.php está assim:

<?php
        $produtoDao = new ProdutoDAO($conexao);
        $produtos = $produtoDao->listaProdutos();
        foreach($produtos as $produto) :
    ?>
    <tr>
        <td><?= $produto->getNome() ?></td>
        <td><?= $produto->getPreco() ?></td>
        <td><?= $produto->valorComDesconto() ?></td>
        <td><?= substr($produto->getDescricao(), 0, 40) ?></td>
        <td><?= $produto->getCategoria()->getNome() ?></td>
        <td>
            <?php
                if($produto->isLivro()){
                    echo"ISBN:  ".$produto->getNome();
                }

            ?>

        </td>
        <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto->getId()?>">alterar</a></td>
        <td>
            <form action="remove-produto.php" method="post">
                <input type="hidden" name="id" value="<?=$produto->getId()?>">
                <button class="btn btn-danger">remover</button>
            </form>
        </td>
    </tr>
    <?php
        endforeach
    ?>    
</table>
2 respostas
solução!

E aí Anderson.

O título "adicionando inputs de tipo e isbn no html" é o terceiro exercício e nesse ponto ainda não foram feitas as alterações para visualizar o número do isbn na página produto-lista.php .

Você só vai visualizar no último exercício : "exibindo isbn quando for um livro".

Sendo assim vamos adiantar as alterações que você deverá fazer nos seus códigos.

Em 'produtoDAO.php'

No laço que verifica o $produto_atual você deve verificar se o campo 'isbn' está vazio ou contém algum valor. Se for vazio é porque é um produto senão é um livro e você deve chamar o construtor adequado para cada caso:

while($produto_atual = mysqli_fetch_assoc($resultado)) {

    if ( trim($produto_atual['isbn']) !=="" ) {
        $produto = new Livro();
        $produto->setIsbn($produto_atual['isbn']);
    } else {
        $produto = new Produto();
    }

    $categoria = new Categoria();

     continua o código . . .    . . .

No produto-lista.php você deve chamar o método 'temIsbn()' pra verificar se realmente têm 'isbn'. Você usou um método 'isLivro()'. Eu não sei como você implementou o código , mas eu escrevi da seguinte forma:

<td>
    <?php if( $produto->temIsbn() ): ?>
        ISBN: <?= $produto->getIsbn() ?>
    <?php endif ?>
</td>

Porém lembramos que você irá fazer essas alterações nos próximos exercícios. Nesse a visualização do isbn ainda não foi implementada.

Qualquer dúvida posta aqui.

Aguardo retorno

Ok Edson, consegui exibir o isbn. Fui seguindo s tópicos e no fim deu tudo certo. Obrigado pela ajuda