I'm trying to mount a page in a report that I have, but I have the following problem.
There is the $situacao
variable, which comes via POST, which is required for report generation. In the first run it works normally, lists only the first 9 items. But when clicking on the page follows, it gives error in the variable, as if it were empty. I did a test setting the value on it and the paging works correctly. How can I proceed?
SearchStatus.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();'>              
<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
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