Ir para conteúdo

Arquivado

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

Remazela

PHP - Ordenar Campos da Tabela

Recommended Posts

Caros amigos

Recorro mais uma vez a vossa ajuda.

Por favor, tem como em PHP criar uma rotina onde através de um <input type="radio" /> ordenar os campos da tabela ?

Por exemplo:

[ ]Código [ ]Nome e etc

Quando selecionado um RADIO, o campo text digita um valor e os campos da tabela são ordenados através do que foi informado no campo texto.

Minha SQL que busca no Banco está da seguinte forma abaixo:

    $sql_pegaAtivos = 'SELECT cli.clienteId, cli.nome, imov.imovelCadastro, imov.imovelTermino, imov.imovelId,
                              imov.imovelStatus, imov.imovelTitulo FROM imoveis imov
                       INNER JOIN clientes cli ON imov.clienteId = cli.clienteId
                       WHERE imov.imovelStatus = :imovelStatus 
                       AND imov.imovelTermino >= :data
                       ORDER BY imov.imovelId ASC LIMIT '.$inicio.','.$maximo;  

    try{
       $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
       $query_pegaAtivos->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
       $query_pegaAtivos->bindValue(':data',$data,PDO::PARAM_STR);  
       $query_pegaAtivos->execute();
      
       $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
       $count_pegaAtivos = $query_pegaAtivos->rowCount(PDO::FETCH_ASSOC);
       
       } catch(PDOexception $error_pegaAtivos) {
            echo 'Erro ao pegar ativos'.$error_pegaAtivos->getMessage();
       }
       
       foreach($resultado_pegaAtivos as $resAtivos){
               $anuncioCliente = $resAtivos['clienteId'];
               $nomeCliente    = $resAtivos['nome'];
               $anuncioId      = $resAtivos['imovelId'];
               $anuncioTitulo  = $resAtivos['imovelTitulo'];
               $anuncioInicio  = $resAtivos['imovelCadastro'];
               $anuncioFinal   = $resAtivos['imovelTermino'];
               $anuncioVisitas = $resAtivos['imovelVisitas'];
       }

Por favor me perdoa por recorrer aos amigos.

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você quer dizer com "ordenar os campos da tabela"? Seria ordenar os registros (as linhas)? Se for, é só você colocar no ORDER BY o campo que você quer ordenar (que foi digitado); se não, tente detalhar mais o que precisa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Estes dados são exibidos aonde? Em uma <table>?

Se sim, é mais simples ordenar a <table> do que criar parâmetros para reprocessar seu SQL.

Veja este código simples de ordenação, sem recarregar a página e sem POST

<!-- copie este script para o seu projeto -->
<script type="text/javascript" src="http://www.kryogenix.org/code/browser/sorttable/sorttable.js"></script>

<style>
    /* Sortable tables */
    table.sortable thead {
    background-color:#eee;
    color:#666666;
    font-weight: bold;
    cursor: default;
}</style>

<table  class="sortable"> 
<thead>
  <tr><th>Vendedor</th><th>Mês do Pagamento</th></tr>
</thead>
<tbody>
  <tr><td>João</td><td>12.000</td></tr>
  <tr><td>Maria</td><td>8.500</td></tr>
  <tr><td>Esther</td><td>9.200</td></tr>
  <tr><td>Jonas</td><td>15.300</td></tr>
</tbody>
<tfoot>
  <tr><td>TOTAL</td><td>45.000</td></tr>
</tfoot>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos

Observação: desculpa as dúvidas antes programava em linguagem DOS.

Para melhor entender o que preciso, abaixo anexei a imagem da tela:

15095686_1608965916076050_84503008035641Após o usuário escolher qual forma quer visualizar a tela com a opção por Código ou Nome, o campo texto fica esperando ser alimentado por Código ou Caracteres.

Como faço para o TEXT entender que é um número ou letras, para o ORDER BY fazer a busca ?

Abaixo anexo meu fonte, que uso para chamar a rotina.

<div id="content">

<?php include_once("menu.php");?>     

  <div id="content_conteudo">
   <label><span style="font:20px Arial; font-weight:bold; color:#006666;">Movimentação de Anúncios Pendentes</span></label> 
   
<!-- Campos da Tabela -->
<table width="100%" border="0" cellspacing="3" cellpadding="0">
  <tr style="background:#666; color:#FFF">
    <td align="center">Cód.:</td>
    <td align="center">Nome do Cliente:</td>
    <td align="center">Cód.:</td>
    <td align="center">Título do Anúncio:</td>
    <td align="center">Cadastro em:</td>
    <td align="center">Data Término:</td>     
  </tr>
  
 <?php

  //Variáveis que uso para busca no Banco de Dados
  $data = date('Y-m-d H:m:s');
  $imovelStatus = 'pendente';

    //Paginação da página
    $pag = "$_GET[pag]";
    if($pag >= '1'){
     $pag = $pag;
     } else {
       $pag = '1';
    }

    $maximo = '15'; //RESULTADOS POR PÁGINA
    $inicio = ($pag * $maximo) - $maximo; 

    //Seleção no Banco
    $sql_pegaAtivos = 'SELECT cli.clienteId, cli.nome, imov.imovelCadastro, imov.imovelTermino, imov.imovelId,
                              imov.imovelStatus, imov.imovelTitulo FROM imoveis imov
                       INNER JOIN clientes cli ON imov.clienteId = cli.clienteId
                       WHERE imov.imovelStatus = :imovelStatus 
                       AND imov.imovelTermino >= :data
                       ORDER BY imov.imovelId ASC LIMIT '.$inicio.','.$maximo;  

    //Até aqui entendi, se alterar manualmente o ORDER BY, faz a pesquisa que quero

    try{
       $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
       $query_pegaAtivos->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
       $query_pegaAtivos->bindValue(':data',$data,PDO::PARAM_STR);  
       $query_pegaAtivos->execute();
      
       $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
       $count_pegaAtivos = $query_pegaAtivos->rowCount(PDO::FETCH_ASSOC);
       
       } catch(PDOexception $error_pegaAtivos) {
            echo 'Erro ao pegar ativos'.$error_pegaAtivos->getMessage();
       }
       
       //Pego os Dados que preciso
       foreach($resultado_pegaAtivos as $resAtivos){
               $anuncioCliente = $resAtivos['clienteId'];
               $nomeCliente    = $resAtivos['nome'];
               $anuncioId      = $resAtivos['imovelId'];
               $anuncioTitulo  = $resAtivos['imovelTitulo'];
               $anuncioInicio  = $resAtivos['imovelCadastro'];
               $anuncioFinal   = $resAtivos['imovelTermino'];
               $anuncioVisitas = $resAtivos['imovelVisitas'];

             //Código para mudar as linhas da Tabela autoincremento.
             $i++;
             if($i % 2 == 0){
               //Cor para toda vez que a linha for par
               $cor = 'style="background: #F5FFFA"';
             }else{
               //Cor para toda vez que a linha for impar
               $cor = 'style="background: #B4EEB4;"';
             }

 ?> 
 
  <!-- Mostrar os campos na Tabela -->
  <tr <?php echo $cor;?>>
    <td align="center"><?php echo $anuncioCliente; ?></td>
    <td align="left">  <?php echo $nomeCliente; ?></td>
    <td align="center"><?php echo $anuncioId; ?></td>
    <td align="left">  <?php echo $anuncioTitulo; ?></td>
    <td align="center"><?php echo date('d/m/Y',strtotime($anuncioInicio)); ?></td>
    <td align="center"><?php echo date('d/m/Y',strtotime($anuncioFinal)); ?></td>
  </tr>
  
  <?php

   } //Fechar o 1.Foreach
  
  ?>

</table>

    <!-- Função para informar que nenhum Código Cliente foi encontrado -->
    <?php 
      if($count_pegaAtivos == '0'){
         echo '<h2> Nenhum anúncio no momento!</h2>';
      } else {

      }
    ?>

  
    <!--Paginação da página -->
    <?php

      //Faz a conexão com o Banco de Dados
      $conecta = mysql_connect("localhost", "root", "");
      mysql_select_db("seularimovel", $conecta);

      //USANDO A MESMA SQL QUE QUE USOU PARA RECUPERAR OS RESULTADOS, SE TIVER A PROPRIEDADE WHERE USE A MESMA TAMBÉM
      $sql_res = mysql_query("SELECT * FROM imoveis WHERE imovelStatus = 'pendente' ORDER BY imovelTermino ASC");
      $total = mysql_num_rows($sql_res);

      $paginas = ceil($total/$maximo);
      $links = '10'; //QUANTIDADE DE LINKS NO PAGINATOR
      
      echo "<a href=\"painel.php?exe=admin-imoveis/pendentes&pag=1\">Primeira</a>   ";

      for ($i = $pag-$links; $i <= $pag-1; $i++){
        if ($i <= 0){
        }else{
         echo"<a href=\"painel.php?exe=admin-imoveis/pendentes&pag=$i\">$i</a>   ";
        }
      } echo "$pag    ";

      for($i = $pag +1; $i <= $pag+$links; $i++){
        if($i > $paginas){
        }else{
         echo "<a href=\"painel.php?exe=admin-imoveis/pendentes&pag=$i\">$i</a>   ";
        }
      }
      echo "<a href=\"painel.php?exe=admin-imoveis/pendentes&pag=$paginas\">Última</a>   ";
    ?>

   <div class="aviso">
        <strong style="color:#cc0000; font-size: 16px;">Atenção:</strong> para APROVAR um Anúncio, informe o código do cliente abaixo.
   </div> 

      <!-- Form para digitar qual Cliente/Anúncio deseja aprovar -->
      <form class="f_form" name="busca" action="painel.php?exe=admin-imoveis/pendentes_busca" 
            enctype="multipart/form-data" method="post">
          <label>
              <span style="font: 16px Arial; font-weight:bold; color:#333333;" >Código do Cliente:</span>
              <input type="text" name="clienteId" maxlength="10" size="10" onkeypress="return numberOnly(event)" required />
              <input type="hidden" name="nome" value="<?php echo $nomeCliente; ?>" />
              <input class="btn_tbl" type="submit" name="executar" id="executar" value="Pesquisar" />
          </label>
      </form>


   </div><!--conteudo-->

</div><!--contet-->
     
<?php include_once("footer.php");?>



<!--Script para Validar os Campos Moeda e Numérrcos do Formulário -->
<script type="text/javascript">
    
  //Valida os campos numéricos do formulário
  function numberOnly(e){
      var tecla = new Number();
      if(window.event) {
          tecla = e.keyCode;
      }else if(e.which) {
          tecla = e.which;
      }else {
          return true;
      }

      if((tecla >= "48") && (tecla <= "57") || tecla == 8){
          return true;
      }else{
          return false;
      }
  }

  </script>

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites
Acho que entendi...


Você tem que:


1) Usar AJAX para recarregar os dados da tabela sem sair da página. Você carrega a página com a tabela vazia, aí faz a requisição AJAX (usando JavaScript) para carregar os dados e então desenha a tabela usando os dados que retornou da consulta. E quando o usuário clicar no botão "Pesquisar", você refaz a requisição AJAX mas passando o valor do radio selecionado e também o texto digitado no campo para refazer a consulta e redesenhar a tabela.

Isso quer dizer que você tem que separar o código que faz a consulta do código que desenha a tabela, pois os dois são rodados em momentos diferentes.


ou


2) Faz o submit do formulário de pesquisa para a própria página (a página toda é recarregada), para que todo o código seja executado novamente. Aí você vai ter acesso ao valor do radio selecionado e o texto digitado no campo, e pode adicioná-los na sua consulta.


ou


3) Usar um plugin, como o DataTables, que faça a pesquisa e ordenação em sua tabela. Ou se você só precisa da ordenação, o sorttable indicado pelo aoliveira178 pode ser o suficiente.



A opção 1 é boa, mas mudaria um bocado de coisas no seu código.

Já a opção 2 seria poucas alterações no seu código, mas ela não é muito boa porque toda vez que for feito uma pesquisa, a página tem que ser completamente recarregada, o que aumenta o tráfego, e, dependendo da velocidade do servidor e da quantidade de informações, pode ficar um pouco lento.

A opção 3 acho que é a melhor, mas também muda um bocado de coisas no seu código. A não ser que você queira fazer manualmente para aprender, é bem mais prático e produtivo deixar um plugin fazer isso. O DataTables tem várias outras opções incluídas automaticamente (só precisa ativar a opção nas configurações), como paginação, pintar as linhas, pesquisa, ordenação, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Anderson

Grato pelo seus esclarecimentos, vou efetuar as alterações.

Depois posto o resultado, para ajudar quem tiver a mesma dúvida.

Grato

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites
@Remazela

Beleza! Se tiver dúvidas, pode postar no fórum que o pessoal ajuda.



@John Lennon Furquim

Dando uma olhada nos tópicos abordados no curso, ele me parece ser ótimo. Ele aborda os principais assuntos relacionados ao PHP, e o conteúdo também parece ser bem atual. Quanto ao valor, aí vai de pessoa para pessoa. Todo o conteúdo abordado está disponível de graça na internet... no youtube, em blogs, e até na própria documentação do PHP. Mas há pessoas que preferem fazer um curso como esse aí, completo, do início a fim, ao invés de ter que procurar cada assunto (e muitas vezes ficar perdido no que estudar); e não é um valor muito alto, sem contar que é um investimento, e não um gasto "atoa".

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.