Jump to content
L@nder

[RESOLVIDO] Listar categorias e subcategorias

Recommended Posts

Olá pessoal

 

Estou quebrando a cabeça para fazer com que o php liste as categorias e sub-categorias.do menu da página que estou fazendo.

A estrutura do menu deve ser esta

============================

Categoria 1

  • Subcategoria
  • Subcategoria
  • Subcategoria

Categoria 2

  • Subcategoria
  • Subcategoria
  • Subcategoria

Categoria 3

  • Subcategoria
  • Subcategoria
  • Subcategoria

==============================

 

Eu fiz a consulta e fiz com que as categorias sejam listadas, porém não estou conseguindo fazer listar abaixo de cada categoria suas respectivas sub-categorias.

 

Segue abaixo o código que estou usando para listar as categorias.

 

<?php
$sql = mysqli_query($conn, "SELECT * FROM categoria ORDER BY categoria ASC");
while($dados=mysqli_fetch_array($sql))
{
    echo '<li><span class="opener">' . $dados['categoria'] . '</span><ul>';
    echo '<li><a href="#">subcategoria</a></li>'; //E justamente nesta linha que preciso fazer aparecer as subcategorias que estão na tebela "sub_categoria"
    echo '</ul></li>';
}
?> 

 

Se alguém puder me ajudar ficarei agradecido.

Share this post


Link to post
Share on other sites
4 minutos atrás, Gleyson Abreu disse:

Como está a estrutura do banco de dados da categoria e sub_categoria? acho que com INNER JOIN resolveria seu problema.

Está assim:

 

Tabela categoria:

  • id
  • categoria
  • imagem

Tabela sub_categoria

  • id
  • id_categoria
  • sub_categoria

Share this post


Link to post
Share on other sites

Uma relação simples de tabela seria:

	  $query = $db->prepare("SELECT * FROM categoria");
          $query->execute();

          while($cat = $query->fetch(PDO::FETCH_ASSOC)){
              $nomecat = $cat['categoria'];
              $idcat = $cat['id'];

              echo $nomecat."<BR>";
              
              $subcat = $db->prepare("SELECT * FROM subcategoria WHERE id_categoria = :idcat ");
              $subcat->bindValue(":idcat", $idcat, PDO::PARAM_STR);
              $subcat->execute();

              while ($sub = $subcat->fetch(PDO::FETCH_ASSOC)) {
                    $subcatnome = $sub['subcategoria'];

                    echo "SUB CATEGORIA: ".$subcatnome."<BR>";
              }
              echo "<HR>";
          }

Tem outros métodos como INNER JOIN, LEFT JOIN, RIGHT JOIN etc...

Share this post


Link to post
Share on other sites
1 hora atrás, Gleyson Abreu disse:

Uma relação simples de tabela seria:


	  $query = $db->prepare("SELECT * FROM categoria");
          $query->execute();

          while($cat = $query->fetch(PDO::FETCH_ASSOC)){
              $nomecat = $cat['categoria'];
              $idcat = $cat['id'];

              echo $nomecat."<BR>";
              
              $subcat = $db->prepare("SELECT * FROM subcategoria WHERE id_categoria = :idcat ");
              $subcat->bindValue(":idcat", $idcat, PDO::PARAM_STR);
              $subcat->execute();

              while ($sub = $subcat->fetch(PDO::FETCH_ASSOC)) {
                    $subcatnome = $sub['subcategoria'];

                    echo "SUB CATEGORIA: ".$subcatnome."<BR>";
              }
              echo "<HR>";
          }

 

Testei aqui e apresentou este erro:

 

Notice: Undefined variable: db in C:\xampp\htdocs\template\teste.php on line 5

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\visudic-template-final\teste.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\template\teste.php on line 5

Share this post


Link to post
Share on other sites
10 minutos atrás, Gleyson Abreu disse:

A variável $db e a conexão com o banco de dados meu localhost, você tem que substituir pela conexão do seu banco de dados. Se você usa PDO só troca a conexão se usa MySQLi tem adaptar um pouco o código.

Agora deu erro em outra linha

 

Eu uso MySQLi 

 

Warning: mysqli_stmt::fetch() expects exactly 0 parameters, 1 given in C:\xampp\htdocs\template\teste.php on line 8

Share this post


Link to post
Share on other sites
17 minutos atrás, Gleyson Abreu disse:

A variável $db e a conexão com o banco de dados meu localhost, você tem que substituir pela conexão do seu banco de dados. Se você usa PDO só troca a conexão se usa MySQLi tem adaptar um pouco o código.

Conectei via PDO (Algo que até agora era uma novidade para mim) e deu certo.

 

Muito obrigado pela ajuda. Fique com Deus.

Share this post


Link to post
Share on other sites

Você deve está usando MySQLi dei uma adaptada olha aí aqui está funcionando tudo ok.

$mysqli = new mysqli('localhost', 'root', '', 'teste');

              $query = mysqli_query($mysqli, "SELECT * FROM categoria");

              while ($cat = $query->fetch_assoc()) {
                 $nomecat = $cat['categoria'];
                 $idcat = $cat['id'];
                 echo $nomecat."<BR>";

              $subcat = mysqli_query($mysqli, "SELECT * FROM subcategoria WHERE id_categoria = '$idcat' ");

              while ($sub = $subcat->fetch_assoc()) {
                    $subcatnome = $sub['subcategoria'];

                    echo "SUB CATEGORIA: ".$subcatnome."<BR>";
              }
              echo "<HR>";
              }

 

Share this post


Link to post
Share on other sites
6 minutos atrás, Gleyson Abreu disse:

Você deve está usando MySQLi dei uma adaptada olha aí aqui está funcionando tudo ok.


$mysqli = new mysqli('localhost', 'root', '', 'teste');

              $query = mysqli_query($mysqli, "SELECT * FROM categoria");

              while ($cat = $query->fetch_assoc()) {
                 $nomecat = $cat['categoria'];
                 $idcat = $cat['id'];
                 echo $nomecat."<BR>";

              $subcat = mysqli_query($mysqli, "SELECT * FROM subcategoria WHERE id_categoria = '$idcat' ");

              while ($sub = $subcat->fetch_assoc()) {
                    $subcatnome = $sub['subcategoria'];

                    echo "SUB CATEGORIA: ".$subcatnome."<BR>";
              }
              echo "<HR>";
              }

 

Também deu certo aqui.

 

N a sua opinião qual o melhor a usar, mysli ou PDO?

Share this post


Link to post
Share on other sites

Cara uma das vantagens de usar o PDO é quele e suporta vários tipos de bancos de dados como (Postgre SQL, SQLite, MySQL, Oracle, etcs..) já o MySQLi apenas e suportado o MySQL, encontra partida o MySQLi e mais rápido que o PDO em execuções. Acho que se você está procurando um desempenho melhor opte por MySQLi, pela portabilidade de acesso a mais bancos de dados eu utilizo já a um tempo o PDO é ambas as linguagens são seguras desde quem estiver programando saiba usar de forma correta. Tem vários artigos sobre MySQLi x PDO no google com vantagens e desvantagens de cada uma, no final e você vai escolher qual melhor para seu projeto.

  • Obrigado! 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By calinthians
      Olá pessoal, estou criando um sistema de portfólios e fiz tudo funcionar sem PHP, quando transformei o sistema em dinâmico não está mais abrindo o modal de cada portfólio qd clica nele, sendo que eu inspecionei a página e está pegando os valores corretos na ID, só não está abrindo mesmo, e outro modal sem o PHP continua abrindo normalmente.
       
       
      <section id="portfolio"> <div class="container"> <div class="text-center"> <h3 class="section-heading">Portfólio</h3> </div>   <ul id="port-group"> <?php while($dado = mysqli_fetch_assoc($consulta) ) { ?> <li> <div class="portfolio-item"> <a href="#portmodal<?php echo $dado['id']; ?>" class="portfolio-link" data-toggle="modal"> <div class="portfolio-hover"> <div class="portfolio-hover-content pagport"> <i class="fa fa-plus fa-3x"></i> </div> </div> <div class="portfolio-responsive idportimg1"> <style>.idportimg1 {background-image: url("img/bg.png")}</style> </div> </a>   <div class="portfolio-caption"> <h5><?php echo $dado['titulo']; ?></h5> <p class="text-muted"><?php echo $dado['subtitulo']; ?></p> </div> </div> </li>   <!-- Portfolio Modal --> <div class="portfolio-modal modal fade" id="portmodal<?php echo $dado['id']; ?>>" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="close-modal" data-dismiss="modal"> <div class="lr"> <div class="rl"> </div> </div> </div> <div class="container"> <div class="row"> <div class="col-lg-2"> </div> <div class="col-lg-8"> <div class="modal-body"> <h3><?php echo $dado['titulo']; ?></h3> <img class="img-responsive img-centered" src="img/portfolio/site1.jpg" alt=""> <p><?php echo $dado['descricao']; ?></p> <img class="img-responsive img-centered" src="img/portfolio/site11.jpg" alt=""> <ul class="list-inline"> <li><?php echo $dado['datax']; ?></li> <li><?php echo $dado['cliente']; ?></li> <li><?php echo $dado['categoria']; ?></li> </ul> <button type="button" class="btn-close" data-dismiss="modal"><i class="fa fa-times"></i> Fechar</button> </div> </div> <div class="col-lg-2"> </div> </div> </div> </div> </div> </div> <?php } ?> </ul> </div> </section>
    • By NeumarFreire
      Caros amigos. Sou novo neste forum e tenho um problema de código na página resposta. Apesar dos indeces estarem de acordo com os "name" do formulários o erro se mantém.
      Troquei o Method no campo emailId para GET e o erro desapareceu mas nos outros campos não. Vejam o código EM NEGRITO abaixo e se puderem ajudar...
      <?php include_once 'restrito_all.php'; ?>
      <?php include_once 'validar_user.php'; ?>
      <?php include_once 'header.php'; ?>
      <?php
      date_default_timezone_set('America/Sao_Paulo');
      $data= date('d/m/Y');
      $hora= date('H:i').' H';
      ?>
            
            <div id="local">
                  <div class="caminho">Onde estou: NFL & Associados &raquo; Painel de Controle &raquo; Admin &raquo; Visualizar/Responder</div>
                  <div class="welcome">Olá, <?php echo $clienteNome;?> | <?php  echo $data .' às '.$hora ?> | <a href="deslogar.php">Sair</a></div>
            </div>

             <div id="content">
           
      <?php include_once 'menu.php'; ?>
         
                   <div id="content_conteudo">
                   
      <?php include_once 'carregando.php'; ?>

      <?php
      $emailAdmin ='contato@nflweb.com.br';
      $emailAssunto = 'CONTATO Portal Imobiliário NFL & Associados';
      $emailStatus = 'completo';
      $emailResposta = date ('Y-m-d H:i:s');
      $headers = "From: $emailAdmin\n";
      $headers .= "MIME-Version: 1.0\n";
      $headers .= "content-type:text/html; charset=\"utf-8\"/n/n";
      $emailId = $_GET['emailId'];
      $emailTxt = $_POST['mensagem'];
      $emailEmail = $_POST['emailEmail'];
      $recebidoEm = $_POST['emailData'];
      $mensagemEm = $_POST['emailMensagem'];
      $sql_enviaAdmin = 'UPDATE imobi_mailadmin SET = emailStatus = :emailStatus, emailResposta = :emailResposta, emailTxt = :emailTxt WHERE emailId = :emailId ';
      try{
          $query_enviaAdmin = $conecta->prepare($sql_enviaAdmin);
          $query_enviaAdmin->bindValue(':emailStatus',$emailStatus,PDO::PARAM_STR);
          $query_enviaAdmin->bindValue(':emailResposta',$emailResposta,PDO::PARAM_STR);
          $query_enviaAdmin->bindValue(':emailTxt',$emailTxt,PDO::PARAM_STR);
          $query_enviaAdmin->bindValue(':emailId',$emailId,PDO::PARAM_STR);
          $query_enviaAdmin->execute();
          echo '<div class="ok">Mensagem enviada com sucesso!</div><br /> ';
          
      }catch(PDOexception $error_adminEmail){
          echo 'Erro ao atualizar e-mail';
      }
      ?>
                   
                   <div class="inbox">
                   
      <table width="100%" border="0" cellspacing="2" cellpadding="0">
        <tr class="cabecalho">
          <td align="center">DATA</td>
          <td align="center">NOME</td>
          <td align="center">E-MAIL</td>
          <td align="center">EXECUTAR:</td>
        </tr>
       
       <?php
         $emailId =$_GET ['emailId'];
         $sql_inboxAdmin = 'SELECT * FROM imobi_mailadmin WHERE emailId = :emailId ';
      try{
          
          $query_inboxAdmin = $conecta->prepare($sql_inboxAdmin);
          $query_inboxAdmin->bindValue(':emailId', $emailId,PDO::PARAM_STR);
          $query_inboxAdmin->execute();
          
          $resultado_inboxAdmin = $query_inboxAdmin->fetchAll(PDO::FETCH_ASSOC);
          
          }catch(PDOexception $error_inboxAdmin){
              echo 'Erro ao selecionar pendentes.';
          }
          $i=0;
          foreach($resultado_inboxAdmin as $res_inboxAdmin){
              
              $emailId = $res_inboxAdmin['emailId'];
              $emailNome = $res_inboxAdmin ['emailNome'];
              $emailMensagem = $res_inboxAdmin ['emailMensagem'];
              $emailEmail = $res_inboxAdmin ['emailEmail'];
              $emailData = $res_inboxAdmin ['emailData'];
              $emailStatus = $res_inboxAdmin ['emailStatus'];
              $emailResposta = $res_inboxAdmin ['emailResposta'];
              $emailTxt = $res_inboxAdmin ['emailTxt'];
              $cor = 'bgcolor="#EBE9FE"';
      ?>  
       
        <tr <?php echo $cor; ?>>
          <td align="center"><?php echo date('d/m/Y - H:i',strtotime($emailData));?>h</td>
          <td align="left"><?php echo $emailNome;?></td>
          <td align="center"><?php echo $emailEmail;?></td>
          <td align="center" ><a href="painel.php">Voltar</a></td>
        </tr>
       
        <tr <?php echo $cor; ?>>
          <td align="center" class="cabecalho">MENSAGEM:</td>
          <td align="left" colspan="3"><?php echo $emailMensagem;?></td>
        </tr>
       
       
       <?php
        }  
       
      ?>
       
      </table>
             
                </div> <!--FECHA CLASS INBOX --> <br />
      <br />
           <form name="responderEmail" action="" enctype="multipart/form-data" method="POST">
               <label>
                   <span>Escreva a resposta: </span>
                  <textarea rows="8" name="mensagem" cols="108"></textarea>
               </label>
               <input type="hidden" name = "emailId" value = "<?php echo $emailId;?>" />
               <input type="hidden" name = "emailEmail"  value = "<?php echo $emailEmail;?>" />
               <input type="hidden" name = "emailData"  value = "<?php echo $emailData;?>" />
               <input type="hidden" name = "emailMensagem"  value = "<?php echo $emailMensagem;?>" />
                         
               <input type="submit" name = "executar" id="executar" value="Enviar resposta" />
           </form>  
                    
               </div> <!--FECHA CONTENT CONTEUDO-->
               
           </div> <!--CONTENT-->

      <?php include_once 'footer.php'; ?>

    • By daniramon
      Olá pessoal, tudo bem?
       
      Sou novato em PHP, e preciso criar a seguinte função.
       
      Meu problema: 
      - Recebo os seguintes parâmetros: (total de alunos & número de pessoas por grupo).
      - Preciso definir um número ideal de pessoas por grupo, sem deixar nenhum grupo desfalcado. 
      - Mínimo de 4 pessoas por grupo;
      <?php $totalUsers = 50; $usersPerGroup = 6; $minPerGroup = 4; ?>  
      $var = $totalUsers / $usersPerGroup;
       
      Na simulação acima, terei 7 grupos com 6 pessoas, e um grupo com 1,4 pessoas..rs.
       
      Gostaria, que a função me retornasse, em um mundo ideal:
       
      7 grupos com 6 pessoas = 42 pessoas
       
       2  grupos com 4 pessoas = 8 pessoas
      <?php return $array = [ 7 => 6, 2 => 4]; ?>  
      Alguém poderia me ajudar na criação desta função, please...
    • By Carcleo
      Parece brincadeira, mas estou fazem 3 dias tentando instalar a cURL e não consigo
      Windows 10 Pro Apache 2.4 Php 7.3.4 MySQL 8.0.15.0 Tentativas:
      1) libeay32.dll, msvcr71.dll, ssleay32.dll e php_curl.dll coladas na pasta system32 e adicionadas ao PATH do Windows 2) Baixei a biblioteca cURL do site https://curl.haxx.se/, cliquei em curl.exe e nada acontece. 3) ;extension=CURL e ;extension=php_curl.dll descomentadas no php.ini (Embora a linha ;extension=php_curl.dll não exista nessa versão do PHP eu inserí ela na lista) 4) Confirmado de que o php.ini é o correto.  Agora só faltam 2 tentativas
       
      A) Apelar para a fé.
      B) Instalar Apache e PHP antigos pois lembro-me que usei em um projeto fazem uns anos e funcionava de boa.
           Mas não gostara de voltar no tempo.
       
      Claro que essas 2 foram só para descontrair!
       
      Alguém me ajuda? Ode estou errando?
    • By terra
      Olá,
       
      Preciso pegar o valor desse select
       
       
       aqui nessa query
       
       
      Agradeço qualquer ajuda
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.