Paginação não apresenta os dados corretamente
Bom dia a todos,
Estou ficando louco com um problema na minha paginação. Na verdade não é na paginação em sí, mas nas condicionais da minha página, o que implica de dar "bug" na paginação.
O problema é o seguinte:
Se eu clico em buscar, ele mostra todos os registros... OK! Se eu seleciono 3 autores por exemplo: Doug, Doug2, Doug3. A soma de arquivos destes 3 autores é 12 arquivos, ele irá me mostrar 3 páginas (porque eu limitei a 5 por página), até ai tudo OK. Se eu clicar na página 2, ou 3 ou próxima, ele volta a mostrar 6 páginas no total. Ele faz isso porque quando clico em outra página após realizar um filtro de busca, é como se ele fizesse refresh da página e dai eu não armazeno em lugar algum aquilo que eu estava buscando. Os meus selects ficam não selecionados após minha ação de busca.
Como posso resolver esse problemão? É o último "bug" do sistema, eu juro, rsrs.
Estive pensando: Posso armazenar as informações no meu combobox após refresh? Coloco minha table dentro de uma div e só ela atualiza sem dar refresh na página? Tem alguma solução de preferência sem usar ajax? Se puderem me ajudar com exemplos ficarei grato!
Uma boa parte do código aqui:
<button name="BUSCAR" id="BBUSCAR" class="btn btn-info" > REALIZAR PESQUISA </button><br>
<?php $pagina = (isset($_GET["pagina"])) ? $_GET["pagina"] : $pagina = 0; ?>
<?php if ( isset($_REQUEST['BUSCAR']) || ($pagina > 0)) {
$id_disciplina = Array();
$id_tema = Array();
$id_palchave = Array();
$id_autor = Array();
if (empty($_POST['txtnomearquivo'])){
$txtnomearquivo = '';
} else {
$txtnomearquivo = $_POST['txtnomearquivo'];
}
if (empty($_POST['id-edit'])){
$id_editora = 0;
} else {
$id_editora = $_POST['id-edit'];
}
if (empty($_POST['id-tarq'])){
$id_ta = 0;
} else {
$id_ta = $_POST['id-tarq'];
}
if (empty($_POST['id-disciplina'])){
$id_disciplina = 0;
} else {
$id_disciplina = $_POST['id-disciplina'];
}
if (empty($_POST['id-tema'])){
$id_tema = 0;
} else {
$id_tema = $_POST['id-tema'];
}
if (empty($_POST['id-autor'])){
$id_autor = 0;
} else {
$id_autor = $_POST['id-autor'];
}
if (empty($_POST['id-pal-chave'])){
$id_palchave = 0;
} else {
$id_palchave = $_POST['id-pal-chave'];
}
// Registros por página
$num_por_pagina = 5;
/*
Isto é pra verificar se existe alguma variável de url
se existir a variável "$pagina" recebe o valor da variável de url $_GET["pagina"]
se não recebe 1
*/
if($pagina<1) $pagina = 1;
$primeiro_registro = ($pagina*$num_por_pagina) - $num_por_pagina;
$tema = join(',',(array)$id_tema);
$autor = join(',',(array)$id_autor);
$chave = join(',',(array)$id_palchave);
$disciplina = join(',',(array)$id_disciplina);
$codigo = "SELECT DISTINCT ARQ_ID,ARQ_NOME,conc_busca_autores(ARQ_ID) as AUT_NOME,
conc_busca_temas(ARQ_ID) as TEM_NOME,EDI_NOME, conc_busca_disciplina(ARQ_ID) as DIS_NOME,conc_busca_palchave(ARQ_ID) as PAL_CHA_NOME,
TIP_ARQ_NOME,ARQ_CAM_ARQ FROM `arquivos` a
LEFT JOIN arquivos_has_disciplinas b ON a.ARQ_ID = b.Arquivos_ARQ_ID
LEFT JOIN disciplinas dis ON b.Disciplinas_DIS_ID = dis.DIS_ID
LEFT JOIN arquivos_has_temas c ON a.ARQ_ID = c.Arquivos_ARQ_ID
LEFT JOIN temas tem ON c.Temas_TEM_ID = tem.TEM_ID
LEFT JOIN autores_has_arquivos d ON a.ARQ_ID = d.Arquivos_ARQ_ID
LEFT JOIN autores aut ON d.Autores_AUT_ID = aut.AUT_ID
LEFT JOIN palavraschave_has_arquivos e ON a.ARQ_ID = e.Arquivos_ARQ_ID
LEFT JOIN palavraschave pal ON e.PalavrasChave_PAL_CHA_ID = pal.PAL_CHA_ID
LEFT JOIN editoras edi ON edi.EDI_ID = a.Editoras_idEditoras
LEFT JOIN tipoarquivo tip ON tip.TIP_ARQ_ID = a.TipoArquivo_idTipoArquivo";
$codigo = $codigo." ";
if($txtnomearquivo != '' or $id_editora != 0 or $id_ta != 0 or $id_disciplina != 0 or $id_tema != 0 or $id_autor != 0 or $id_palchave != 0){
$codigo = $codigo."where ( a.ARQ_NOME LIKE '%$txtnomearquivo%' or '$txtnomearquivo' LIKE '' )
and ( a.editoras_ideditoras = $id_editora or $id_editora = '' )
and ( a.TipoArquivo_idTipoArquivo = $id_ta or $id_ta = '' )
and ( b.Disciplinas_DIS_ID in ($disciplina) or '$disciplina' = 0 )
and ( c.Temas_TEM_ID in($tema) or '$tema' = 0 )
and ( d.Autores_AUT_ID in ($autor) or '$autor' = 0 )
and ( e.PalavrasChave_PAL_CHA_ID in ($chave) or '$chave' = 0 )";
}
$codigo2 = $codigo;
$codigo = $codigo." LIMIT $primeiro_registro, $num_por_pagina";
$sqlbusca = $conn->query($codigo);
//construa e exiba um painel de navegabilidade entre as páginas
$consulta = "select count(1) as qtd from (".$codigo2." ) porra";
list($total_usuarios) = mysqli_fetch_array(mysqli_query($conn2,$consulta));
$total_paginas = $total_usuarios/$num_por_pagina;
$prev = $pagina - 1;
$next = $pagina + 1;
// se página maior que 1 (um), então temos link para a página anterior
if ($pagina > 1) {
$prev_link = "<a href=\"" . $_SERVER['PHP_SELF']. "?pagina=$prev\">Anterior</a>";
} else { // senão não há link para a página anterior
$prev_link = "Anterior";
}
// se número total de páginas for maior que a página corrente, então temos link para a próxima página
if ($total_paginas > $pagina) {
$next_link = "<a href=\"" . $_SERVER['PHP_SELF'] . "?pagina=" . $next . " \">Próxima";
} else { // senão não há link para a próxima página
$next_link = "Próxima";
}
$total_paginas = ceil($total_paginas);
$painel = "";
for ($x=1; $x<=$total_paginas; $x++) {
if ($x==$pagina) { // se estivermos na página corrente, não exibir o link para visualização desta página
$painel .= " [$x] ";
} else {
$painel .= " <a href=\"". $_SERVER['PHP_SELF']."?pagina=$x\">[$x]</a>";
}
}
echo "$prev_link | $painel | $next_link";
while ($linha = $sqlbusca->fetch(PDO::FETCH_ASSOC)) { ?>
//aqui fica o html/php da minha tabela
Bem mais acima deste código eu possuo um único form:
<form name="form_busca" id="form-busca" method="POST" action="?pagina=1" >
Exemplo de um dos meus selects (combobox):
<!-- Autor -->
<th>
<div id="hr"> Autores </div>
<select name="id-autor[]" id="selautor" class="selectpicker show-tick form-control" data-live-search="true" multiple data-max-options="5">
<?php
$sql = $conn->query("select * from autores");
while ($linha = $sql->fetch(PDO::FETCH_ASSOC)) { ?>
<?php if ($linha["AUT_ACESSO"] == "B") { ?>
<option disabled value="<?php echo $linha["AUT_ID"];?>"><?php echo $linha["AUT_NOME"]; ?></option>
<?php } else { ?>
<option value="<?php echo $linha["AUT_ID"];?>"><?php echo $linha["AUT_NOME"]; ?></option>
<?php } } ?>
</select>
</th>Discussão (4)
Carregando comentários...