Ir para conteúdo

Arquivado

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

Gabrielvt14

Ajuda para mostrar dados do banco na tela

Recommended Posts

Olá pessoal, estou fazendo um INNER JOIN entre duas tabelas do meu banco. Mas estou com dificuldade para mostrar o resultado organizado na tela, alguém poderia me ajudar?

As tabelas são de categoria e serviço (relacionado a categoria). Na tabela categoria tenho somente o id e o nome da categoria. Ja na tabela de serviço tenho várias informações, mas preciso trazer somente o código do serviço e o nome do serviço.

A query que montei foi esta:

SELECT t1.*, t2.* FROM produto_tipo AS t1 INNER JOIN categorias AS t2 ON t2.id = t1.categoria

Onde PRODUTO_TIPO é a tabela de serviços e CATEGORIAS é a tabela de categoria, e o CAMPO categoria é a Chave Estrangeira (Sim, esta estranho, mas nao fui eu quem montou este BD). Quando executo esta query no phpmyadmin ele retorna as informações que preciso, mas, sem organização. Ele retorna assim:

id     cod     categoria    id   nome_categoria
118    ho         4         4      Hospedagem
117    dev        3         3      Desenvolvimento
116    444        3         3      Desenvolvimento
119    ho2        4         4      Hospedagem
120    emmkt      5         5      Marketing
121    rs         5         5      Marketing

 

Bem, primeiro vou dizer como quero as informações na tela... 

 

Categoria: Hospedagem (Que tem id=4)

código       Serviço

  ho            Servidor

  ho2           SMTP

 

Categoria: Desenvolvimento(Que tem id=3)

código       Serviço

  dev          Servidor

  444          SMTP

 

Categoria: Marketing (Que tem id=5)

código       Serviço

emmkt       E-mail Marketing

   rs             Rede social

 

Lembrando que as informações do campo SERVIÇO esta na tabela de serviços (PRODUTO_TIPO), com o campo chamado titulo.

 

No código PHP estou chamando essas informações assim:

<div class="row" align="center">
  <div class="col-lg-6">
    <h2>Categoria: <span style="color: #169F85;"><i><b>'. $row['nome_categoria'].'</b></i></span></h2>
  </div>
  <div class="col-lg-6 pull-right">
    <h2>Ações: 
      <a href="categoria_form.php?n='.$row['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
      <a href="#" onClick="javascript:Apagar(\''.$row['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
    </h2>
  </div>
</div>
  <tr>
    <td class="text-center"><strong>'.$row['cod'].'</strong></td>
    <td class="text-center">'.$row['titulo'].'</td>
    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row['valorCusto']).'</font></td>
    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row['valorFinal']).'</font></td>
    <td class="text-center">
      <a href="produtotipo_form.php?n='.$row['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
      <a href="#" onClick="javascript:Apagar(\''.$row['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
    </td>
  </tr>';

E deste jeito ele aparece assim na tela:

 

Categoria: Hospedagem

Categoria: Desenvolvimento

Categoria: Desenvolvimento

Categoria: Hospedagem

Categoria: Marketing

Categoria: Marketing

 

código       Serviço

emmkt       E-mail Marketing

   rs             Rede social

  dev          Servidor

  444          SMTP

  ho            Servidor

  ho2           SMTP

 

Não sei como resolver isso :/

 

Alguém poderia me ajudar?

 

Desde já, grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi direito, mas pelo que entendi você não vai conseguir direto na query deste modo, você precisa consultar as categorias, listar, e dentro da lista buscar os serviços relacionados a esta categoria.

Alguma coisa como:

 

<?php
$sql = "SELECT * FROM categorias";
$rs = $conecta->query($sql);
while($row = mysqli_fetch_array($rs)){
  	$categoria = $row['categoria'];
 	$sql_2 = "SELECT * FROM produto_tipo WHERE categoria = '$categoria'";
  	$rs_2 = $conecta->query($sql_2);
  	while($row_2 = mysqli_fetch_array($rs_2)){
    	//Aqui dentro você só tem os tipos de cada categoria
  	}
}

Detalhe importante, que nesse modo você entra no problema do n+1, se for poucos registros não tem problema, mas com muitos registros fica um consulta lenta, ai você precisaria trabalhar com o comando "IN" no MySQL.

 

Era isso mesmo ? Deu pra dar uma elucidada ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @AnthraxisBR, obrigado pela resposta!

 

Quando li seu código achei que funcionaria, mas não funcionou deste jeito. E você entendeu mesmo o que quero.

 

Fiz do jeito que você mencionou, e a unica mudança é que ele para de repetir a categoria.

Antes estava assim:

46 minutos atrás, Gabrielvt14 disse:

Categoria: Hospedagem

Categoria: Desenvolvimento

Categoria: Desenvolvimento

Categoria: Hospedagem

Categoria: Marketing

Categoria: Marketing

 

código       Serviço

emmkt       E-mail Marketing

   rs             Rede social

  dev          Servidor

  444          SMTP

  ho            Servidor

  ho2           SMTP

 

E do jeito que disse para fazer ficou assim:

Categoria: Hospedagem
Categoria: Desenvolvimento
Categoria: Marketing

código       Serviço
emmkt       E-mail Marketing
   rs             Rede social
  dev          Servidor
  444          SMTP
  ho            Servidor
  ho2           SMTP

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$sql = "SELECT * FROM categorias";
$rs = $conecta->query($sql);
while($row = mysqli_fetch_array($rs)){
  	$categoria = $row['categoria'];
   	echo $categoria;
 	$sql_2 = "SELECT * FROM produto_tipo WHERE categoria = '$categoria'";
  	$rs_2 = $conecta->query($sql_2);
  	while($row_2 = mysqli_fetch_array($rs_2)){
        echo $tipo_produto; 
    	//Aqui dentro você só tem os tipos de cada categoria
  	}
}

Acho que você colocou tudo dentro do segundo loop é isso ?

 

Coloca a categoria antes do segundo loop, e dentro do loop só os tipos, ve os 'echos' que eu coloquei ali.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, eu fiz desta forma mesmo. Ficou assim:

sql2 = "SELECT * FROM categorias";
$query2 = mysql_query($sql2);
$conta2 = mysql_num_rows($query2);

$montatabela = '';
while($row2 = mysql_fetch_assoc($query2)){

  $montatabela.='
                <div class="row" align="center">
                  <div class="col-lg-6">
                    <h2>Categoria: <span style="color: #169F85;"><i><b>'. $row2['nome_categoria'].'</b></i></span></h2>
                  </div>
                  <div class="col-lg-6 pull-right">
                    <h2>Ações: 
                      <a href="categoria_form.php?n='.$row2['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row2['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </h2>
                  </div>
                </div>';

	$categoria = $row2['id'];

  $sql3 = "SELECT * FROM produto_tipo WHERE categoria = '$categoria'";
  $query3 = mysql_query($sql3);
  $conta3 = mysql_num_rows($query3);

  while ($row3 = mysql_fetch_assoc($query3)) {
    $montatabela.='
                  <tr>
                    <td class="text-center"><strong>'.$row3['cod'].'</strong></td>
                    <td class="text-center">'.$row3['titulo'].'</td>
                    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row3['valorCusto']).'</font></td>
                    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row3['valorFinal']).'</font></td>
                    <td class="text-center">
                      <a href="produtotipo_form.php?n='.$row3['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row3['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </td>
                  </tr>';
  }
}

 

E depois estou chamando assim:

                  <div class="row">
                    <div class="col-lg-3">
                      <p class="text-muted font-13 m-b-30">
                        Confira a relação de todas as categorias disponíveis.
                      </p>
                    </div>
                    <div class="col-lg-7 pull-right">
                      <a type="button" class="btn btn-dark btn-sm" href="categoria_form.php"><i class="glyphicon glyphicon-plus"></i> &nbsp;Criar nova categoria</a> 
                    </div>
                    <table id="datatable-responsive" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
                      <thead>
						<?php echo $montatabelatitulo; ?>
                      </thead>
                      <tbody>
                        <?php echo $montatabela; ?>
                      </tbody>
                    </table>

                  </div>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você colocando dentro de <tr> sem inciar <table> ?

 

Pra mim exibiu assim aqui:

 

 

Categoria: '. $row2['nome_categoria'].'

Ações:

'.$row3['cod'].' '.$row3['titulo'].' R$ '.Decimal($row3['valorCusto']).' R$ '.Decimal($row3['valorFinal']).' '.$row3['cod'].' '.$row3['titulo'].' R$ '.Decimal($row3['valorCusto']).' R$ '.Decimal($row3['valorFinal']).'

Categoria: '. $row2['nome_categoria'].'

Ações:

'.$row3['cod'].' '.$row3['titulo'].' R$ '.Decimal($row3['valorCusto']).' R$ '.Decimal($row3['valorFinal']).' '.$row3['cod'].' '.$row3['titulo'].' R$ '.Decimal($row3['valorCusto']).' R$ '.Decimal($row3['valorFinal']).'

 

 

 

 

 

Talvez seja no HTML o problema, e as coisas não estão o lugar certo, por isso ele coloca em baixo, em vez de colocar no meio, acho que é essa "<tr>" sem "<table>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

O <table> eu chamo antes de chamar a variável $montatabela, assim:

<table id="datatable-responsive" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
	<thead>
		<?php echo $montatabelatitulo; ?>
	</thead>
	<tbody>
		<?php echo $montatabela; ?>
	</tbody>
 </table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é esse o problema, você ta colocando elementos que não são de tabela dentro da tabela, no caso você escreve isso:

 

<tbody>
<div class="row" align="center">
                  <div class="col-lg-6">
                    <h2>Categoria: <span style="color: #169F85;"><i><b>'. $row2['nome_categoria'].'</b></i></span></h2>
                  </div>
                  <div class="col-lg-6 pull-right">
                    <h2>Ações: 
                      <a href="categoria_form.php?n='.$row2['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row2['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </h2>
                  </div>
                </div>
<tr>
                    <td class="text-center"><strong>'.$row3['cod'].'</strong></td>
                    <td class="text-center">'.$row3['titulo'].'</td>
                    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row3['valorCusto']).'</font></td>
                    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row3['valorFinal']).'</font></td>
                    <td class="text-center">
                      <a href="produtotipo_form.php?n='.$row3['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row3['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </td>
                  </tr>
</tbody>

Dentro da tabela, ele só interpreta o que está dentro da <tr>, e o que está dentro da <div> fica fora.

 

Você precisa por o que está na div, dentro de elementos de table, 'tr', 'td', 'th'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não entendi... esta dizendo pra eu separar a variavel que armazena a categoria da tabela, tipo assim:

$exibe_categoria .='
                <div class="row" align="center">
                  <div class="col-lg-6">
                    <h2>Categoria: <span style="color: #169F85;"><i><b>'. $row2['nome_categoria'].'</b></i></span></h2>
                  </div>
                  <div class="col-lg-6 pull-right">
                    <h2>Ações: 
                      <a href="categoria_form.php?n='.$row2['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row2['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </h2>
                  </div>
                </div>';
$montatabela.='
                  <tr>
                    <td class="text-center"><strong>'.$row3['cod'].'</strong></td>
                    <td class="text-center">'.$row3['titulo'].'</td>
                    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row3['valorCusto']).'</font></td>
                    <td class="text-center"><font class="btn btn-xs btn-success">R$ '.Decimal($row3['valorFinal']).'</font></td>
                    <td class="text-center">
                      <a href="produtotipo_form.php?n='.$row3['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row3['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </td>
                  </tr>';

E depois no html para chama-las:

<div class="row">
                    <div class="col-lg-3">
                      <p class="text-muted font-13 m-b-30">
                        Confira a relação de todas as categorias disponíveis.
                      </p>
                    </div>
                    <div class="col-lg-7 pull-right">
                      <a type="button" class="btn btn-dark btn-sm" href="categoria_form.php"><i class="glyphicon glyphicon-plus"></i> &nbsp;Criar nova categoria</a> 
                    </div>
                    <?php echo $exibe_categoria; ?>
                    <table id="datatable-responsive" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
                      <thead>
            <?php echo $montatabelatitulo; ?>
                      </thead>
                      <tbody>
                        <?php echo $montatabela; ?>
                      </tbody>
                    </table>

                  </div>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não, você inicia a tag <table> certo ?

 

Dentro dessa tag, só podem conter elementos relacionados a tag table.

veja

 

No seu caso, você está colocando um elemento que não é relacionado ao <table> dentro dele, você não pode colocar uma <div> dentro de um <table>, se essa div não estiver dentro de um elemento, senão ela fica do lado de fora.

 

Exemplo do que não pode fazer (e é o que ta fazendo):

 

<table style="width:100%">
  <div>
    <h1>oi</h1>
  </div>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
    <th>Age</th>
  </tr>
</table>

 

Essa <div>, ia ficar fora quando a tabela foisse exibida, você precisa pegar essa parte:

 

$montatabela.='
                <div class="row" align="center">
                  <div class="col-lg-6">
                    <h2>Categoria: <span style="color: #169F85;"><i><b>'. $row2['nome_categoria'].'</b></i></span></h2>
                  </div>
                  <div class="col-lg-6 pull-right">
                    <h2>Ações: 
                      <a href="categoria_form.php?n='.$row2['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row2['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </h2>
                  </div>
                </div>';

E fazer isso:

 

$montatabela.='
                <tr class="row" align="center">
                  <td class="col-lg-6">
                    <h2>Categoria: <span style="color: #169F85;"><i><b>'. $row2['nome_categoria'].'</b></i></span></h2>
                  </td>
                  <td class="col-lg-6 pull-right">
                    <h2>Ações: 
                      <a href="categoria_form.php?n='.$row2['id'].'" class="btn btn-primary btn-xs"><i class="fa fa-edit" data-tip="tooltip" data-original-title="Editar"></i></a>
                      <a href="#" onClick="javascript:Apagar(\''.$row2['id'].'\');" class="btn btn-danger btn-xs"><i class="fa fa-times" data-tip="tooltip" data-original-title="Apagar"></i></a>
                    </h2>
                  </td>
                </tr>';

Assim vai funcionar acredito, mas vai ficar desformatado, só formatar daí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
×

Informação importante

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