Erro ao listar os dados do banco em uma tabela com PHP?

Estou desenvolvendo um sistema e preciso listar os produtos em uma tabela em uma pagina html, porém a página não está retornando nada.

Segue o código fonte da pagina e da consulta no banco:

código da pagina :

<?php include("rodape.php");?>
<?php include("cabecalho.php");
      include("conexao.php");
      $produtos = listaProdutos($conexao);
?>

<table class="table">
    <thead>
        <tr>
            <th>Nome</th>
            <th>Categoria</th>
            <th>Valor</th>
        </tr>
    </thead>
    <tbody>
        	<?while($produtos as $produto) : 
	        	echo '<tr>';
                	echo '<td>'. $produto['nome'] .'</td>';
                	echo '<td>'. $produto['nome_cat'] .'</td>';
                 	echo '<td>'. $produto['valor'] .'</td>';
                echo '</tr>';?>   
	        <?php endforeach ?>

    </tbody>
</table>

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

código da query:

<?php

function listaProdutos($conexao) {
    $produtos = array();
    $query = "select nome, nome_cat, preco from produtos join categoria on produtos.categoria_id = categoria.id";
    $resultado = mysqli_query($conexao, $query);
    while($produto = mysqli_fetch_assoc($resultado)) {
        array_push($produtos, $produto);
    }
    return $produtos;
}

A SQL está certa pois eu testei no phpmyadmin, mas o erro está na pagina ao tentar listar o resultado da SQL?

Coloca isso no topo da página para ver se tem erro:

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
...

Outra coisa, da uma melhorada na formatação do código, fica ruim de ler do jeito que está… use o “texto pre-formatado” no editor de código…

Eu acabei de alterar o codigo rodevops, eu vou mandar o um print do código pra ficar mais fácil, como eu alterei o codigo não da mais o erro que estava dando, porem não retorna nada… Segue em anexo o print do código da pagina e da query no banco:

fellipeA Bom dia, cara altera o teu SQL na linha 5 para

SELECT nome, nome_cat, preco FROM produtos LEFT JOIN categoria ON produtos.categoria_id = categoria.id

Pois assim você garante que terá resultados na sua consulta mesmo que não exista uma categoria correspondente na tabela de categoria

Abraços
Max

A query está correta, eu testei ela no banco e també dei um echo pra ver se o array estava carregado com os dados, mas mesmo assim eu não estou conseguindo listar o resultado da query na página, a minha duvida é se o comando para mostrar na table está correto… acredito que esteja porém a página ainda continua mostrando somente o cabeçalho e o nome das colunas mas os resultados da query ele não mostra na table

Nesse caso, se tudo está ok, verifique se a diretiva short_open_tag está ativa no php.ini

Para evitar conflito, dentro da td coloque a saida do php dessa forma para testar:

<td><?=$produto['nome']?></td>

Se não funcionar, coloque o modo tradicional:

<td><?php echo $produto['nome']; ?></td>

No arquivo php.ini eu encontrei duas diretivas:

; short_open_tag
; Default Value: On
; Development Value: Off
; Production Value: Off

e depois eu encontrei essa:

This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It is
; generally recommended that <?php and ?> should be used and that this feature
; should be disabled, as enabling it may result in issues when generating XML
; documents, however this remains supported for backward compatibility reasons.
; Note that this directive does not control the <?= shorthand tag, which can be
; used regardless of this directive.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag = Off

eu testei essa ultima com o valor on e não mudou nada, e eu testei com o o valor off e não mudou nada… eu não sei o porque não mostra na página pois a função da query retorna os dados perfeitamente mas quando jogo na tabela os dados não aparecem nas linhas

Eu estou achando que é na hora de mandar imprimir depois do foreach, seria esse o problema? pois ja tentei de tudo ate colocando a tabela dentro da tag <?php><?>, e dando echo em tudo essa parte de mostrar os dados nao aparece vou mandar o print das telas

e a segunda maneira:

Alguem poderia me ajudar como faço pra imprimir os dados?

Qualquer mudança no php.ini o seu servidor (apache, nginx, etc) precisa ser reiniciado para “entender”, se não reiniciar vai continuar do mesmo jeito…

Da mesma forma que você “tentou de tudo” como diz, deveria fazer o mesmo com o foreach onde dentro do seu código, qualquer <?… ser trocado por <?php etc…

É o que estamos tentando fazer, se nossa ajuda não está atendendo eu sinto muito, mas você mesmo sendo iniciante deve também ir mais a fundo, como a questão de reiniciar o servidor, acho que não precisamos “pegar na sua mãozinha” e nem é nossa obrigação, portanto mais respeito pois estamos dedicando parte do nosso tempo aqui, não finja como se ninguém o estivesse ajudando, no mais muito boa sorte!