Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, to apanhando LEGAL aki!!!
Tenho um banco de dados SQL Server com 3000 registros.
Criei uma página de consulta, onde na mesma página eu vejo a lista completa, executo as queries de busca, etc...
Consegui fazer a paginação dos dados do sql server e ta funcionando quando listo a tabela inteira! porém quando faço uma busca, essa paginação não está funcionando!!!
Como se trata de uma busca, eu armazenei os valore em uma SESSION para não perdê-los! É a melhor forma? Pq minha paginação não ta rolando??
Segue a codificação completa:
<? //-- Declarando as sessões necessárias para a navegação desta página session_start(); $hasfilter = ($_POST["lista_queryBusca"])?true:false; if($hasfilter) { $_SESSION["lista_parametrosBusca"] = $_POST["lista_parametrosBusca"]; $_SESSION["lista_queryBusca"] = $_POST["lista_queryBusca"]; } //-- Configurações desta página $titulo = "Lista telefônica 2007 - " . $_SESSION["lista_queryBusca"]; //-- Chamada do arquivo de configurações require_once("includes/config.ini.php"); //-- Chamada do arquivo de classes require_once("includes/classes.php"); //-- Chamada do topo include_once("includes/topo.php"); ##======================== //-- Início da página ##======================== //-- Conecta ao BD $sql = new conexao(); //-- Verifica qual a página atual $pagina = $_GET['pagina']; if($pagina == "") $pagina = 1; $inicio = $pagina - 1; $inicio = $qtde_pag * $pagina; //-- Caso haja algum filtro, ele é adicionado aqui if(isset($_SESSION["lista_parametrosBusca"])) { $sub_query = " AND " . strtolower($_SESSION["lista_parametrosBusca"]) . " LIKE '%" . $_SESSION["lista_queryBusca"] . "%'"; } else { $sub_query = ""; } //-- Define o comando sql da consulta $queryCont = "SELECT COUNT(*) FROM funcionarios WHERE 1=1" . $sub_query; $query = "SELECT TOP " . $qtde_pag . " prontuario,nome,apelido,nomearea,sigla,unidade,andar,diretoria,cargo,"; $query .= "fone,ramal,fax,email,nomesecretaria,CAST(DAY(aniversario) AS nvarchar(2)) + '/' + CAST(MONTH(aniversario) AS nvarchar(2)) AS dataniver,divulganiver "; $query .= "FROM funcionarios "; $query .= "WHERE idFuncionario NOT IN ("; $query .= " SELECT TOP " . $inicio . " idFuncionario FROM funcionarios"; $query .= ")" . $sub_query; //-- Traz a quantidade total de registros na tabela $tabelaTotal = mssql_query($queryCont); $sql->desconecta(); $qtde_total = mssql_fetch_array($tabelaTotal); $qtde_total = $qtde_total[0]; //-- Quantidade de páginas da consulta $qtde_mod = ($qtde_total % $qtde_pag); $qtde_pags = intval(($qtde_total - $qtde_mod) / $qtde_pag); if($qtde_mod > 0) $qtde_pags++;?> <table width="95%" border="0" cellspacing="0" cellpadding="0" class="listaFuncionarios" align="center"> <tr class="titulo"> <td>Prontuário</td> <td>Nome</td> <td>Área</td> <td>Unidade</td> <td>Diretoria</td> <td>Cargo</td> <td>Telefone</td> <td>Fax</td> <td>E-mail</td> <td>Data do aniversário</td> </tr><? //-- Apresenta os resultados da consulta na tabela $sql->conexao(); $listaFuncionarios = mssql_query($query); while($usuarios = mssql_fetch_array($listaFuncionarios)) { //-- Atribui os valores vindos do BD para as variaveis correspondentes $pront = $usuarios['prontuario']; $apelido = $usuarios['apelido']; $nome = (strlen($apelido) > 0)?$usuarios['nome'] . " (" . $apelido . ")":$usuarios['nome']; $area = $usuarios['sigla'] . " - " . $usuarios['nomearea']; $unidade = $usuarios['unidade'] . " - " . $usuarios['andar']; $diretoria = $usuarios['diretoria']; $cargo = $usuarios['cargo']; $ramal = $usuarios['ramal']; $fone = (strlen($ramal) > 0)?$usuarios['fone'] . " (r. " . $ramal . ")":$usuarios['fone']; $fax = $usuarios['fax']; $mail = (strlen($usuarios['email']) > 0)?"<a href='mailto:" . $usuarios['email'] . "'>" . $usuarios['email'] . "</a>":""; $divulgar = $usuarios['divulganiver']; $dataniver = ($divulgar == 1)?$usuarios['dataniver']:"Data não divulgada"; echo "<tr style='text-align: center; font-weight: normal;'>\n"; echo " <td>$pront</td>\n"; echo " <td>$nome</td>\n"; echo " <td>$area</td>\n"; echo " <td>$unidade</td>\n"; echo " <td>$diretoria</td>\n"; echo " <td>$cargo</td>\n"; echo " <td>$fone</td>\n"; echo " <td>$fax</td>\n"; echo " <td>$mail</td>\n"; echo " <td>$dataniver</td>\n"; echo "</tr>\n"; } $sql->desconecta();?> </table><br /> <div class="navegacaoListaFuncionarios"><? //-- Mostra os links de navegação das páginas $primeiraPag = $pagina - (intval(($rangePag - ($rangePag % 2)) / 2)); if($primeiraPag <= 0) $primeiraPag = 1; $ultimaPag = $primeiraPag + $rangePag; if($ultimaPag > $qtde_pags) { $ultimaPag = $qtde_pags; $primeiraPag = $ultimaPag - $rangePag; if($primeiraPag <= 0) $primeiraPag = 1; } $links .= "<a href=\"" . $_SERVER["PHP_SELF"] . "?pagina=1\">«</a> \n"; for($i=$primeiraPag; $i<$ultimaPag; $i++) { if($pagina == $i) $links .= "$i\n"; else $links .= "<a href=\"" . $_SERVER["PHP_SELF"] . "?pagina=$i\">$i</a>\n"; } $links .= "<a href=\"" . $_SERVER["PHP_SELF"] . "?pagina=$qtde_pags\">»</a>\n"; echo $links;?> </div><br /><? //-- Chamada do rodapé require_once("includes/rodape.php");?>
Alguém pode me ajudar PELO AMOR DE DEUS????????/ http://forum.imasters.com.br/public/style_emoticons/default/upset.gif
VALEW!!!
Cara.... beleza?
Então... o problema não é com os resultados! Mudei para GET e mantive os parâmetros da busca na URL, porém a paginação continua não funcionando! Acredito ser algum erro de lógica meu, e acredito ainda ser nessa parte:
//-- Define o comando sql da consulta $queryCont = "SELECT COUNT(*) FROM funcionarios WHERE 1=1" . $sub_query; $query = "SELECT TOP " . $qtde_pag . " prontuario,nome,apelido,nomearea,sigla,unidade,andar,diretoria,cargo,"; $query .= "fone,ramal,fax,email,nomesecretaria,CAST(DAY(aniversario) AS nvarchar(2)) + '/' + CAST(MONTH(aniversario) AS nvarchar(2)) AS dataniver,divulganiver "; $query .= "FROM funcionarios "; $query .= "WHERE idFuncionario NOT IN ("; $query .= " SELECT TOP " . $inicio . " idFuncionario FROM funcionarios"; $query .= ")" . $sub_query;
To tentando faz um tempo mas até agora não consegui http://forum.imasters.com.br/public/style_emoticons/default/cry.gif
Pessoal, tive certeza que o problema é na minha query! Então resolvi fazer a paginação 100% com o PHP e não depender do SQL Server.
Mesmo assim não funcionou! huauhahuahuaHUAA.... to apanhando, mas acredito que agora seja mais facil de resolver!
Meu script ficou assim:
<? //-- Chamada do arquivo de configurações require_once("includes/config.ini.php"); //-- Chamada do arquivo de classes require_once("includes/classes.php"); //-- Chamada do topo include_once("includes/topo.php"); ##======================== //-- Início da página ##======================== //-- Conecta ao BD $sql = new conexao(); //-- Inicia as variaveis utilizadas na paginação $qtde_pag = 20; $i = 0; $hasFilter = false; //-- Caso haja algum filtro, ele é adicionado aqui if(isset($_GET["c"])) { $sub_query = " AND " . strtolower($_GET['c']) . " LIKE '%" . $_GET['v'] . "%'"; $hasFilter = true; } else { $sub_query = ""; } //-- Define o comando sql da consulta //-- Quantidade de registros da consulta $total = mssql_query("SELECT idFuncionario FROM funcionarios WHERE 1=1" . $sub_query); while($t = mssql_fetch_array($total)) { ++$i; } $total = $i; $query = "SELECT prontuario,nome,apelido,nomearea,sigla,unidade,andar,diretoria,cargo,"; $query .= "fone,ramal,fax,email,nomesecretaria,CAST(DAY(aniversario) AS nvarchar(2)) + '/' + CAST(MONTH(aniversario) AS nvarchar(2)) AS dataniver,divulganiver "; $query .= "FROM funcionarios WHERE 1=1" . $sub_query; $listaFuncionarios = mssql_query($query); @$pg = $_GET['p']; if(empty($pg)) { $start = 0; } else { $start = (($pg-1)*$qtde_pag); } //================================= // AQUI ESTÁ A LINHA QUE NÃO ENTENDI //================================= $row = mssql_fetch_row($listaFuncionarios,$start); $i = 0?> <table width="95%" border="0" cellspacing="0" cellpadding="0" class="listaFuncionarios" align="center"> <tr class="titulo"> <td>Prontuário</td> <td>Nome</td> <td>Área</td> <td>Unidade</td> <td>Diretoria</td> <td>Cargo</td> <td>Telefone</td> <td>Fax</td> <td>E-mail</td> <td>Data do aniversário</td> </tr><? //-- Apresenta os resultados da consulta na tabela while($usuarios = mssql_fetch_array($listaFuncionarios)) { //-- Atribui os valores vindos do BD para as variaveis correspondentes $pront = $usuarios['prontuario']; $apelido = $usuarios['apelido']; $nome = (strlen($apelido) > 0)?$usuarios['nome'] . " (" . $apelido . ")":$usuarios['nome']; $area = $usuarios['sigla'] . " - " . $usuarios['nomearea']; $unidade = $usuarios['unidade'] . " - " . $usuarios['andar']; $diretoria = $usuarios['diretoria']; $cargo = $usuarios['cargo']; $ramal = $usuarios['ramal']; $fone = (strlen($ramal) > 0)?$usuarios['fone'] . " (r. " . $ramal . ")":$usuarios['fone']; $fax = $usuarios['fax']; $mail = (strlen($usuarios['email']) > 0)?"<a href='mailto:" . $usuarios['email'] . "'>" . $usuarios['email'] . "</a>":""; $divulgar = $usuarios['divulganiver']; $dataniver = ($divulgar == 1)?$usuarios['dataniver']:"Data não divulgada"; echo "<tr style='text-align: center; font-weight: normal;'>\n"; echo " <td>$pront</td>\n"; echo " <td>$nome</td>\n"; echo " <td>$area</td>\n"; echo " <td>$unidade</td>\n"; echo " <td>$diretoria</td>\n"; echo " <td>$cargo</td>\n"; echo " <td>$fone</td>\n"; echo " <td>$fax</td>\n"; echo " <td>$mail</td>\n"; echo " <td>$dataniver</td>\n"; echo "</tr>\n"; ++$i; if($i >= $qtde_pag) { break; } } $sql->desconecta();?> </table><br /><? //-- Esquema de navegação das páginas $pgs = ceil($total/$qtde_pag); $anterior = $pg-1; $proximo = $pg+1; if (!isset($pg)) { $pg = 1; $proximo = 2; } echo "<div class='navegacaoListaFuncionarios'>"; $compLink = ($hasFilter)?"&c=" . $_GET['c'] . "&v=" . $_GET['v']:""; if($pg > 1) { echo "<a href='" . $_SERVER["PHP_SELF"] . "?p=$anterior$compLink'>Anterior</a> | "; } for($num == 1; $num <= $pgs; $num++) { if($pg == $num) { echo " <b>[$num]</b> "; } else { echo " <a href='" . $_SERVER["PHP_SELF"] . "?p=$num$compLink'>$num</a> "; } } if($pg < $pgs) { echo " | <a href='" . $_SERVER["PHP_SELF"] . "?p=$proximo$compLink'>Próxima</a>"; } echo "</div><br />"; //-- Chamada do rodapé require_once("includes/rodape.php");?>
E agora????
VALEW!!
ninguém? :(
nobre colega passei pelo mesmo problema espero que ja tenha conseguido uma solucao...
caso não ou pra futura consultas...
CODE
$Tabela = "TABELA";$Pg = $_GET['Pg'];
if (empty($Pg)) { $Pg = 0; }
$Busca = mssql_query('SELECT * FROM '.$Tabela);
$pgs = ceil(mSsql_num_rows($Busca) / $TotalPG);
mssql_data_seek($Busca , ($Pg * $TotalPG));
$i = 0;
while(($Linha = mssql_fetch_row($Busca)) && $i < $TotalPG){
echo $Linha[1] . '<br>';
$i++;
}
if ($Pg > 0) {
$Menos = $Pg - 1;
echo "<a href='?Pg=".$Menos."'><= Voltar</a><b> | </b>";
}
if ($Pg < ($pgs-1)) {
$Mais = $Pg + 1;
echo "<a href='?Pg=".$Mais."'>Próximo =></a>";
}
Aew galera!!! Alguém pode me ajudar por favor??? não consegui ainda...VALEW!