Consulta Categoria e Sub Categoria - PHP e MySql
02/08/2014
0
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
Curtir tópico
+ 0
Responder
Posts
02/08/2014
Rafael Carrenho
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)){
Responder
03/08/2014
Antonio Almeida
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.
Responder
Clique aqui para fazer login e interagir na Comunidade :)