Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andrew Marques

Problema com Loop para exibição de categorias com subcategorias

Recommended Posts

Olá pessoal, estou tentando exibir minhas categorias e subcategorias que tenho banco de dados..

 

Na tabela categorias tenho os campos ID e Nome... Na tabela subcategorias tenho os campos ID, Nome e Categoria (onde ficará o id da categoria pai)...

 

O meu código está assim:

 

<ul>

 <?php
 $sql_categoria = mysql_query("SELECT * FROM categorias") or die (mysql_error()); 
 while($dados_categoria = mysql_fetch_array($sql_categoria)){
 ?>
					
 <li><a><?php echo $dados_categoria['nome'];?></a>
  <?php
  $sql_sub_cate = mysql_query("SELECT * FROM subcategorias WHERE categoria = '".$dados_categoria['id']."' ORDER BY nome ASC") or die (mysql_error()); 
  while($dados_sub_cate = mysql_fetch_array($sql_sub_cate)){

  echo "
  <ul class='subcategoria'> 
   <li><a href=''>".$dados_sub_cate['nome']."</a></li> 
  </ul>
  ";
  }
  ?> 
 <ul class="subcategoria">
  <li><a href="#"><?php echo $res_subcat['nome'];?></a></li>
 </ul>
 <?php
 }
 ?>
 </li>

</ul>

 

Porém ele só está retornando a primeira subcategoria, e não todas relacionadas aquela categoria pai...

 

Alguem pode me auxiliar a arrumar esse script?

 

Obrigado, desde já?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só não enxerguei da onde vem $res_subcat

 

Não entendi porque você repete a <ul class="subcategoria">

 <ul>
<?php
   $sql_categoria = mysql_query("SELECT * FROM categorias") or die (mysql_error()); 
   while($dados_categoria = mysql_fetch_array($sql_categoria)){
?>
   <li>
     <a><?php echo $dados_categoria['nome'];?></a>
  <?php
   $sql_sub_cate = mysql_query("SELECT * FROM subcategorias WHERE categoria = '$dados_categoria[id]'    ORDER BY nome ASC") or die (mysql_error()); 
  while($dados_sub_cate = mysql_fetch_array($sql_sub_cate)){

  echo'
  <ul class="subcategoria"> 
     <li><a href="">'.$dados_sub_cate['nome'].'</a></li> 
  </ul>
  ';
  }
  ?> 
 <ul class="subcategoria">
  <li><a href="#"><?php echo $res_subcat['nome'];?></a></li>
 </ul>
 <?php
 }
 ?>
 </li>

</ul>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Edit...

 

<ul>

<?php
   $sql_categoria = mysql_query("SELECT * FROM categorias") or die (mysql_error()); 
   while($dados_categoria = mysql_fetch_array($sql_categoria)){
?>
<li>
<a><?php echo $dados_categoria['nome'];?></a>
<?php
$sql_sub_cat = mysql_query("SELECT * FROM subcategorias WHERE cat_pai = '{$dados_categoria['id']}' ORDER BY nome ASC") or die (mysql_error()); 
while($dados_sub_cat = mysql_fetch_array($sql_sub_cat)){

echo'
<ul class="subcategoria"> 
<li><a href="#">'.$dados_sub_cat['nome'].'</a></li> 
</ul>
';
	}
}
?>
</li>

</ul>

 

Só aparece o primeiro resultado, não todos relacionados a aquela categoria... ;x

Compartilhar este post


Link para o post
Compartilhar em outros sites

As categorias "pais" estão aparecendo normalmente...

 

Só as subcategorias que tem que aparecer em baixo que não estão...

 

Ta aparecendo só uma subcategoria e não todas, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz, provavelmente a variável $res_subcat não exista neste arquivo e devido a isso, está retornando um erro onde o script para de executar.

 

Faça um teste, retire a variável e vê no que da :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera... vc resolve isso com INNER JOIN.

 

 

Leiam:

http://wbruno.com.br/sql/listar-categorias-subcategorias-php-mysql/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente desta forma:

 

<?php
$sql_categoria = "SELECT * FROM categorias";
$rs_categoria = mysql_query($sql_categoria) or die(mysql_error());
$num_categoria = mysql_num_rows($rs_categoria);
if($num_categoria > 0){
	echo '<ul>';
	while($dados_categoria = mysql_fetch_array($rs_categoria)){
		echo '<li>'.$dados_categoria['nome'].'</li>';
		
		$sql_sub_categoria = "SELECT * FROM subcategorias WHERE cat_pai = '".$dados_categoria['id']."' ORDER BY nome ASC";
		$rs_sub_categoria = mysql_query($sql_sub_categoria) or die(mysql_error());
		$num_sub_categoria = mysql_num_rows($rs_sub_categoria);
		if($num_categoria > 0){
			echo '<ul>';
			while($dados_sub_categoria = mysql_fetch_array($rs_sub_categoria)){
				echo '<li><a href="#">'.$dados_sub_categoria['nome'].'</a></li> ';
			}
			echo '</ul>';
		} else {
			echo 'Nenhuma sub-categoria encontrada para esta categoria';
		}
	}
	echo '</ul>';
} else {
	echo 'Nenhuma categoria encontrada';
}
?>

Espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

#Felipe, primeiramente obrigado pela resposta...

 

Aparentemente está certo, porém a UL das subcategorias tem que estar dentro da LI da categoria mãe, por que uso um efeito em javascript para esconder as subcategorias e só aparecer quando clicar na categoria mãe, entende, tipo um submenu...

 

Apenas isso que não deu, e não consegui arrumar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que dessa forma fica semelhante ao seu:

 

<?php
$sql_categoria = "SELECT * FROM categorias";
$rs_categoria = mysql_query($sql_categoria) or die(mysql_error());
$num_categoria = mysql_num_rows($rs_categoria);
if($num_categoria > 0){
	echo '<ul>';
	while($dados_categoria = mysql_fetch_array($rs_categoria)){
		echo '<li><a>'.$dados_categoria['nome'].'</a>';
		
		$sql_sub_categoria = "SELECT * FROM subcategorias WHERE cat_pai = '".$dados_categoria['id']."' ORDER BY nome ASC";
		$rs_sub_categoria = mysql_query($sql_sub_categoria) or die(mysql_error());
		$num_sub_categoria = mysql_num_rows($rs_sub_categoria);
		if($num_categoria > 0){
			echo '<ul class="subcategoria">';
			while($dados_sub_categoria = mysql_fetch_array($rs_sub_categoria)){
				echo '<li><a href="#">'.$dados_sub_categoria['nome'].'</a></li> ';
			}
			echo '</ul>';
		} else {
			echo 'Nenhuma sub-categoria encontrada para esta categoria';
		}
	}
	echo '</li></ul>';
} else {
	echo 'Nenhuma categoria encontrada';
}
?>

Qualquer coisa, tenta adaptar ao teu código.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um jeito mais fácil, é cria uma única matriz, com id_pai e id_parent,

no caso montar dois selects e gambiarra e o pior fica limitado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fico feliz que tenha resolvido seu problema. E esqueci de avisar, se não quiser que apareça a mensagem de que não há sub-categoria, basta remover o trecho:

[...]
 else {
      echo 'Nenhuma sub-categoria encontrada para esta categoria';
}
[...]

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.