2
respostas

É apresentado somente o nome e o preço do primeiro item da lista?

Depois que fiz a alteração direto pra classe Produto.php, a listagem (produtoLista.php) parou de funcionar, exibindo apenas o nome e o preço do primeiro item da lista.

produtoLista.php

<?php require_once("cabecalho.php");
        require_once("bancoProduto.php");
            require_once("class/Produto.php");

            session_start();
            header("Content-type: text/html; charset=utf-8");
            $produto = new Produto(); ?>

    <table class="table table-striped table-borded">



     <tr>
         <th>Nome</th>
         <th>Preço</th>
         <th>Descrição</th>
         <th>Categoria</th>
     </tr>

     <?php  $produtos = listaProdutos($conexao);


      foreach($produtos as $produto){ ?>

         <tr>
             <td class="warning"><?= $produto->nome  ?></td>
             <td><?= $produto->preco ?></td>
            <td><?= substr($produto->desciricao, 0,40)  ?></td>
            <td><?= $produto->categoria_nome ?></td>
            <td>
                <a href="altera.php?id=<?= $produto['id']?>" class="btn btn-primary">Alterar</a>
            </td>
             <td>
                 <a href="removeProduto.php?id=<?= $produto['id'] ?>" class="btn btn-danger">Remover</a>
             </td>
            <td>
                <a href="copiaProduto.php?id=<?= $produto['id'] ?>" class="btn btn-danger">Copia</a>
            </td>
         </tr>
    <?php
     }
    ?>
    </table>
<?php include ("rodape.php"); ?>

Lógica da "listaProdutos.php"

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 c.id=p.categoria_id");
    var_dump($resultado);
    while($produto_array = mysqli_fetch_assoc($resultado)){
        $produto = new Produto();
        $produto->nome = $produto_array['nome'];
        $produto->preco = $produto_array['preco'];
        $produto->descricao = $produto_array['descricao'];
        $produto->categoria_id = $produto_array['categoria_id'];
     $produto->usado = $produto_array['usado'];
     array_push($produtos, $produto);

        //    while($produto = mysqli_fetch_assoc($resultado)) {
            //    array_push($produtos, $produto);
        //    }

    }

    return $produtos;
}
2 respostas

Oi Rodrigo, tudo bom?

Realmente, estranho. Dando uma olhada por cima aqui não encontrei nada de estranho.

Tenta dar uma debugada pra ver o que está sendo retornado do banco de dados.

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 c.id=p.categoria_id");
    var_dump($resultado);
    while($produto_array = mysqli_fetch_assoc($resultado)){
        $produto = new Produto();
        $produto->nome = $produto_array['nome'];
        $produto->preco = $produto_array['preco'];
        $produto->descricao = $produto_array['descricao'];
        $produto->categoria_id = $produto_array['categoria_id'];
     $produto->usado = $produto_array['usado'];
     array_push($produtos, $produto);

        //    while($produto = mysqli_fetch_assoc($resultado)) {
            //    array_push($produtos, $produto);
        //    }

    }
    var_dump($produtos);
die();
    return $produtos;
}

Assim, a gente sabe o que veio do banco e o que a gente tem no retorno.

Opa! Tudo certo? Então, depois de debuggar o que estava vindo do banco de dados percebi que durante a atribuição dos atributos do objeto no "listProdutos" eu não fazia a atribuição de uma id pra nova instância do produto. Depois que adicionei a linha :

$produto->id = $produto_array['id'];

Passou a funcionar.

Muito obrigado pela ajuda!