Palavra:   

Revista PHP / PHP

Vinícius Oliveira

Analista de Sistemas. Desenvolvedor web. Usando as tecnologias ASP, PHP, JavaScript, CSS, Tableless e outros. Certificado em Tecnologia da Informação.

Paginação de resultados em PHP/SQL Server

Andei pesquisando pela internet, procurando uma solução pronta para o meu problema: Substituir o LIMIT, usado em MySQL, por algo que funcione em SQL Server com PHP. Encontrei vários códigos, várias dicas, mas nada funcionava do jeito que queria. Então resolvi pegar um pouco de cada e montar um código fácil. Na verdade, adaptei o artigo do colunista Carlos Silva, publicado aqui em 2006. Segue então uma paginação legal, com numeração de páginas e até pesquisa por palavra no banco. Obrigado.

  1. <?php
  2. //Aqui é feita a conexão com o banco.
  3.  
  4. //Nome do seu computador
  5. $servidor_conexao = 'info';
  6. //Nome do seu banco
  7. $banco_conexao = 'Produtos';
  8. //Usuário do banco
  9. $usuario_conexao = 'sa' ;
  10. //Senha do banco
  11. $senha_conexao = '';
  12. //conecta-se ao servidor
  13. $msg="<p>Não foi possível conectar ao <b>servidor de banco de dados</b>. Verifique o erro acima e contacte o suporte</p>";
  14. $GLOBALS['conexao'] = mssql_pconnect($servidor_conexao,$usuario_conexao,$senha_conexao) or die($msg);
  15. //seleciona o banco
  16. mssql_select_db($banco_conexao,$GLOBALS['conexao']) or die($msg);
  17.  
  18.  
  19.  
  20. // TRANSFORMA AS INFORMAÇÕES DO BANCO EM FORMATO PORTUGUES COM ACENTO.
  21. header("Content-Type: text/html; charset=ISO-8859-1",true);
  22.  
  23. //inicio o critério e recebo qualquer cadeia que se deseje procurar
  24. $criterio = "";
  25. if ($_GET["criterio"]!=""){
  26. $txt_criterio = $_GET["criterio"];
  27. $criterio = " where descricao like '%" . $txt_criterio . "%'";
  28. }
  29.  
  30. //Número máximo de links a serem exibidos
  31. $numero_links = "11";
  32. //Número de registros por página
  33. $total_reg = "40";
  34.  
  35. if(!$pagina) {
  36. $pc = "1";
  37. } else {
  38. $pc = $pagina;
  39. }
  40.  
  41. // intevalo revebe o valor da variavel numero_links
  42. $intervalo = $numero_links;
  43. // inicio recebe pc - 1 para montamos o sql
  44. //$inicio = $pc-1;
  45. $inicio = $pc*$total_reg;
  46.  
  47. //Aqui eu mostro o total de registros encontrados
  48. $sql = mssql_query("SELECT * FROM tbl_produto ".$criterio);
  49. $tr = mssql_num_rows($sql);
  50.  
  51. //Aqui vai o código que substitui o famoso LIMIT do MySql. Adaptado para SQL Server.
  52. $sql2=mssql_query("
  53. select * from (
  54. select top $total_reg * from (
  55. select top $inicio * from tbl_produto ".$criterio."
  56. order by descricao asc
  57. ) as newtbl order by descricao desc
  58. ) as newtbl2 order by descricao asc");
  59.  
  60.  
  61. // recebemos o valor do total de paginas
  62. $tp = ceil($tr/$total_reg);
  63.  
  64. // listamos os dados de acordo com os parametros da sql2
  65. echo "<font size='1' face='Verdana'>";
  66. echo "Página $pc de $tp<br> Total de registros encontrados: $tr<br>";
  67. if($txt_criterio) {
  68. echo "Buscando por: <b>$txt_criterio</b><br>";
  69. }
  70. echo "</font>";
  71. echo "<hr>";
  72. while($dados=mssql_fetch_array($sql2)) {
  73. $id = $dados["id_produto"];
  74. $nome = $dados["descricao"];
  75. echo "<span class='texto'>$id - $nome</span><br>";
  76. }
  77. echo "<hr>";
  78. // A variavel aux recebe o valor do total de paginas/intervalo
  79. $aux = $tp/$intervalo;
  80. $aux1 = $pc/$intervalo;
  81. $pi = $aux1 * $intervalo;
  82. if ($pi == "0") {
  83. $pi = "1";
  84. }
  85. $pf = $pi + $intervalo -1;
  86. $anterior = $pi-$intervalo;
  87. if($pc<=$intervalo) {
  88. $anterior = 1;
  89. }
  90. $aux2 = $pi + 1;
  91. if($pi>1) {
  92. $aux = $pi - 1;
  93. $aux2 = $pi + 1;
  94. // Começa a listar a paginação
  95. echo "<a href='paginacao.php?pagina=$aux&criterio=$txt_criterio'><<<b> Anterior </b></a>&nbsp;";
  96. }
  97. else
  98. {
  99. echo "<font size='1' face='Verdana'>";
  100. echo "<< Anterior &nbsp;&nbsp;&nbsp;";
  101. echo "</font>";
  102. }
  103. // Monta os links da parte central da paginação
  104. for ($pi;$pi<$pf;$pi++)
  105. {
  106. if($pi<=$tp) {
  107. if($pc==$pi) {
  108. echo "<strong><font size='1' face='Verdana'>";
  109. echo "<b>[" . $pi . "]</b>&nbsp;";
  110. echo "</font></strong>";
  111. } else {
  112. echo "<a href='paginacao.php?pagina=" . $pi . "&criterio=" . $txt_criterio . "'>" . $pi . "</a>&nbsp;";
  113. }
  114. }
  115. }
  116. // faz verificação pra incluir ou não link na palavra próximo
  117. if($pc != $tp){
  118. echo "<strong><font size='1' face='Verdana'>";
  119. echo "<a href='paginacao.php?pagina=$aux2&criterio=$txt_criterio'><b>&nbsp;&nbsp;&nbsp; Próximo</b> >></a>";
  120. echo "</font></strong>";
  121. }
  122. else
  123. {
  124. echo "<font size='1' face='Verdana'>";
  125. echo "&nbsp;&nbsp;&nbsp; Próximo >>";
  126. echo "</font>";
  127. }
  128. ?>
  129.  
  130. <html>
  131. <head>
  132.  

Opções de Interação