Consulta Categoria e Sub Categoria - PHP e MySql
Bom dia colegas,
Sou novo no fórum, estou com dificuldades em listar categorias e sub categorias, conforme estrutura abaixo.
Categoria 1
- Sub Categoria - Item 1
- Sub Categoria - Item 2
Categoria 2
- Sub Categoria - Item 1
- Sub Categoria - Item 2
Estou trabalhando com duas tabelas (Categoria e SubCategoria), a consulta no BD está funcionando perfeitamente, conforme resultado abaixo:
Tabela categorias:
id
nome_categoria
ordem
status
Tabela subcategoria
id
nome_sub
ordem
id_categoria
Resultado gerado pela query listada abaixo:
id | nome_categoria | items
1 | categoria 1 | Item 1, Item 2, Item 3
2 | categoria 2 | Item 1
3 | categoria 3 | item 2, item 3, item 4
Porém quando tento imprimir o resultado da query utilizando foreach, está ocorrendo o seguinte erro:
Coloquei comentário no código onde está ocorrendo o erro.
Poderia ajudar com o erro? Ou existe outra forma melhor de exibir categoria e sub categorias?
Segue meu código.
Obrigado
<?php
$query = "SELECT c.id,c.nome_categoria, group_concat(s.nome_sub) as items
FROM subcategoria s LEFT JOIN categoria c ON s.id_categoria = c.id
WHERE c.status = '1'
GROUP BY c.nome_categoria";
$res = mysqli_query($mysqli, $query) or die('Erro ao consultar dados. ' . mysqli_error());
$dados = mysqli_fetch_array($res);
foreach($dados as $rowcat){ ?>
<ul>
<li><?php
echo $rowcat['nome_categoria']; ?></li>
<?php
//ERRO OCORRE AQUI - LINHA 238
$items = $rowcat['items'] ;
$items_array = explode(',',$items);
if(is_array($items_array) && count($items_array) > 0 ){
?>
<ul>
<?php
foreach($items_array as $nome_sub){
?>
<li>
<?php
//ERRO OCORRE AQUI - LINHA 242
echo $nome_sub; ?>
</li>
<?php } ?>
</ul>
<?php }?>
</ul>
<?php } ?>
Sou novo no fórum, estou com dificuldades em listar categorias e sub categorias, conforme estrutura abaixo.
Categoria 1
- Sub Categoria - Item 1
- Sub Categoria - Item 2
Categoria 2
- Sub Categoria - Item 1
- Sub Categoria - Item 2
Estou trabalhando com duas tabelas (Categoria e SubCategoria), a consulta no BD está funcionando perfeitamente, conforme resultado abaixo:
Tabela categorias:
id
nome_categoria
ordem
status
Tabela subcategoria
id
nome_sub
ordem
id_categoria
Resultado gerado pela query listada abaixo:
id | nome_categoria | items
1 | categoria 1 | Item 1, Item 2, Item 3
2 | categoria 2 | Item 1
3 | categoria 3 | item 2, item 3, item 4
Porém quando tento imprimir o resultado da query utilizando foreach, está ocorrendo o seguinte erro:
Warning: Illegal string offset 'items' in D:\codigo\viewCat.php on line 242 Warning: Illegal string offset 'nome_sub' in D:\codigo\viewCat.php on line 238
Coloquei comentário no código onde está ocorrendo o erro.
Poderia ajudar com o erro? Ou existe outra forma melhor de exibir categoria e sub categorias?
Segue meu código.
Obrigado
<?php
$query = "SELECT c.id,c.nome_categoria, group_concat(s.nome_sub) as items
FROM subcategoria s LEFT JOIN categoria c ON s.id_categoria = c.id
WHERE c.status = '1'
GROUP BY c.nome_categoria";
$res = mysqli_query($mysqli, $query) or die('Erro ao consultar dados. ' . mysqli_error());
$dados = mysqli_fetch_array($res);
foreach($dados as $rowcat){ ?>
<ul>
<li><?php
echo $rowcat['nome_categoria']; ?></li>
<?php
//ERRO OCORRE AQUI - LINHA 238
$items = $rowcat['items'] ;
$items_array = explode(',',$items);
if(is_array($items_array) && count($items_array) > 0 ){
?>
<ul>
<?php
foreach($items_array as $nome_sub){
?>
<li>
<?php
//ERRO OCORRE AQUI - LINHA 242
echo $nome_sub; ?>
</li>
<?php } ?>
</ul>
<?php }?>
</ul>
<?php } ?><?php
$query = "SELECT c.id,c.nome_categoria, group_concat(s.nome_sub) as items
FROM subcategoria s LEFT JOIN categoria c ON s.id_categoria = c.id
WHERE c.status = '1'
GROUP BY c.nome_categoria";
$res = mysqli_query($mysqli, $query) or die('Erro ao consultar dados. ' . mysqli_error());
$dados = mysqli_fetch_array($res);
foreach($dados as $rowcat){ ?>
<ul>
<li><?php
echo $rowcat['nome_categoria']; ?></li>
<?php
//ERRO OCORRE AQUI - LINHA 238
$items = $rowcat['items'] ;
$items_array = explode(',',$items);
if(is_array($items_array) && count($items_array) > 0 ){
?>
<ul>
<?php
foreach($items_array as $nome_sub){
?>
<li>
<?php
//ERRO OCORRE AQUI - LINHA 242
echo $nome_sub; ?>
</li>
<?php } ?>
</ul>
<?php }?>
</ul>
<?php } ?>
Antonio Almeida
Curtidas 0
Respostas
Rafael Carrenho
02/08/2014
Olá Antonio,
a forma que você está pegando as linhas do resultado da busca MySQL está na verdade retornando um campo da tabela, ou seja, quando o PHP lê esta linha:
Você está pegando uma linha da tabela, a forma certa seria o seguinte, troque o foreach por um while com o seguinte conteúdo:
a forma que você está pegando as linhas do resultado da busca MySQL está na verdade retornando um campo da tabela, ou seja, quando o PHP lê esta linha:
$dados = mysqli_fetch_array($res);
Você está pegando uma linha da tabela, a forma certa seria o seguinte, troque o foreach por um while com o seguinte conteúdo:
while($row = mysqli_fetch_array($res)){GOSTEI 0
Antonio Almeida
02/08/2014
Milléo muito obrigado pela ajuda!
Troquei foreach por while, funcionou perfeitamente.
Mais uma vez obrigado.
Troquei foreach por while, funcionou perfeitamente.
Mais uma vez obrigado.
GOSTEI 0
William
02/08/2014
Finalizando tópico!!!
GOSTEI 0