Variable does not work in paging

Asked

Viewed 312 times

1

I am trying to build a pagination on a report that I own, but I have the following problem.
There is the variable $situacao, which comes via POST, which is necessary for the generation of the report. In the first run works normally, lists only the first 9 items. But when clicking on the following page, it gives error in the variable, as if it were empty. I did a test fixing the value on it and the paging works correctly. How can I proceed?

Buscastatus.php

<?php

// Dados do banco e controle de acesso
include "js/ValidaUsuario.php"; //LIBERAÇÃO DE ACESSO SOMENTE PARA AUTORIZADOS (ADMIN)
include "js/conn.php";
require "paginacao.php";

//$situacao = utf8_encode($_POST['situacao']);
$situacao =  'TODOS';
$situacaoE = 0; //Zera para evitar erros
$situacaoC = 0; //Zera para evitar erros
$situacaoA = 0; //Zera para evitar erros
$situacaoR = 0; //Zera para evitar erros
$situacaoAR = 0; //Zera para evitar erros
$situacaoAC = 0; //Zera para evitar erros

$data = date('d-m-Y'); //armazena data atual
$hora = date('H:i');  //armazena hora atual

// Número de artigos por página
$artigos_por_pagina = 9;

// Página atual onde vamos começar a mostrar os valores
$pagina_atual = ! empty( $_GET['pagina'] ) ? (int) $_GET['pagina'] : 0;
$pagina_atual = $pagina_atual * $artigos_por_pagina;

//ORGANIZA AS VARIÁVEIS PARA O CASO DE SER SELECIONADA A OPÇÃO "TODOS"
if ($situacao == 'TODOS') {
    $situacaoE = 'EM ANDAMENTO';
    $situacaoC = 'CANCELADO';
    $situacaoA = 'APROVADO';
    $situacaoR = 'REPROVADO';
    $situacaoAR = utf8_encode('APROVADO COM RESTRIÇÃO');
    $situacaoAC = 'AGUARDANDO CLIENTE';
}

//aqui faz a consulta do projeto
$sqlSaida = "select u.nome_completo, b.*, DATE_FORMAT(b.dt_abertura, '%d-%m-%Y') as dt_abertura from
                      briefing B,
                      usuarios U
                      where
                         B.lider = u.cracha and
                         B.situacao IN ('". $situacao . "','". $situacaoE . "','". $situacaoC . "','". $situacaoR . "','". $situacaoAC . "','". $situacaoAR . "')
                      LIMIT $pagina_atual, $artigos_por_pagina";

$resSaida = $conexao->prepare($sqlSaida);
$resSaida->execute();
$saidas = $resSaida->fetchAll();

//cria tabela para exibir resultados
             ?>
             <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
             <html lang="pt-BR">
             <head>
             <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
             <title>Relatório de Projetos por Status - Peccin S.A </title>
             <style>

             /* Ordenação de colunas */
             table.sortable thead {
             background-color:#A9A9A9;
             color:#000000;
             font-weight: bold;
             TEXT-TRANSFORM: uppercase;
             cursor: default;
             }

             </style>
             <script src="js/sorttable.js"></script>
             </head>
             <body>

             <table>
             <tr><h3><center>Relatório de Projetos por Status - <?echo $situacao?> <br><br><b>Status em: <? echo $data ." às ". $hora; ?></b></center></h3></tr>
             <tr></tr>
             </table>

             <table border = 2 width = 100% class="sortable">
                   <tr>
                   <td><b>Projeto: </b</td>
                   <td><b>Data Abertura: </b></td>
                   <td><b>Nome: </b></td>
                   <td><b>Responsável: </b></td>
                   <td><b>Lider: </b></td>
                   <td><b>Situação: </b></td>
                   </tr>
<?
//prepara o resultado e inicia a exibição
foreach ($saidas as $saida) { ?>
                   <tr>
                   <td><a href=http://pcn-sig.peccin.local/sig/subsistemas/projeto_testes/projetos/BuscaProjeto.php?projeto=<?php echo $saida['cod'] ?>><?php echo $saida['cod'] ?></a></td>
                   <td><?php echo utf8_decode($saida['dt_abertura']) ?></td>
                   <td><?php echo utf8_decode($saida['nome']) ?></td>
                   <td><?php echo utf8_decode($saida['responsavel']) ?></td>
                   <td><?php echo utf8_decode($saida['nome_completo']) ?></td>
                   <td><?php echo utf8_decode($saida['situacao']) ?></td>
                   </tr>

<?

}
?>
<?
//exibe as linhas retornadas na consulta
print "<b>Total: ". $resSaida->rowCount() . " Projetos encontrados.<br><br></b>";
print "<b>Clique no nome da coluna para organizar o resultado.<br></b>";

// Pegamos o valor total de artigos em uma consulta sem limite
$total_artigos = $conexao->prepare("SELECT COUNT(*) AS total FROM briefing");
$total_artigos->execute();
$total_artigos = $total_artigos->fetch();
$total_artigos = $total_artigos['total'];

// Exibimos a paginação
echo paginacao( $total_artigos, $artigos_por_pagina, 5 );

?>
             <table>
             <br>
             <center><input type = 'button' value = "Fechar" class = "btn" onclick = 'javascript:window.close();'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
             <input type = 'button' value = "Imprimir" class = "btn" OnClick = 'javascript:window.print();'></center>
             </td>
             </tr>
             </table>
</body>
</html>

Paginacao.php

<?php
/**
 * Paginação
 *
 * Cria uma paginação simples.
 *
 * @param int $total_artigos Número total de artigos da sua consulta
 * @param int $artigos_por_pagina Número de artigos a serem exibidos nas páginas
 * @param int $offset Número de páginas a serem exibidas para o usuário
 *
 * @return string A paginação montada
 */

function paginacao(
    $total_artigos = 0,
    $artigos_por_pagina = 10,
    $offset = 5
) {
    // Obtém o número total de página
    $numero_de_paginas = floor( $total_artigos / $artigos_por_pagina );

    // Obtém a página atual
    $pagina_atual = 1;

    // Atualiza a página atual se tiver o parâmetro pagina=n
    if ( ! empty( $_GET['pagina'] ) ) {
        $pagina_atual = (int) $_GET['pagina'];
    }

    // Vamos preencher essa variável com a paginação
    $paginas = null;

    // Primeira página
    $paginas .= " <a href='?pagina=0'>Home</a> ";

    // Faz o loop da paginação
    // $pagina_atual - 1 da a possibilidade do usuário voltar
    for ( $i = ( $pagina_atual - 1 ); $i < ( $pagina_atual - 1 ) + $offset; $i++ ) {

        // Eliminamos a primeira página (que seria a home do site)
        if ( $i < $numero_de_paginas && $i > 0 ) {
            // A página atual
            $página = $i;

            // O estilo da página atual
            $estilo = null;

            // Verifica qual dos números é a página atual
            // E cria um estilo extremamente simples para diferenciar
            if ( $i == @$parametros[1] ) {
                $estilo = ' style="color:red;" ';
            }

            // Inclui os links na variável $paginas
            $paginas .= " <a $estilo href='?pagina=$página'>$página</a> ";
        }

    } // for

    $paginas .= " <a href='?pagina=$numero_de_paginas'>Última</a> ";

    // Retorna o que foi criado
    return $paginas;

}

First link, when running:

http://pcn-sig.peccin.local/sig/subsistemas/projeto_testes/projetos/BuscaStatus.php

By clicking on the page (works with fixed variable, not via POST):

http://pcn-sig.peccin.local/sig/subsistemas/projeto_testes/projetos/BuscaStatus.php?pagina=1
  • When you click on the next page is through a link?

  • I edited the question showing the situation, but yes, it is with link. I am trying to "fix" the variable so that it does not change when clicking on the pages...

1 answer

2


The parameter situacao is not persisted on the following pages of the pagination because they are received by the method GET, unlike the method POST initial.

As a correction suggestion, change the attribute method of the search form for POST for GET and take the situation by the variable $_GET['situacao'].

It will also be necessary to change the way links are built. I suggest encapsulating logic more or less this way:

function constroiLink($pagina)
{
    return '<a href="?pagina=' . $pagina . (isset($_GET['situacao']) ? '&situacao=' . $_GET['situacao'] : '') '">';
}
  • I tried, but the same error keeps occurring. How would I persist it?

  • What matters is that the variable is always present in query string of the search (in the URL, ie, ?situacao=TODOS) on all search pages, including the first. Try changing $_POST for $_GET and manually place the parameter in the URL to see if it works.

  • Manually, like this: http://pcn-sig.peccin.local/sig/projetas_testes/projects/BuscaStatus.php?situacao=TODOS&pagina=1 worked, but now I’m trying to understand how I’m going to do it. I add the status variable to the.php pagination?

  • 1

    That’s right, in all stages of link constructions.

  • I changed in the pagination <a href='? situacao=$situacao&pagina=PAGINAQUALQUER> but the situation keeps going blank when clicking on the links....

  • It is because the variable $situacao is not global (and should not be). I amended the response with a suggested implementation.

  • I decided to change your idea a little: "<a href='? situacao={$_GET['situacao']}&pagina=$numero_de_paginas'>Last</a> ";

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.