Jump to content
Carlos Antoliv

Como usar o foreach para pegar pegar todos os "produtos" de um grupo na coluna?

Recommended Posts

Então, eh algo até simples, problema de lógica e tudo.  Eu tinha feito, mas o codigo sumiu do nada e nao lembro mais da lógica que eu empregara.

 

O enredo éh assim

 

tabela_grupo_produtos

e

tabela tabela_produtos

 

Na tabela_grupo_produtos tem:
- informatica;

- eletrodomestico;

- brinquedos;

 

na  tabela_produtos tem os podutos que são ligados a tabela de grupo de grupo de produtos:
 

- informatica->notebook

- informatica->computador

- informatica->roteador

 

- eletrodomestico->geladeira

- eletrodomestico->microondas

- eletrodomestico->fogao

 

- brinquedos->lego

- brinquedos->boneca

- brinquedos->carrinhos

 

O que estou tentando fazer é o seguinte:

 

- informatica->notebook

                        ->computador

                        ->roteador

 

- eletrodomestico->geladeira

                               ->microondas

                               ->fogao

 

- brinquedos- >lego

                       -> boneca

                       ->carrinhos

 

 

Ou seja, mostra na tela pelo "GRUPO" de produtos.

 

fiz um select no banco....

e tambem um foreach, mas tem algo que ta errado.

 

Cheguei até executar dois selects distintos:

EXEMPLO:


<!--#################### CÓDIGO SESSÃO ################################ --> 

<?php
    session_start();
    echo "Usuario: ". $_SESSION['usuarioNome'];    
    echo "<br>";
    echo "Codigo:  ". $idSessao = $_SESSION['usuarioId'];
?>


<br>
 

<a href="sair.php">Sair</a>
<!-- #####################FIM CODIGO SESSÃO ############################### -->

<?php 
    $servername = "localhost";
$username = "root";
$password = "";
$database = "";

try {
    $conexao2 = new PDO('mysql:host=localhost;dbname=banco', $username, $password);
      $conexao2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  } catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage();
  }
    
    $sql2 = "SELECT pdos.fk_usuarios, pdos.nome_prod, pdo.nome_produto, nome_grupo_prod, pdos.foto, pdos.desc_prod, pdos.peso_liq_prod, pdos.qtd_prod, pdos.id_prod, pdos.un_medida
    FROM tb_produtos AS pdos
    JOIN tb_produto AS pdo ON pdos.nome_prod = pdo.id_produto
    JOIN tb_grupo_prod AS gpdo 
    ON gpdo.id_grupo_prod = pdos.fk_tb_grupo_prod 
    INNER JOIN usuarios As usu
    ON pdos.fk_usuarios = usu.id  ";


    $stm2 = $conexao2->prepare($sql2);
    $stm2->execute();
    $kit3 = $stm2->fetchAll(PDO::FETCH_OBJ);
?>

<?php
require 'database/conexao.php';

// Recebe o termo de pesquisa se existir
$termo = (isset($_GET['termo'])) ? $_GET['termo'] : '';

// Verifica se o termo de pesquisa está vazio, se estiver executa uma consulta completa
if (empty($termo)):

    $conexao = conexao::getInstance();
    $sql = 'SELECT DISTINCT
item.fk_tb_produtos,
usu.nome,
prod.nome_produto,
prods.desc_prod,
prods.peso_liq_prod,
prods.un_medida,
item.fk_tb_kit,
kit.nome_kit,
kit.preco_kit,
prods.qtd_prod,
kit.id_nome_kit,
kit.desc_kit


FROM tb_itemprodkit item /* tb_itemprodkit*/

INNER JOIN usuarios usu        /* usuarios*/
ON item.fk_usuarios = usu.id

INNER JOIN tb_produtos prods  /* tb_produtos */
ON item.fk_tb_produtos = prods.id_prod

INNER JOIN tb_kit kit       /*tb_kit */
ON item.fk_tb_kit = kit.id_nome_kit

INNER JOIN tb_produto prod
ON prods.nome_prod = prod.id_produto  WHERE fk_usuario = 5 GROUP BY kit.id_nome_kit  ';
    $stm = $conexao->prepare($sql);
    $stm->execute();
    $kit = $stm->fetchAll(PDO::FETCH_OBJ);

else:

    // Executa uma consulta baseada no termo de pesquisa passado como parâmetro
    $conexao = conexao::getInstance();
    $sql = 'SELECT * FROM tb_kit WHERE nome_kit LIKE :nome_kit OR desc_kit LIKE :desc_kit';
    $stm = $conexao->prepare($sql);
    $stm->bindValue(':nome_kit', $termo.'%');
    $stm->bindValue(':desc_kit', $termo.'%');
    $stm->execute();
    $kit = $stm->fetchAll(PDO::FETCH_OBJ);

endif;
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Listagem KITs </title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
    <div class='container'>
        <fieldset>

            <!-- Cabeçalho da Listagem -->
            <legend><h1>Listagem de Kits</h1></legend>

            <!-- Formulário de Pesquisa -->
            <form action="" method="get" id='form-contato' class="form-horizontal col-md-10">
                <label class="col-md-2 control-label" for="termo">Pesquisar</label>
                <div class='col-md-7'>
                    <input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Nome ou E-mail">
                </div>
                <button type="submit" class="btn btn-primary">Pesquisar</button>
                <a href='index.php' class="btn btn-primary">Ver Todos</a>
            </form>

            <!-- Link para página de cadastro -->
            <a href='kit_cadastro.php' class="btn btn-success pull-right">Cadastrar Kit</a>
            <div class='clearfix'></div>

            <?php if(!empty($kit)):?>

                <!-- Tabela de Clientes -->
                <table class="table table-striped">
                    <tr class='active'>
                        <th>Foto</th>
                        <th>produto</th>
                        <th>Nome</th>
                        <th>Descrição</th>
                        <th>Preço</th>
                        <th>Ação</th>
                    </tr>
                    <?php foreach($kit as $kit2):?>
                        <tr>
                            <td><img src='fotos/<?=$kit2->foto?>' height='40' width='40'></td>
                            
                           
                            <?php foreach($kit3 as $kit4):?>
                            <td> 
                                <?=$kit4->nome_produto.'<br>'; ?>
                                
                         
                         </td><?php endforeach; ?>
                           
                            
                            <td><?=$kit2->nome_kit?></td>
                                </td>
                            <td><?=$kit2->desc_kit?></td>
                            <td><?='R$ '.$kit2->preco_kit.',00'?></td>
                            
                            <td>
                                <a href='kit_editar.php?id_nome_kit=<?=$kit2->id_nome_kit?>' class="btn btn-primary">Editar</a>
                                <a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$kit2->id_nome_kit?>">Excluir</a>
                            </td>
                        </tr>    
                        
                        
                      
                        
                        
                    <?php endforeach;?>
                </table>

            <?php else: ?>

                <!-- Mensagem caso não exista clientes ou não encontrado  -->
                <h3 class="text-center text-primary">Não existe Kit cadastrados!</h3>
            <?php endif; ?>
        </fieldset>
    </div>
    <script type="text/javascript" src="js/custom.js"></script>
</body>
</html>

 

....se alguem puder ajudar...

 

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 Sapinn
      Fala galera tudo beleza? Então alguém sabe como adicionar e remover campos de texto com js. Tipo teria um botão com um + "mais" para adicionar novos campos e junto a estes campos teria um ícone com um lixeira para remover, toda vez que fosse clicado nesse ícone o campo seria removido, apenas aquele campo. Encontrei um código para adicionar um campo mas a parte de remover ta dando dor de cabeça
      <!DOCTYPE html> <html lang="pt-br"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>Pagina</title>     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css"> </head> <body>     <form id="myForm">         <div id="lines"></div>         <button type="button" onclick="addInput('lines')">+</button>         <input type="submit" value="Enviar">       </form>             <script>           var formLine = 1;                 function addInput(divName) {                 var newdiv = document.createElement('div');                 newdiv.innerHTML += '<input type="text" name="produto" id='+formLine+'>';                 newdiv.innerHTML += ' <i class="bi bi-trash-fill"></i>';                 document.getElementById(divName).appendChild(newdiv);                 formLine++;             }         addInput('lines');       </script> </body> </html>  
    • By Kefatif
      Prezados, bom dia.
       
      "Warning: Invalid argument supplied for foreach() in.... line 98"
       
      Sou novo na área e estou aprendendo, hoje me deparei com o erro supracitado, onde tenho uma query que atualiza os dados no meu banco mysql..
      $sql = "update TESTE_DISPENSACAO set DIAS_COBERTURA = '".$diascobertura."', DATA_DISPENSACAO = '".$datadispensacao."', PESO = '".$peso."', ID_TESTE = '".$idTESTE."', OBS = '".$obs."' where ID_TRATAMENTO = '".$idtratamento."'"; Porém ao atualizar o peso, ele apaga o id_teste ou se atualizar o id_teste ele apaga o peso.
       
      Segue abaixo a linha de onde a mensagem diz está o erro...
      $sqlTESTE = "select A.ID_TESTE, A.TESTE, B.ID_TRATAMENTO from TUBERCULOSE_TESTES A LEFT JOIN TESTE_DISPENSACAO B ON B.ID_TESTE = A.ID_TESTE WHERE B.ID_TRATAMENTO =".$idtratamento; $resultTESTE = mysqli_query($con, $sqlTESTE); $rowTESTE = mysqli_fetch_array($resultTESTE); foreach($rowTESTE as $key => $values){ $row[$key]= utf8_encode($values); }  
      Alguém poderia me explicar o porque do erro e como conserta-lo?
       
      Desconfio que ambos estão utilizando a mesma busca só sendo possível um resultado por vez, mas como estou aprendendo gostaria de confirmar e saber como consertar nesses casos.
       
      Agradeço desde já.
       
      Abs.
    • By marcossantana10
      Faço uma consulta no banco para buscar uma lista de horários, depois preciso comparar esse resultado com um array só de horários que eu possuo. Utilizei o código abaixo pra isso:
       
      //dados do array $h_indisponiveis separados por _ (ilustrativo) 13:20:00_13:40:00_14:00:00_14:20:00_18:40:00_19:00:00_21:20:00 $sql = "MINHA CONSULTA"; $sql=$pdo->query($sql); if ($sql->rowCount() > 0) { $result = array('error'=>false, 'data' => array()); foreach ($sql as $row) { $horario['id'] = $row['id']; $horario['hora'] = $row['hora']; $horario['tempo'] = $row['tempo']; for($i=0; $i<$sizeArray; $i++){ if ($h_indisponiveis[$i] == $row['hora']){ $horario['disponivel'] = 'n'; } else { $horario['disponivel'] = 's'; } } array_push($result['data'], $horario); } echo json_encode($result); }  
      O problema é que ele não está retornando todas as correspondências entre o objeto da consulta e o array, apenas a última. Ao invés de marcar 6 resultados como "disponivel = n", ele só marca um. Como posso corrigir
       

    • By eiwes
      Fiz uma iteração foreach para gerar categorias e subcategorias, pois não queria fazer DOIS SELECTS, ficando assim:
       
      //----> Foreach para gerar a categoria, pois são vários items com as mesmas chaves, portanto agrupo foreach($exibeLista as $row){ $dlD[$row["nameD"]][] = [ "nameD"=>$row["nameD"], "idD"=>$row["idD"], "qtdR"=>$row["qtdR"], "qtdF"=>$row["qtdF"] ]; } //----> Foreach para gerar subcategorias foreach($exibeLista as $row){ $dLA[$row["nameP"]][] = [ "nameD"=>$row["nameD"], "idD"=>$row["idD"], "idAss"=>$row["idAss"], "idT"=>$row["idT"], "nameP"=>$row["nameP"], "qtdR"=>$row["qtdR"], "qtdF"=>$row["qtdF"] ]; } $fsHTML = []; $rateD = 0; $qtdAss = 0; if(is_array($dlD) || is_object($dlD)){ foreach ($dlD as $key => $ds) { if ($key <> '' && $key <> NULL) { $rateD += (($ds[0]["qtdR"]*100)/$ds[0]["qtdF"]); $qtdAss += count($dlD[$key]); //----> Array para inserir HTML da Categoria criada e criar accordion $fsHTML[] = ' <div class="col-md-12 col-sm-12 col-xs-12"> <div class="x_panel overflow_hidden padding-into-row-qsts bg-white-row filtro-on"> <span class="rateD">'.ceil($rateD/$qtdAss).'%</span> <span class="opcao-into-top">'.$ds[0]["idD"].' - '.$ds[0]["nameD"].' <a class="collapse-link open-filter-qsts border-radius8"><i class="fa fa-chevron-up"></i></a></span> <div class="x_content" style="display:none;padding-top:10px"> <div class="accordion" id="accordion" role="tablist" aria-multiselectable="true"> '; //----> Verificar se a subcategoria contém a categoria, se contém é incluída na array foreach ($dLA as $keys => $ass) { if($ass[0]["idD"] == $ds[0]["idD"] ){ if($ass[0]['idT'] <> 0){ $link = 't='.$ass[0]['idT']; }else{ $link = 'a='.$ass[0]['idAss'];} $fsHTML[] = ' <div class="panel"> <a class="panel-heading collapsed" href="/v/fs/st?mz=y&type=c&'.$link.'"> <span class="eficiencia-accordion">'.ceil(($ass[0]['qtdR']*100)/$ass[0]['qtdF']).'%</span> <h4 class="panel-title">'.$ass[0]['nameP'].'</h4> <span class="unicamente">'.$ass[0]['qtdR'].' respondido de '.$ass[0]['qtdF'].'</span> </a> </div> '; }//if ass }//foreach ass }//if ds //----> Aqui é aonde ocorre o ERRO! Era pra fazer o fechamento do Accordion e gerar uma nova DIV. //No índice [0] isso ocorre normalmente, porém no [1] ela agrupa todos os accordions. (abaixo farei a amostra) $fsHTML[] = '</div></div></div></div>'; }//foreach ds }//if verifica se é array e se é objeto return implode('', array_unique($fsHTML)); O correto seria assim:
       
      - Categoria
        - Subcategoria
        - Subcategoria
       
      - Categoria
       - Subcategoria
       - Subcategoria
       
       
      Como está acontecendo:
       
      - Categoria
        - Subcategoria
        - Subcategoria
       
      - Categoria
        - Subcategoria
        - Subcategoria
          - Categoria
            - Subcategoria
            - Subcategoria
              - Categoria
                - Subcategoria
                - Subcategoria
                  - Categoria
                    - Subcategoria
                    - Subcategoria
       
       
      Não consigo entender de jeito nenhum pq o primeiro fecha corretamente e a partir do segundo não.
      Alguém me ajuda?
       
       
    • By ViniciusRamoa
      Olá, eu possuo o código:
       
      @foreach ($manga['chapters'] as $chapter) <div class="manga-chapter" > <h6 class="events-subtitle" style="left: -165px; top: 30px; position: relative;"> {{ link_to_route('front.manga.reader', "≫"." ".$chapter['chapter_name'], [$manga['manga_slug'], $chapter['chapter_slug']]) }} </h6> </div> @endforeach Mas ele acaba exibindo muitos itens, eu gostaria de limitar para apenas 5 itens, e que esses 5 itens, o menor fosse "apagado" e aparecesse o mais recente, exemplo:

      Atualmente:
      Item 5
      Item 4
      Item 3
      Item 2
      Item 1

      Quando um novo item for publicado, ficaria:
       
      Item 6
      Item 5
      Item 4
      Item 3
      Item 2

      Agradeço a ajuda, se puder pelo menos indicar um caminho, já ajuda muito, estou perdido aqui
       
×

Important Information

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