Array
(
)

Consulta Categoria e Sub Categoria - PHP e MySql

PHP
Antonio Almeida
   - 02 ago 2014

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:
#Código

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

#Código
<?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 } ?>


Citação:

<?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 } ?>

Milléo
   - 02 ago 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:

#Código

$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:

#Código
while($row = mysqli_fetch_array($res)){

0
|
0

Antonio Almeida
   - 03 ago 2014

Milléo muito obrigado pela ajuda!

Troquei foreach por while, funcionou perfeitamente.

Mais uma vez obrigado.

0
|
0

William (devwilliam)
   - 03 ago 2014

Finalizando tópico!!!

0
|
0