Ir para conteúdo

Arquivado

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

Maykel-ctba

Paginação: Como levar $_POST entre páginas?

Recommended Posts

Fala galera,

 

Estou montando um sistema de paginação no meu site, e preciso de uma coisa:

 

A página "produtos.php" recebe tanto a consulta sem busca, quanto com busca (um $_POST).

 

A paginação funciona normalmente quando não tem busca. Porém, quando faço uma busca de parâmetros, como posso fazer que o $_POST que leva estes parâmetros acompanhar as páginas? Pensei em passar pela URL, mas existe uma outra maneira?

// * Configurar paginação
$divPaginacao = "";
$paginacaoRegistroPagina = "3";

// * Determina qual página está
if(!isset($url_array[2])){
    $paginacaoPagina = 1;
}
else{
    $paginacaoPagina = $url_array[2];
}

// * Determina o antes e depois
$paginacaoAnterior = $paginacaoPagina-1; 
$paginacaoProximo = $paginacaoPagina+1;

// * Configura quais produtos devem ser buscados
$paginacaoInicio = $paginacaoPagina-1; 
$paginacaoInicio = $paginacaoInicio * $paginacaoRegistroPagina;
$contaRegistro = count($objProduto->load());
$paginacaoPaginas = ceil($contaRegistro/$paginacaoRegistroPagina);

// * Se busca algo
if(isset($_POST) && !empty($_POST)){

    $parametrosBusca = $_POST;

    $tituloPagina = "Resultados da busca";
    
    // * Se a busca foi realizada pelo txBusca do header
    if(!empty($_POST['txBusca'])){
        $resultadoProduto = $objProdutoBusca->loadBusca(false, null, $paginacaoInicio.",".$paginacaoRegistroPagina, $_POST['txBusca'], "header");
    }

    // * Se foi realizada pelo aside
    if(!empty($_POST['cbFiltro']) || !empty($_POST['txBetween'])){
        $resultadoProduto = $objProdutoBusca->loadBusca(false, null, $paginacaoInicio.",".$paginacaoRegistroPagina, $_POST, "aside");
    }
}
else{

    $parametrosBusca = "";

    $objProduto->catAlias = $url_array[1];
    $resultadoProduto = $objProduto->load(false, null, $paginacaoInicio.",".$paginacaoRegistroPagina);

    if($resultadoProduto){
        $tituloPagina = $resultadoProduto[0]['catTitulo'];
    }
    else{
        $objCategoria->catAlias = $url_array[1];
        $resultadoCategoria = $objCategoria->load();
        $tituloPagina = $resultadoCategoria[0]['catTitulo'];
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

Para que você possa fazer essa paginação de um modo transparente, precisaria rever a engenharia do seu projeto, realizando requisições internas com js, e não via http.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou te passar um código que eu fiz, você só precisa mudar o select e o mysql assoc, ele conta com pesquisa/paginação

	<div class="pagconsulta" id="pagconsulta">
		<div class="conteudo_consulta">
			<div class="pesquisa_consulta">
				<form method="GET" action="index.php">
					Buscar:
					<?php echo "<input type='text' name='q' maxlength='255' value='".@$_GET["q"]."' >"; ?>
                    <input type="hidden"  name='pagina' value='consultar_usuarios'>
					<input type="submit" value="Pesquisar" />
				</form>
			</div>
			<br>
<?php

$maximo = 12; //Quantidade de Conteudo por pagína
$contpag = 1; //Contador não mexer
$cont = 0; //Contador não mexer
$consulta = "select DATE_FORMAT(data_cadastro, '%d/%m/%Y') data,nome,login,id_usuario,b.nome_cargo from usuario a,cargo b where a.id_cargo = b.id_cargo";
$pesquisa = NULL;
$pagina = NULL;


if(isset($_GET['q']) and $_GET['q'] != NULL){
		$pesquisa = " and nome like '%".$_GET['q']."%'";
		$busca = $_GET['q'];		
	}
    if(isset($_GET['pag']) and $_GET['pag']!= NULL){
    	$limit = $maximo * $_GET['pag'];
    	
    	$pagina = " limit $limit,$maximo";
    }

$calclinhas=$consulta.$pesquisa;
$calclinhasr= mysqli_query($bd,$calclinhas);		
 $sql= $consulta.$pesquisa.$pagina;

			$resultado = mysqli_query($bd,$sql);
			echo "<table class='tableuser' border='1'  ><tr><td>CODIGO</td><td>Nome Do Usuario</td><td>Login </td><td>Cargo </td><td>Data de Criação </td><td>Apagar/Alterar</td></tr>";


			$rlinhas= 10; /*Resultados por página*/
			while($rows = mysqli_fetch_assoc($resultado) and $cont < $maximo){
				$cont ++;
				echo "<form method='post' action='index.php'>";
				echo "<input name='action' value='alterar_usuario' type='hidden'>";
				echo "<tr>";
				echo "<td>".$rows['id_usuario']."<input name='textcodigo' value='".$rows['id_usuario']."' type='hidden'></td>";
				echo "<td>".$rows['nome']."</td>";
				echo "<td>".$rows['login']."</td>";
				echo "<td>".$rows['nome_cargo']."</td>";
				echo "<td>".$rows['data']."</td>";
				echo "<td><input type='submit' value='alterar' name='alterar' >";
				echo " <input type='submit' value='apagar' name='apagar'></form></td>";
			}
			echo "</table>";

			echo "<a href='painel.php'>Voltar</a><BR><BR>";
			echo "<div class='cont_pag'>";
	 	
		if(isset($_GET["pag"])){
        $linhas = mysqli_num_rows($calclinhasr);
        }else{
        $linhas = mysqli_num_rows($resultado);
        }

        if($linhas > $maximo){
        echo "<a href='?pagina=consultar_usuarios&q=".@$busca."&pag=0' >1 </a>";
        }
        while($linhas > $maximo){
	    $linhas = $linhas - $maximo;
	    echo "<a href='?pagina=consultar_usuarios&q=".@$busca."&pag=$contpag' >";
	    $contpag++;
	    echo"$contpag</a> ";

}
?>

</div></div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bieel você está usando GET no seu caso... Gostaria de fazer algo assim, mas no meu caso, a busca não se resume a apenas "nome". Existem diversos campos, e a busca é gravada num array no POST pra ficar mais organizado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor maneira no meu ponto de vista, é usar GET ao invés de POST, não faz muito sentido usar POST pra isso na minha opinião, por vários motivos: buscas não poderão ser indexadas com POST, o usuário nao pode favoritar a página que quer etc..

 

Se você realmente quer usar POST a solução é salvar os dados/filtros na sessão do usuário e recuperar mais tarde.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segundo as definições da W3C:

 

- Método POST tem como intuito inserir ou alterar alguma informação em um storage;
- Método GET tem como intuito retornar informações.

 

Ou seja, não é o uso adequado do método post.

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.