Gostaria de uma ajuda para ajustar o funcionamento de paginação com os dados enviados através de um form, vou utilizar um exemplo fictício para descrever o que preciso.
Form para obter duas informações (loja e produto) através de uma lista de opções extraídas do BD:
<form action="view_produtos.php" method="POST" enctype="multipart/form-data"> Loja: <select name="loja">
<option value="">Selecione a Loja</option>
<?php
$query = "SELECT nome FROM lojas WHERE ativo='S' order by nome asc";
$result = mysqli_query($conn, $query) or die ("Error ao selecionar loja");
foreach ($result as $loja) {
?>
<option value="<?php echo $loja["nome"]; ?>"><?php echo $loja["nome"];?></option>
<?php
}
?>
</select> 
Produto: <select name="produto">
<option value="">Selecione o produto</option>
<?php
$query = "SELECT nome FROM produtos order by nome asc";
$result = mysqli_query($conn, $query) or die ("Error ao selecionar produtos");
foreach ($result as $produto) {
?>
<option value="<?php echo $produto["nome"]; ?>"><?php echo $produto["nome"];?></option>
<?php
}
?>
</select>
Pego as informações enviadas pelo submit e uso suas respectivas variáveis na consulta sql. Mostro o resultado da consulta com o código de paginação ativada.
$query = "SELECT loja, produto FROM ... WHERE $loja ... AND $produto ...";
$result = mysqli_query($conn, $query) or die ("Erro na consulta");
$rows = mysqli_num_rows($result);
$total_reg = "10"; // Número de registros por página
$numpage = ceil($rows/$total_reg);
$inicio = ($total_reg*$page)-$total_reg;
$limit_result = mysqli_query($conn, "$query LIMIT $inicio, $total_reg") or die ("Erro na consulta");
Tanto a consulta como o código de paginação estão funcionando... o problema é:
Se eu executo o view_produtos.php individualmente tudo funciona, a quebra de página fica certinha mostrando o resultado exato em cada page. Agora se pego os dados a partir do form que eu descrevi acima, ao clicar no link da page 2 por exemplo, ele mostra o resultado em branco, sendo necessário dar submit novamente pra exibir a page 2.
Como eu faria para mostrar os resultados da page 2, page 3, etc.. sem precisar enviar os dados de form novamente? Acredito também que eu precisaria manter os dados no form após o submit.
Pergunta
playnet
Boa noite!
Gostaria de uma ajuda para ajustar o funcionamento de paginação com os dados enviados através de um form, vou utilizar um exemplo fictício para descrever o que preciso.
Form para obter duas informações (loja e produto) através de uma lista de opções extraídas do BD:
<?php
//Conectar ao BD
include_once("connection.php");
?>
<html>
<head>
<title>Test</title>
</head>
<body bgcolor="DAEBE1">
<div id="report">
<form action="view_produtos.php" method="POST" enctype="multipart/form-data">
Loja: <select name="loja">
<option value="">Selecione a Loja</option>
<?php
$query = "SELECT nome FROM lojas WHERE ativo='S' order by nome asc";
$result = mysqli_query($conn, $query) or die ("Error ao selecionar loja");
foreach ($result as $loja) {
?>
<option value="<?php echo $loja["nome"]; ?>"><?php echo $loja["nome"];?></option>
<?php
}
?>
</select> 
Produto: <select name="produto">
<option value="">Selecione o produto</option>
<?php
$query = "SELECT nome FROM produtos order by nome asc";
$result = mysqli_query($conn, $query) or die ("Error ao selecionar produtos");
foreach ($result as $produto) {
?>
<option value="<?php echo $produto["nome"]; ?>"><?php echo $produto["nome"];?></option>
<?php
}
?>
</select>
<p><input type="submit" value="Enviar" style="width: 120px; height: 30px"></p>
<p><input type="hidden" name="test" value="ok"></p>
</form>
</div>
</body>
</html>
PHP - view_produtos.php
Pego as informações enviadas pelo submit e uso suas respectivas variáveis na consulta sql. Mostro o resultado da consulta com o código de paginação ativada.
<?php
//Conectar ao BD
include_once("connection.php");
@session_start();
?>
<html>
<head>
<title>Test</title>
</head>
<body bgcolor="DAEBE1">
<?php
if(isset($_POST['test']) && $_POST['test'] == "ok"){
$loja = $_POST['loja'];
$produto = $_POST['produto'];
?>
<p>
<table border='2'>
<tr bgcolor='#A9A9A9' align='center'>
<td>Loja</td>
<td>Produto</td>
</tr>
<?php
//Paginação
$page = (isset($_GET['page']))? $_GET['page'] : 1;
$query = "SELECT loja, produto FROM ... WHERE $loja ... AND $produto ...";
$result = mysqli_query($conn, $query) or die ("Erro na consulta");
$rows = mysqli_num_rows($result);
$total_reg = "10"; // Número de registros por página
$numpage = ceil($rows/$total_reg);
$inicio = ($total_reg*$page)-$total_reg;
$limit_result = mysqli_query($conn, "$query LIMIT $inicio, $total_reg") or die ("Erro na consulta");
while ($row = mysqli_fetch_object($limit_result))
{
echo "<tr align='center'>";
echo "<td>".$row->loja."</td>";
echo "<td>".$row->produto."</td>";
echo"</tr>";
}
//Exibe a Paginação
for($i = 1; $i < $numpage + 1; $i++) {
echo "<a href='?page=$i'>Page".$i."</a> ";
}
}
?>
</table>
</body>
</html>
Tanto a consulta como o código de paginação estão funcionando... o problema é:
Se eu executo o view_produtos.php individualmente tudo funciona, a quebra de página fica certinha mostrando o resultado exato em cada page. Agora se pego os dados a partir do form que eu descrevi acima, ao clicar no link da page 2 por exemplo, ele mostra o resultado em branco, sendo necessário dar submit novamente pra exibir a page 2.
Como eu faria para mostrar os resultados da page 2, page 3, etc.. sem precisar enviar os dados de form novamente? Acredito também que eu precisaria manter os dados no form após o submit.
Alguma sugestão?
Obrigado,
Alex
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.