Foros del Web » Programando para Internet » PHP »

PHP OO Paginacion de resultados en PHP

Estas en el tema de Paginacion de resultados en PHP en el foro de PHP en Foros del Web. Estoy intentando paginar los resultados de un foro pero al parecer estopy haciendo algo mal, les adjunto mi codigo ojalá alguien me heche un cable ...
  #1 (permalink)  
Antiguo 06/11/2012, 00:12
 
Fecha de Ingreso: noviembre-2012
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Paginacion de resultados en PHP

Estoy intentando paginar los resultados de un foro pero al parecer estopy haciendo algo mal, les adjunto mi codigo
ojalá alguien me heche un cable con esto ._.

foro.php
Código HTML:
<html>

<table border="1" cellpadding="2" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<? 
$sql = "SELECT * FROM foro WHERE foro = '".$foro."' ORDER BY id DESC LIMIT 5";
$res=mysql_query($sql,$db);
while ($row=mysql_fetch_array($res)){
$rows = 1;
?><tr>
    <td width="82%" colspan="2"><font face="Verdana" size="2"><b><? echo $row["autor"]; ?></b><br />
    <? echo htmlentities($row["mensaje"]); ?><br />
    </font><b><font face="Verdana" size="2">
    <a href="?foro=<? echo $row["id"]; ?>"><?
    echo mysql_result(mysql_query("SELECT COUNT(id) FROM foro WHERE foro = '".$row["id"]."'",$db));
?> [Leer mas]</a></font></b></td>
  </tr><?
}
if($rows == ''){ ?><tr>
    <td width="82%" colspan="2"><font face="Verdana" size="2">No hay mensajes en este foro</font></td>
  </tr><?
}
?><tr>
    <td width="82%" colspan="2"><font face="Verdana" size="2"><b><a href="?escribir=<?
echo $foro;
?>">Escribir mensaje</a><?
$arriba = @mysql_result(mysql_query("SELECT foro FROM foro WHERE id = '".$foro."'",$db));
if($arriba != '')echo ' | <a href="?foro='.$arriba.'">Volver</a>';
else echo ' | <a href="?foro=">Volver</a>';
?></font></b></td>
  </tr>
</table> 

<?

require_once('paginator.class.php');
$pages= new Paginator;
$pages->items_total = "SELECT COUNT(*) FROM foro WHERE foro='0'"; // cambiamos X por el total
$pages->mid_range = 7;
$pages->paginate();
echo $pages->display_pages();

?>

</html> 
paginator.class.php
Código PHP:
Ver original
  1. <?php
  2. /*
  3.  * PHP Pagination Class
  4.  * @author [email protected] - http://www.catchmyfame.com
  5.  * @version 2.0.0
  6.  * @date October 18, 2011
  7.  * @copyright (c) [email protected] (www.catchmyfame.com)
  8.  * @license CC Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) - http://creativecommons.org/licenses/by-sa/3.0/
  9.  */
  10. class Paginator{
  11.     var $items_per_page;
  12.     var $items_total;
  13.     var $current_page;
  14.     var $num_pages;
  15.     var $mid_range;
  16.     var $low;
  17.     var $limit;
  18.     var $return;
  19.     var $default_ipp;
  20.     var $querystring;
  21.     var $ipp_array;
  22.  
  23.     function Paginator()
  24.     {
  25.         $this->current_page = 1;
  26.         $this->mid_range = 7;
  27.         $this->ipp_array = array(10,25,50,100,'All');
  28.         $this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
  29.     }
  30.  
  31.     function paginate()
  32.     {
  33.         if(!isset($this->default_ipp)) $this->default_ipp=25;
  34.         if($_GET['ipp'] == 'All')
  35.         {
  36.             $this->num_pages = 1;
  37. //          $this->items_per_page = $this->default_ipp;
  38.         }
  39.         else
  40.         {
  41.             if(!is_numeric($this->items_per_page) OR $this->items_per_page <= 0) $this->items_per_page = $this->default_ipp;
  42.             $this->num_pages = ceil($this->items_total/$this->items_per_page);
  43.         }
  44.         $this->current_page = (isset($_GET['page'])) ? (int) $_GET['page'] : 1 ; // must be numeric > 0
  45.         $prev_page = $this->current_page-1;
  46.         $next_page = $this->current_page+1;
  47.         if($_GET)
  48.         {
  49.             $args = explode("&",$_SERVER['QUERY_STRING']);
  50.             foreach($args as $arg)
  51.             {
  52.                 $keyval = explode("=",$arg);
  53.                 if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg;
  54.             }
  55.         }
  56.  
  57.         if($_POST)
  58.         {
  59.             foreach($_POST as $key=>$val)
  60.             {
  61.                 if($key != "page" And $key != "ipp") $this->querystring .= "&$key=$val";
  62.             }
  63.         }
  64.         if($this->num_pages > 10)
  65.         {
  66.             $this->return = ($this->current_page > 1 And $this->items_total >= 10) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$prev_page&ipp=$this->items_per_page$this->querystring\">&laquo; Previous</a> ":"<span class=\"inactive\" href=\"#\">&laquo; Previous</span> ";
  67.  
  68.             $this->start_range = $this->current_page - floor($this->mid_range/2);
  69.             $this->end_range = $this->current_page + floor($this->mid_range/2);
  70.  
  71.             if($this->start_range <= 0)
  72.             {
  73.                 $this->end_range += abs($this->start_range)+1;
  74.                 $this->start_range = 1;
  75.             }
  76.             if($this->end_range > $this->num_pages)
  77.             {
  78.                 $this->start_range -= $this->end_range-$this->num_pages;
  79.                 $this->end_range = $this->num_pages;
  80.             }
  81.             $this->range = range($this->start_range,$this->end_range);
  82.  
  83.             for($i=1;$i<=$this->num_pages;$i++)
  84.             {
  85.                 if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... ";
  86.                 // loop through all pages. if first, last, or in range, display
  87.                 if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range))
  88.                 {
  89.                     $this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
  90.                 }
  91.                 if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
  92.             }
  93.             $this->return .= (($this->current_page < $this->num_pages And $this->items_total >= 10) And ($_GET['page'] != 'All') And $this->current_page > 0) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$next_page&ipp=$this->items_per_page$this->querystring\">Next &raquo;</a>\n":"<span class=\"inactive\" href=\"#\">&raquo; Next</span>\n";
  94.             $this->return .= ($_GET['page'] == 'All') ? "<a class=\"current\" style=\"margin-left:10px\" href=\"#\">All</a> \n":"<a class=\"paginate\" style=\"margin-left:10px\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
  95.         }
  96.         else
  97.         {
  98.             for($i=1;$i<=$this->num_pages;$i++)
  99.             {
  100.                 $this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
  101.             }
  102.             $this->return .= "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
  103.         }
  104.         $this->low = ($this->current_page <= 0) ? 0:($this->current_page-1) * $this->items_per_page;
  105.         if($this->current_page <= 0) $this->items_per_page = 0;
  106.         $this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page";
  107.     }
  108.     function display_items_per_page()
  109.     {
  110.         $items = '';
  111.         if(!isset($_GET[ipp])) $this->items_per_page = $this->default_ipp;
  112.         foreach($this->ipp_array as $ipp_opt) $items .= ($ipp_opt == $this->items_per_page) ? "<option selected value=\"$ipp_opt\">$ipp_opt</option>\n":"<option value=\"$ipp_opt\">$ipp_opt</option>\n";
  113.         return "<span class=\"paginate\">Items per page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>\n";
  114.     }
  115.     function display_jump_menu()
  116.     {
  117.         for($i=1;$i<=$this->num_pages;$i++)
  118.         {
  119.             $option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n";
  120.         }
  121.         return "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page$this->querystring';return false\">$option</select>\n";
  122.     }
  123.     function display_pages()
  124.     {
  125.         return $this->return;
  126.     }
  127. }
  #2 (permalink)  
Antiguo 06/11/2012, 06:57
Avatar de webseficientes  
Fecha de Ingreso: enero-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 320
Antigüedad: 19 años, 2 meses
Puntos: 14
De acuerdo Respuesta: Paginacion de resultados en PHP

Código:
SELECT * FROM foro WHERE foro = '".$foro."' ORDER BY id DESC LIMIT 5
Siempre te va a dar los mismos resultados, nada de paginación.

Tenes que usar LIMIT X, Y

Cita:
Del manual de Mysql :
La cláusula LIMIT puede usarse para restringir el número de registros retornados por el comando SELECT. LIMIT tiene uno o dos argumentos numéricos, que deben ser enteros positivos (incluyendo cero).

Con dos argumentos, el primer argumento especifica el desplazamiento del primer registro a retornar. El desplazamiento del registro inicial es 0 (no 1):
__________________
Gerardo Benitez
Programador Web Freelance, SEO, Diseño web

Etiquetas: paginar, query, resultados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:58.