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

Encapsulamento

Depois que fiz todos os encapsulamento não consigo listar os produto e nem adicionar. Aparece o seguinte erro; "Fatal error: Call to a member function getNome() on null in /opt/lampp/htdocs/www/loja/produto-lista.php on line 19"

produto_lista.php

<?php 
    require_once("cabecalho.php"); 
    require_once("banco-produto.php"); 
    require_once("logica-usuario.php"); 
?>

<?php
    $produtos = listaProdutos($conexao);
?>
    <table class="table table-striped table-bordered">
<?php
    foreach($produtos as $produto) :
?>
        <tr>
            <td><?= $produto->getNome() ?></td>
            <td><?= $produto->getPreco() ?></td>
            <td><?= $produto->precoComDesconto() ?></td>
            <td><?= substr($produto->getDescricao(), 0, 15) ?></td>
            <td><?= $produto->getCategoria()->getNome() ?></td>
            <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?= $produto->getId() ?>">alterar</a>
            <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>

<?php require_once("rodape.php"); ?>

banco_produto.php

<?php

    require_once("conecta.php");
    require_once("class/Categoria.php");
    require_once("class/Categoria.php");
    require_once("class/Produto.php");

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

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

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

            $produto = new Produto();
            $produto->setId($produto_array['id']);
            $produto->setNome($produto_array['nome']);
            $produto->setPreco($produto_array['preco']);
            $produto->setDescricao($produto_array['descricao']);
            $produto->setCategoria($categoria);
            $produto->setUsado($produto_array['usado']);

            array_push($produtos, $produto);
        }

        return $produtos;

    }

    function insereProduto($conexao, Produto $produto){
        $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('{$produto->getNome()}', {$produto->getPreco()}, 
        '{$produto->getDescricao()}', {$produto->getCategoria()->getid()}, {$produto->isUsado()})";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;
    }

    function removeProduto($conexao, Produto $produto) {
        $query = "delete from produtos where id = {$produto->getId()}";
        return mysqli_query($conexao, $query);
    }

    function buscaProduto($conexao, Produto $produto) {
        $query = "select * from produtos where id = {$produto->getId()}";
        $produto_buscado = mysqli_query($conexao, $query);

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

            $produto = new Produto();
            $produto->setId($produto_buscado['id']);
            $produto->setNome($produto_buscado['nome']);
            $produto->setPreco($produto_buscado['preco']);
            $produto->setDescricao($produto_buscado['descricao']);
            $produto->setCategoria($categoria);
            $produto->setUsado($produto_buscado['usado']);

        return $produto;
    }

    function alteraProduto($conexao, Produto $produto) {
        $query = "update produtos set nome =('{$produto->getNome()}', {$produto->getPreco()}, 
        '{$produto->getDescricao()}', {$produto->getCategoria()->getid()}, {$produto->isUsado()})
         where id = '{$produto->getId()}'";
        return mysqli_query($conexao, $query);
    }


?>
2 respostas
solução!

Oi Otto, tudo bom?

Não encontrei nenhum problema no seu banco-produto e produto-lista.

Pelo seu erro, parece que há algum problema com o getCategoria ou com o setCategoria pois ao tentar pegar a categoria do seu produto ele está encontrando null! Você poderia compartilhar com a gente suas classes Produto e Categoria?

Achei o erro no banco-categoria.php não coloquei $categoria->setNome($categoria_array['nome']); esqueci do parâmetro.

Obrigado pela ajuda!!!