Ir para conteúdo

POWERED BY:

Arquivado

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

manolegal

Manter Ordenação Dados Paginação

Recommended Posts

Olá amigos

Estou com problema para manter a ordenação dos dados em uma paginação, a partir da pagina 2.

Tentei me basear no tópico http://forum.imasters.com.br/topic/395199-resolvidopaginacao-perde-o-valor-da-busca/

porém não consegui resolver.

Partes do meu código:

<form id="funcionarios_cadastro" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<?php
if ($_POST['ordenar_select'] != "" ){
        $_SESSION['ordenar_select'] = $_POST['ordenar_select'];     
}
$teste = $_SESSION['ordenar_select'];

    if($teste == "1"){ // Nome
        $ordenar_por = " nome_ordenar ASC";}
    elseif($teste == "2"){.................
?>

            <div class="form-group col-md-2">
                <select class="form-control h2" id="ordenar_select" name="ordenar_select" title="Ordenar Dados">
                <option value="" selected="selected">- Ordenar por -</option>
                <option value="1">Nome</option>
                <option value="2">Data Nascimento</option>
                <option value="3">Endereço</option>
                </select>
            </div>

Desta forma descrita, funciona corretamente a ordenação em todas as páginas da paginação, porém quando dou um refresh na página ou a acesso através do Menu, fica mantido o valor da Sessão. Preciso que ao dar Refresh no formulário o campo assuma o valor "", ao invés de manter o valor da Sessão anteriormente selecionado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei da seguinte maneira também:

if ($_POST['ordenar_select'] != "" ){
        $_SESSION['ordenar_select'] = $_POST['ordenar_select'];  
$teste = $_SESSION['ordenar_select'];        
}
else{
$teste = $_POST['ordenar_select'];    
}

Porém se eu selecionar um tipo de ordenação (diferente de "") só mantém a ordenação na primeira página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa, obrigado pelo retorno

Utilizo postgres, "ordenar_select" é um campo onde seleciono a ordenação da consulta.

            <div class="form-group col-md-2">
                <select class="form-control h2" id="ordenar_select" name="ordenar_select" title="Ordenar Dados">
                <option value="" selected="selected">- Ordenar por -</option>
                <option value="1">Nome</option>
                <option value="2">Data Nascimento</option>
                <option value="3">Endereço</option>
                </select>
            </div>

De acordo com o valor selecionado (1, 2 ou 3) é realizada a ordenação da consulta.

if($teste == "1"){ // Nome
        $ordenar_por = " nome_ordenar ASC";}
    elseif($teste == "2"){.................

        $Sql = "SELECT ....
ORDER BY $ordenar_por
LIMIT $limite_por_pagina OFFSET $inicio";

Se por exemplo ao selecionar a opção 2 (data nascimento) os dados serão ordenados por esta opção.

 

Ao utilizar este código:

if ($_POST['ordenar_select'] != "" ){
        $_SESSION['ordenar_select'] = $_POST['ordenar_select'];     
}
$teste = $_SESSION['ordenar_select'];

A ordenação fica correta em todas as páginas, porém a sessão fica ativa, e ao abrir novamente o formulário fica ordenado por esta sessão.

 

Ao utilizar este código:

if ($_POST['ordenar_select'] != "" ){
        $_SESSION['ordenar_select'] = $_POST['ordenar_select'];  
$teste = $_SESSION['ordenar_select'];        
}
else{
$teste = $_POST['ordenar_select'];    
}

Fica ordenado só na primeira página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já pensou em trocar o sistema para GET?

Aí a ordenação só ocorrerá enquanto houver o valor de ordenação na URL. Automaticamente quando você trocar de página o GET irá embora.

Você só vai precisar repetir os valores nos links da paginação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguindo sua orientação fiz da seguinte forma:

echo '<li><a href="?pagina='.$i.'&ordenar_select='.$ordenar_select.'"> '.$i.' </a></li>';

E funcionou. Seria isto?

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aí mesmo!

 

Só não esquece de tratar as variáveis antes de colocar no código, certo?

Pra não correr risco de sofrer SQL Injection.

 

Aqui tem um artigo meu sobre filtragem de variáveis: http://www.phpit.com.br/artigos/filtrando-e-validando-dados-no-php-com-filter_var.phpit

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.