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

Erro ao listar produto

Boas Pessoal,

Após efectuar alteração na classe produto, para contemplar o método construtor, não consigo listar os produtos, esta a devolver o erro:

Fatal error: Uncaught Error: Call to a member function getNome() on null in C:\xampp\htdocs\loja\produto-lista.php:18 Stack trace: #0 {main} thrown in C:\xampp\htdocs\loja\produto-lista.php on line 18

ficheiro:

produto-lista.php

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

?>

<table class="table table-striped table-bordered">
<?php

$produtos = ListaProdutos($conexao);

var_dump($produto);

foreach ($produtos as $produto) :?>


    <tr>
        <td><?= $produto->getNome(); ?> </td>
        <td><?= $produto->getPreco(); ?></td>
        <td><?= $produto->precoComDesconto(); ?></td>
        <td><?= substr($produto->getDescricao(), 0,40); ?></td>
        <td><?= $produto->getCategoria(); ?></td>
        <td><?= $produto->getUsado(); ?></td>
        <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?= $produto->getId(); ?>">Alterar</a></td>

        <td>
            <form method="post" action="remove-produto.php">
                <input type="hidden" name="id" value="<?= $produto->getId(); ?>" >
                <button class="btn btn-danger">Remover</button>
            </form>
        </td>

    </tr>


<?php 
endforeach

?>
</table>
<?php include("rodape.php"); ?>

função listarProduto:



//Listar produtos
function ListaProdutos($conexao)
{
    $produtos = array();
    $resultado = mysqli_query($conexao, "Select p.*, c.nome as categoria_nome from produtos as p join categorias as c on p.categoriaId =c.id");


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



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


        //Adicionar produtos na arrey de produtos
        array_push($produtos, $produto);





        //Instanciais os atributos da classa produto
        $nome  = $produto_array ['nome'];
        $preco = $produto_array ['preco'];
        $descricao  = $produto_array ['descricao'];
        //$categoria = $categoria->getNome () ;
        $usado  = $produto_array ['usado'];

        //Criar produto
        $produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
        $produto->setId ($produto_array ['id']);



        //echo $produto ['nome'] . "<br/>" ;
    }

    return $produtos;
}

Podem por favor ajudar?

Tks

6 respostas

Coloca no final essa linha antes de retornar os produtos na função ListaProdutos pra vê se vai !!

array_push($produtos, $produto); return $produtos;

Onde está return $produtos;, faça um var_dump($produtos);.Você irá conseguir visualizar o que tem dentro de $produtos.

Boas Roger,

Metendo dentro do while, já funciona. Porem comecei a ter erro para aprestar a categoria:

Recoverable fatal error: Object of class Categoria could not be converted to string in C:\xampp\htdocs\loja\produto-lista.php on line 23

ficheiro produto-lista:


foreach ($produtos as $produto) :?>


    <tr>
        <td><?= $produto->getNome(); ?> </td>
        <td><?= $produto->getPreco(); ?></td>
        <td><?= $produto->precoComDesconto(); ?></td>
        <td><?= substr($produto->getDescricao(), 0,40); ?></td>
        <td><?= $produto->getCategoria(); ?></td> <!--Linha 23-->
        <td><?= $produto->getUsado(); ?></td>
        <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?= $produto->getId(); ?>">Alterar</a></td>

        <td>
            <form method="post" action="remove-produto.php">
                <input type="hidden" name="id" value="<?= $produto->getId(); ?>" >
                <button class="btn btn-danger">Remover</button>
            </form>
        </td>

    </tr>


<?php 
endforeach

?>

@Obrigado pelo feedbaco, efectuado este teste el devolve os produtos.

Tks

Categoria é um objeto não !!! Então veja na Classe Categoria qual método utilizar.

Exemplo : $produto->getCategoria().getNome()

Boas Roger,

Na verdade eu já tentei desta forma, e estava a dar erro que, a função getNome não foi definido, mas eu defini na minha classe categoria. Também, tentei assim, $produto->getCategoria($categoria->getNome()) MAs desvolvere o mesmo erro, que a função não foi definida:

Fatal error: Uncaught Error: Call to undefined function getNome() in C:\xampp\htdocs\loja\produto-lista.php:23 Stack trace: #0 {main} thrown in C:\xampp\htdocs\loja\produto-lista.php on line 23
solução!

Boas,

Situação ficou resolvido, com resposta do Roger Moraes de Moura, mas não dever ser com ponto:

$produto->getCategoria().getNome();

dever ser com ->:

$produto->getCategoria()->getNome();

Obrigado pela ajuda.