Jump to content
Naimar

Definir Ordem da Pesquisa (Resultado) com radio Button

Recommended Posts

Preciso que o resultado de uma query (Estou usando <table> para listar os resultados) se ordenem (order by) conforme a escolha do usuário em um radio button.

 

Exemplo:

 

Depois de selecionar os parâmetros da pesquisa, o usuário tem três rádios (Por Nome, Por Data, Por Obra) e conforme a escolha dele, o resultado aparece "order by nome_obra" ou "order by data_obra" ou "order by id_obra".

 

Já tentei carregar o value da radio escolhida em uma variável $ordem_exibicao  e na query colocar "select *** order by $ordem_exibicao" mas o my sql não reagiu bem.

 

Sei que é algo simples pois vejo isso em praticamente todos os sistemas, mas minha inexperiência não está ajudando :(

Share this post


Link to post
Share on other sites

mas a não reagiu bem por que? como tá tentando fazer no form e no php? fica meio complicado sem ver a codigagem mas deve funfar tipo

<input type='radio' name='ordem' value='asc'>ascendente
<input type='radio' name='ordem' value='desc'>descendente
$ordem = $_POST['ordem'];
$sql = "SELECT *  FROM tabela WHERE condicao ORDER BY campo '$ordem'";

 

Share this post


Link to post
Share on other sites
2 horas atrás, marsolim disse:

mas a não reagiu bem por que? como tá tentando fazer no form e no php? fica meio complicado sem ver a codigagem mas deve funfar tipo


<input type='radio' name='ordem' value='asc'>ascendente
<input type='radio' name='ordem' value='desc'>descendente

$ordem = $_POST['ordem'];
$sql = "SELECT *  FROM tabela WHERE condicao ORDER BY campo '$ordem'";

 

Então, vou te mostrar o código que estou usando para testar:

 

HTML:

 

 <body>
        <form action="#" method="post">
            <p>

                <input type="radio" name="radio_ordem" value='id_dados'/>ID
                <input type="radio" name="radio_ordem" value='nome'/>Nome
                <input type="radio" name="radio_ordem" value='data'/>Data
            </p>
            <p>
                <input type="submit" value="Testa" name="bt_testa" />
            </p>
        </form>

    </body>

 

PHP

 

<?php

$conecta = new mysqli("localhost" , "root" , "" , "dinamica");
mysqli_set_charset($conecta,'utf8');

if(isset($_POST["bt_testa"]))

$ordem = $_POST['radio_ordem'];
echo $ordem; (Apenas testando o conteúdo da variável)

$busca = 'select id_dados,nome,data from tb_dados order by "$ordem"';
$resultado_busca = $conecta->query($busca);?>
<table>
<?php
while($montalista = $resultado_busca->fetch_object()) {?>
<tr>
<td><?php echo $montalista->id_dados;?></td>
<td><?php echo $montalista->nome;?></td>
<td><?php echo $montalista->data;?></td>
</tr>
<?php     
}
}
?>

 

O ERRO:

 

Se eu uso $busca = 'select...order by "$nome"' ele ignora a radio que eu cliquei, mas se eu usar $busca = 'select...order by $nome' (Sem as aspas duplas) dá: 

 

Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in E:\xampp\htdocs\teste.php:36 Stack trace: #0 {main} thrown in E:\xampp\htdocs\teste.php on line 36

Share this post


Link to post
Share on other sites

variável dentro duma string com aspas simples são tratadas como string também. pra funfar nesse caso tinhas que inverter as aspas simples e duplas ou então concatena a parada

 

$busca = 'select id_dados,nome,data from tb_dados order by "' . $ordem . '"';

 

  • +1 1

Share this post


Link to post
Share on other sites
18 horas atrás, marsolim disse:

variável dentro duma string com aspas simples são tratadas como string também. pra funfar nesse caso tinhas que inverter as aspas simples e duplas ou então concatena a parada

 


$busca = 'select id_dados,nome,data from tb_dados order by "' . $ordem . '"';

 

Marsolim, funcionou com order by  ' . $ordem . ' ';

 

Muito obrigado mesmo pela dica, eu já estava temendo ter de fazer vários selects mudando apenas esse finalzinho...

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 janir.matheus
      Boa tarde, peço ajuda dos membros desse fórum pois confesso estar completamente perdido.
      Tomando como base o diagrama (em anexo), preciso de uma query que retorne as empresas, seus produtos e as categorias de cada produto, sendo que cada produto pode pertencer a uma ou mais categorias.
       
      select tbl_produtos.Empresa, tbl_empresas.Nome, tbl_catprod.Categoria, tbl_classproduto.Classe, tbl_produtos.Id, tbl_produtos.Produto from tbl_produtos inner join tbl_empresas on tbl_produtos.Empresa = tbl_empresas.Id left join tbl_catprod on tbl_produtos.Id = tbl_catprod.Categoria left join tbl_classproduto on tbl_catprod.Categoria = tbl_classproduto.Id; Tentei a consulta mostrada acima mas o resultado não foi o que eu esperava.
      Agradeço antecipadamente pela ajuda.

    • By FabianoSouza
      Pessoal, por que essa query com COLLATE  não funciona?
      declare @strPesquisa varchar(30) SET @strPesquisa = 'naicle' SET @sql = 'SELECT ' SET @sql = @sql + 'ML.nome ' SET @sql = @sql + 'FROM ' SET @sql = @sql + 'dbo.minhaTab AS ML ' SET @sql = @sql + ' WHERE ' SET @sql = @sql + ' nome LIKE ' SET @sql = @sql + '''%' + @strPesquisa COLLATE Latin1_General_CI_AI + '%''' EXEC (@sql) Não acusa erro ao rodar.
      Mas não traz os registro porque está gravado como "naiclê" (com acento), o que significa que não está aplicando a COLLATE.
       
      Montando essa mesma query mas da forma tradicional, o COLLATE funciona.
       
      SELECT ML.nome FROM dbo.minhaTab AS ML WHERE nome LIKE '%'+ @strPesquisa COLLATE Latin1_General_CI_AI+'%'  
       
    • By peterstefan
      Olá, estou com uma query aqui e preciso pegar de 2 campos diferentes os dados diferente de 0,  mais quanto tento no AND ele somente traz um resultado, o OR ele traz um dos campos com o valor 0, teria alguma forma de pegar os dados diferente de 0 dos dois campus?
      preciso pegar o idOrganizador diferente de 0 e o idPiloto diferente de 0 
       
      SELECT * FROM boletos WHERE proc = 0 AND idOrganizador !='0' AND idPiloto ='0';  
    • By mamotinho
      oi pessoal estou com um problema , não estou conseguindo passar todos os valores o foreach no json_encode() alguém poderia me ajudar, eu estou tentando monta um mecanismo de refresh em tempo real de uma lista de notificação veja abaixo:
       
      <script type="text/javascript"> function make_call() { // Fazendo requisição AJAX $j.post('teste.php', function (frase) { // Exibindo frase $j('#listas').html('<i>' + frase + '</i>'); }, 'JSON'); setTimeout(function(){ make_call(); }, 5000); } </script>
      Aqui é o arquivo que quero enviar para a div #lists
       
      <?php require("conexao/directory.php"); $notificar = $db->query("select TOP 5 * from Techi7CP.dbo.cabal_notificacao_geral order by regdate desc"); $notificacao = $notificar->fetchAll(); $count_notificacao = abs($notificar->rowCount()); if($count_notificacao==0){ echo '<li style="text-align:center;">não existe notificações no momento.</li>'; }else{ foreach($notificacao as $notif){ $consulta_conta = $db->query("select * from account.dbo.cabal_auth_table where UserNum='".$notif['usernum']."'")->fetchObject(); switch($notif['acao']){ case 'logadopremiado' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle red small">redeem</span>'.$notif['jogador'].' ganhou no Logado Premiado</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'mudarsenha' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle teal small">vpn_key</span>'.$consulta_conta->Nome.' alterou sua senha</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'distribuirpontos' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle cyan small">control_point</span>'.$notif['jogador'].' distribuiu seus pontos</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'girodasorte' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle brown small">star_border</span>'.$consulta_conta->Nome.' usou o giro da sorte</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'sistematpoint' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle green small">golf_course</span>'.$notif['jogador'].' recebeu seu tpoint por clique</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'combo' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle amber small">videogame_asset</span>'.$notif['jogador'].' fez '.$notif['ExtraDetalhes'].' em sua primeira vez</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; } } } ?> como eu faria para ser exibido todos os resultados registrados com o json_encode().
    • By mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
×

Important Information

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