Paginación de resultados con PHP y MySQL

  • Por
Muestra de técnica de paginación, para mostrar en distintas páginas los resultados de una consulta a la base de datos. El ejemplo está desarrollado en PHP y MySQL.
En muchas ocasiones, cuando se presentan en una página web registros de una base de datos, se deberían mostrar demasiados registros como para colocarlos todos en una única página. En estas ocasiones se suele paginar los resultados, quizás cientos, en distintas páginas con conjuntos de registros mucho menos numerosos. Por ejemplo, podríamos presentar los resultados en páginas de 10 elementos o 20, dependiendo de nuestras intenciones y el tipo de datos que se estén presentando. Este efecto lo habremos podido observar repetidas veces en los buscadores.

Podríamos desarrollar distintos scripts para paginar resultados en PHP. En este artículo vamos a explicar una posibilidad basada en la utilización de una base de datos MySQL y sentencias SQL a las que indicaremos el conjunto de registros que queremos mostrar en cada página. Los enunciados SELECT del lenguaje SQL, en la base de datos MySQL y otras muchas, tienen una cláusula llamada LIMIT, con la que podemos indicar los registros a mostrar, por ejemplo, 10 registros empezando por el registro 180.

select * from pais limit 180,10

Como vemos LIMIT tiene dos argumentos, el primero es el registro por el que empezar los resultados y el segundo el número de resultados a recoger en el conjunto de registros resultante.

Así pues, en este ejercicio de paginación la cláusula LIMIT será la clave para mostrar los registros en grupos del tamaño deseado.

Código de paginación

Hay varias partes del código que servirán específicamente para implementar la paginación. Lo primero es saber qué página se desea mostrar. En principio se mostraría la primera página de resultados, pero si un visitante selecciona con los enlaces de abajo otra página distinta de la primera, habría que mostrarla también. El índice de la página a mostrar, si es que no es la primera vez que se accede, se recibe por parámetro en la URL.

//Limito la busqueda
$TAMANO_PAGINA = 10;

//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
    $inicio = 0;
    $pagina=1;
}
else {
    $inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

Estoy definiendo el tamaño de la página. Luego procuro recibir la página por parámetro en la URL. Si no se recibió nada, se entiende que la página a mostrar es la primera, luego la variable $inicio, que guarda el primer registro a mostrar (para indicarlo en la sentencia SQL en el apartado LIMIT), será cero. Si habíamos recibido algo como página, calculo el inicio con una simple multiplicación de la página a mostrar por el tamaño_ de página definido antes.

Es habitual en estas páginas de resultados informar un poco sobre la cantidad de registros encontrados y los datos de la página que estamos viendo. Estos datos se pueden obtener con unas sencillas operaciones.

//miro a ver el número total de campos que hay en la tabla con esa búsqueda
$ssql = "select * from pais " . $criterio;
$rs = mysql_query($ssql,$conn);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);

//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";


Nota: Este código podría mostrar una información como esta:

Número de registros encontrados: 256
Se muestran páginas de 10 registros cada una
Mostrando la página 19 de 26

Lo primero es hacer una búsqueda en la base de datos por el criterio que se esté utilizando para saber cuantos registros se obtienen en total sin la paginación (luego veremos de donde sale la variable $criterio).

A continuación puedo calcular el número total de páginas de resultados que genera la búsqueda. La función ceil() redondea números en coma flotante o reales hacia arriba, así pues, devuelve el entero por arriba más próximo.

Las siguientes líneas, donde se utiliza echo, tienen como objeto mostrar los datos en la página.

Ahora veremos el código que realiza la búsqueda en la base de datos, extrayendo y mostrando solamente aquellos registros que corresponden con la página a mostrar.

//construyo la sentencia SQL
$ssql = "select * from pais " . $criterio . " limit " . $inicio . "," . $TAMANO_PAGINA;
$rs = mysql_query($ssql);
while ($fila = mysql_fetch_object($rs)){
    echo $fila->nombre_pais . "<br>";
}
//cerramos el conjunto de resultado y la conexión con la base de datos
mysql_free_result($rs);
mysql_close($conn);

Se construye la sentencia SQL para extraer los datos con el criterio, que veremos luego de donde sale, pero que en principio lo podemos tomar como una cadena vacía. También se utiliza LIMIT, como ya se indicó: poniendo los valores definidos antes como inicio y tamaño de página.

El resto es un recorrido típico por un conjunto de registros, en este caso los países de nuestra base de datos, donde se van mostrando todos los elementos desde el principio hasta el final. Finalizando este recorrido no vamos a realizar ninguna acción más con la base de datos, así que podemos cerrar el resultado de la búsqueda y la conexión con la base de datos.

Ahora podemos ver el código que muestra en la parte de abajo los numeritos de todas las páginas que genera la búsqueda, para que el visitante pueda seleccionar una página y moverse entre los resultados.

//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
    for ($i=1;$i<=$total_paginas;$i++){
       if ($pagina == $i)
          //si muestro el índice de la página actual, no coloco enlace
          echo $pagina . " ";
       else
          //si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
          echo "<a href='index.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
    }
}

La primera línea comprueba si realmente hay varias páginas de resultados, pues, si no es así no tendría que mostrar nada. Si efectivamente hay varias páginas para mostrar se recorren todas y para cada una se muestra el índice.

El índice a mostrar puede que sea el de la página que se está visualizando en ese momento y en ese caso simplemente podríamos el numerito, pero no el enlace para ir a ese documento, pues es en el que estamos. En caso de que sea una página de resultados distinta, se muestra un enlace para moverse a dicha página, donde se incluye pasando por parámetro tanto el índice de la página que se desea ver como el criterio de la búsqueda que se estaba realizando.

Hasta aquí el código imprescindible para la paginación. Aunque aun vamos a ver alguna cosa más.

Código de búsqueda

Para hacer un taller un poco más completo y poder ofrecer una página de muestra con funcionalidades de búsqueda, hemos creado la posibilidad de añadir un criterio para encontrar tan sólo elementos relacionados con él. Después de todo, los códigos de paginación suelen utilizarse en situaciones en las que se están realizando búsquedas en la base de datos.

El criterio se podrá definir en una caja de texto y habrá un botón de buscar que llame a la misma página pero pasando el texto con las palabras a buscar en la base de datos.

<form action="index.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>

Nos fijamos que el método por el que pasamos este formulario es GET. Esto es debio a que no queremos liar el código y como estamos pasando ya por GET el criterio en otros sitios, utilizamos el mismo método.

El formulario lo colocaremos debajo, pero habrá también un trozo de código que recogerá la información y la tratará para adaptarla a una sentencia de búsqueda en la base de datos. Este código lo colocaremos en la parte de arriba de la página.

//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
if ($_GET["criterio"]!=""){
    $txt_criterio = $_GET["criterio"];
    $criterio = " where nombre_pais like '%" . $txt_criterio . "%'";
}

Se inicializa el criterio a una cadena vacía y luego se comprueba si se ha recibido algo por método GET en el campo criterio. Si era así se puede recoger el texto recibido y construir el criterio, que no es más que una cláusula WHERE donde se buscan elementos, en este caso países, cuyo nombre contenga por algún sitio las letras que se han recibido como texto del criterio.

Base de datos

Como se dijo, se está utilizando una base de datos MySQL. En el Manual de Programación en PHP de DesarrolloWeb.com se muestra la manera de trabajar con bases de datos.

En nuestro ejemplo nos faltan por indicar las sentencias para conectar con MySQL y seleccionar la base de datos a utilizar. Serían unas parecidas a estas.

//conecto con la base de datos
$conn = mysql_connect("servidor","usuario","password");
mysql_select_db("nombre_bbdd",$conn);

Referencia: A posteriori, hemos recibido un código para paginación realizado por un lector, que nos lo ha mandado para complementar este artículo. No podemos ofrecer los créditos porque hemos perdido su comunicación, así que si alguien lo reivindica colocaremos la autoría gustosamente.

Asímismo, disponemos de otro artículo que trata la paginación de resultados en PHP con un enfoque un poco distinto. El artículo viene con el script explicado y todo lo necesario para ponerlo en marcha: Paginación PHP y MySQL. Ejemplo 2.

Recomendamos también la lectura del artículo Paginator, script para paginar resultados con PHP y MySQL. Es un texto que presenta un interesante script en español y gratuito para realizar la paginación de resultados cómodamente.

Autor

Miguel Angel Álvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Freddy

30/1/2003
Tengo un par de dudas, a ver si me las pueden responder:

1. ¿Qué es $_GET?
2. ¿De dónde sale $pagina?

RESPUESTA

$_GET es un array asociativo que contiene todas las variables que se reciben por el método GET, es decir, por la URL. Se habla de ello en el artículo Pasar variables por la URL

$pagina viene de los enlaces de la parte de abajo, que muestran los índices de las páginas de resultados y permiten seleccionar aquella que se desea ver. Pasan a la página la variable por URL y con eso de $_GET la recogemos. El trozo de código donde se generan los índices está indicado en el artículo. De todos modos transcribo aquí un trozo para que se pueda identificar:

//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='index.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";

/r0d

13/6/2003
Chevere tutorial.. que interesante tambien esta en www.devshed.com, pero en ingles..

chau

José Pino

10/9/2004
Hola, este articulo me sirvio muchisimo para hacer una paginación muy similar en sybase. Para lograrlo le cambie algunas cosas al script ya que sybase o bueno no sé como se trata el limit en las sentencias sql: aqui les mando lo qu hice lo he probado y funciona perfecto.

<?php
$conn = sybase_connect("calendula", "sa", "");

$TAMANO_PAGINA = 20;

$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}
//Importante hace el query ordenado y sin limit
$ssql = "select * from data_user ORDER by nombre";
$rs = sybase_query($ssql,$conn);
$num_total_registros = sybase_num_rows($rs);

$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);

echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";

$rs = sybase_query($ssql,$conn);

$arreglo[] ="";
while ($fila = sybase_fetch_object($rs)){
$arreglo[]="$fila->nombre";
}

sybase_free_result($rs);
sybase_close($conn);

$contarray=1;

//Aqui, paso los datos extraidos en el query a un arreglo
//si son más campos como nombre, apellido...
//se puede trampiar así: $arreglo[]="$fila->nombre, $fila->numero_tlf";

foreach ($arreglo as $idarray=> $nombre){
//aqui se hace la verifiación que funciona como el limit

if ($idarray > $inicio && $contarray <= $TAMANO_PAGINA){
echo "$idarray $nombre<br>";
$contarray++;
}
}
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i){
echo $pagina . " ";
}else{
echo "<a href='dbd2.php?pagina=" . $i . "'>" . $i . "</a> ";
}
}
}
//José pino, cualquier cosa escriban amrpinoc79@hotmail.com///
?>


José Pino Mérida - Venezuela

Simae

28/10/2004
Me ha aydado mucho, la verdad es que sorprende la simplicidad y lo bien que funciona.

Simplemente amadir que en el apartado criterios cuando pasas la clausula where completa yo he tenido que sustituir inicialmente las comas simples por asteriscos y a la hora de utilizarla utilizar un replace

if ($_GET["criterio"]!=""){
$txt_criterioini = $_GET["criterio"];
//el criterio ini tembien lo utilizo para hacer los enlaces a las páginas
$txt_criterio=str_replace ("*","'",$txt_criterioini);
$criterio = " " . $txt_criterio . " ";
}


El enlace a las páginas de resultados lo he dejado así por el tema de las comillas simples del criterio.
echo '<a href="formres.php?pagina=' . $i . '&criterios=' . $txt_criterioini . '">' . $i . '</a> ';
;)

Matias

13/12/2004
Quiero agregar q si solo se quieren contar la cantidad de registros q cumplen un criterio de busqueda es mejor hacer la consulta "SELECT COUNT(*) FROM paises", así obtenemos el total altiro y le evitamos trabajo a la base de datos.. esto es valido para cualquier B.D. SQL

krypto84sv

29/8/2005
<?
mssql_select_db("lib");
//Declaramos el tamaño de registros que se van a visualizar por pagina.
$t=2;
if(!isset($_GET['pagina'])) {
$pagina=1;
$inicio=0;
}
else {
$pagina=$_GET['pagina'];
$inicio=($pagina-1)*$t;
}


$sql="select * from administrador";
$r=mssql_query($sql);
$total_paginas = ceil(mssql_num_rows($r) / $t);
$lim_inferior=1;
$lim_superior=1;
while($f=mssql_fetch_array($r)) {
//Con esta condición visualizamos los registros sin usar LIMIT.
if ($lim_inferior>$inicio && $lim_superior<=$t) {
echo $f['cod']."<br> ";
echo $f['nombre']."<br> ";
echo "<hr width=10% align=left>";
$lim_superior++;
}
$lim_inferior++;
}

for ($i=1;$i<=$total_paginas;$i++) {
if ($i!=$pagina) {
echo "<a href=$PHP_SELF?pagina=$i>$i</a> ";
}
else {
echo $i." ";
}
}
//alguna duda o sugerencia escribir: daniel_alberto84@hotmail.com
?>

mario castillo

15/11/2005
esta funcion es para conectarse nativamente a una base de datos mssql,
genera una tabla (datagrid), por el numero de campos seleccionados ej
select * from tabla --> seleccionara todos los campos y mostrara una tabla (Datagrid)con todos los campos

Select campo1,campo2 from tabla --> seleccionara solo 2 campos y mostrara una tabla de dos columnas.

function consulta($query,$tamano)
{
$conn=mssql_pconnect("servidor","usuario","contrasena") or die("no se pudo conectar a la base de datos");
$bd=mssql_select_db("syscar",$conn);
$t=$tamano;// tamano de la paginacion
if(!isset($_GET['pagina'])) {
$pagina=1;
$inicio=1;
}
else {
$pagina=$_GET['pagina'];
$inicio=($pagina-1)*$t;
}



if (isset($_GET['campo']) && $_GET['campo']!="" )
{
$ordena=$_GET['campo']+1;
$query=$query." order by ".$ordena." ".$_GET['order'];

}


$recordset=mssql_query($query,$conn);


$fields = mssql_num_fields ($recordset) or die("Num Fields Failed");
$rows = mssql_num_rows ($recordset);

$total_paginas = ceil($rows / $t);
$lim_inferior=1;
$lim_superior=1;



$i=0;//crea en numero de columnas
$y=0;
echo "<table border =2 class='style1'><tr>";

while ($i<$fields)
{

echo "<td>";

echo "<b>".mssql_field_name($recordset,$i)."</b><a href='".$_SERVER['PHP_SELF']."?campo=".$i."&order=Asc&pagina=".$_GET['pagina']."'><img src='../images/arriba.jpg' width='22' height='12' alt='ordenar ascendentemente por ".mssql_field_name($recordset,$i)."'></a><a href='".$_SERVER['PHP_SELF']."?campo=".$i."&order=DESC&pagina=".$_GET['pagina']."'><img src='../images/abajo.JPG' alt='ordenar descendentemente por ".mssql_field_name($recordset,$i)."' width='22' height='12'></a>";
echo "</td>";
$i=$i+1;
}
echo "</tr>";
///encabezado
$i=0;
for ($y=0;$y<$rows;$y++)
{
$resultado=$y%2;
if ($lim_inferior>$inicio && $lim_superior<=$t) {


echo "<tr";
if ($resultado==0)
echo " bgcolor='#bbccdd'>";
else
echo " bgcolor='#ffffff'>";

while ($i<$fields)
{

echo "<td>";

echo mssql_result($recordset,$y,$i);
echo "</td>";
$i=$i+1;
}
$i=0;
$lim_superior++;
}
$lim_inferior++;


echo "</tr>";

}
echo "<tr><td colspan='".$fields."'>";
//paginacion
for ($i=1;$i<=$total_paginas;$i++) {
if ($i!=$pagina) {
echo "<a href='".$_SERVER['PHP_SELF']."?pagina=".$i."&order=".$_GET['order']."&campo=".$_GET['campo']."'>".$i."</a> ";
}
else {
echo "<b>".$i."</b> ";
}

}
echo "</td></tr></table>";


}

J. Pedro

11/8/2006
Muy bueno el código, me ha servido de mucha ayuda. Gracias

Daniel Carrero

28/9/2006
Tengo un ejemplo en Postgresql que puede ayudar:
<?
//Limito la busqueda
$TAMANO_PAGINA = 10;

//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

include("conexion.inc.php");
//miro a ver el número total de campos que hay en la tabla con esa búsqueda
$ssql = "select * from tabla";
$rs = pg_query($connection,$ssql);
$num_total_registros = pg_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);

//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";
pg_free_result($rs);
//construyo la sentencia SQL
$ssql = "select * from tabla order by id_registro limit ".$TAMANO_PAGINA. " OFFSET " .$inicio.";";

echo $ssql;
$rs = pg_query($connection,$ssql);
while ($fila = pg_fetch_object($rs)){
echo "<br> ".$fila->campo ;
}
//cerramos el conjunto de resultado y la conexión con la base de datos
pg_free_result($rs);
pg_close($connection);
//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='paginacion.php?pagina=" . $i . "'>" . $i . "</a> ";
}
}
?>

Espero que ayude algo :D
Daniel Carrero

Gaby

11/2/2007

Hola a todos, muy bueno el artículo!!

Sólo quería acotar que si lo implementamos con el paquete DB de PEAR seria algo asi como:

$query = "select * from pais";
$db->limitQuery ($query, $inicio, $cantidad);


Esta un toque mas copado hacerlo con PEAR..

http://pear.php.net/manual/es/package.database.db.php


Pruebenlo!!

Gaby

11/2/2007
Otra cosita..
Si tomamos los valores de un formulario a traves de POST, cuando hacemos las referencias a las paginas siguientes o anteriores debemos mandarles dentro de la referencia los valores que necesita para poder procesar la query nuevamente, incluyendo la query (si tuviesemos varias querys en nuestro script y entrase a una segun los parametros)..
Y debemos tener en cuenta que la primera vez que tomamos los valores los vamos a tomar con POST, pero las demas los obtenemos mediante GET..Por lo que podriamos hacer:

$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
// Tomo los valores mediante POST
$nombre = $_POST['nombre'];
} else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
// Tomo los valores mediante GET
$nombre = $_GET['nombre'];
$query = $_GET['query'];
}

Espero no haberlos mareado!!
Saludos..

Luis

18/5/2007
Estupendo artículo.
Pensé que me llevaría horas adaptarlo a mi página, pero solo me llevo 10 minutos. Increible. Muchas gracias.

cristina

02/11/2007
Sabes que me sirvio mucho este script aunq tuve que hacer algunas adaptaciones

Carlos

11/11/2007
Ojito con eso de pasar la condición como parámetro que luego te pueden inyectar sql y hacerte un destrozo.

santiago

11/10/2008
Hola gente, muy buena su pagina me sirve muchisimo para consultar codigos y cosas. Puntualmente, en este caso. Tuve un problema con este codigo q lo resolvi de una forma un poco...curiosa???.
En la seccion del codigo:

//miro a ver el número total de campos que hay en la tabla con esa búsqueda
$ssql = "select * from pais " . $criterio;
$rs = mysql_query($ssql,$conn);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);

se utiliza la funcion mysql_num_rows() para contar la cantidad de filas, o sea, registros insertados en la base de datos. Bueno, el tema q no me paginaba, no me paginaba, hasta q cambie esta sentecia por la otra funcion para contar en una base de datos, mysql_num_fields. Y listo, lo solucione. El tema q me surge una duda pq se supone q cada registro nuevo en una base de datos es una nueva fila y no un nuevo campo...

alderson

05/11/2008
hola a todos.

muy buen articulo, sin embargo el codigo funciona para una sola tabla, en mi caso estoy manejando varias tablas y no he podido realizar la consulta, aqui pongo mi consulta:
SELECT a.PLU, a.ProNombrComer, b.CatNombre, c.SubNombre, d.PrvNombre, e.VecFecha
FROM
elipsis_productos a, elipsis_categorias b, elipsis_subcategorias c, elipsis_proveedores d, elipsis_vencimientos e, elipsis_ventas, elipsis_prvproalm
WHERE
c.CatCodigo = b.CatCodigo AND a.SubCodigo = c.SubCodigo AND elipsis_ventas.VenCodigo = e.VenCodigo AND a.ProCodigo = elipsis_prvproalm.ProCodigo AND
elipsis_prvproalm.ProCodigo = elipsis_ventas.ProCodigo AND elipsis_prvproalm.PrvCodigo = d.PrvCodigo

damian

24/11/2008
La verdad es exelente y claro. Lo aplique al pie de la letra y funciono exactamente de la manera esperada. lo unico que tuve que cambiarle los estilos al numero de hoja donde se encuentra ya que me lo ponia del mismo color que el fondo. pero la funcionalidad es exelente. Ojala yo aprenda y pueda ayudar a la gente como me han ayudado a mi. Solo puedo ofrecer ayuda con 3dsmax si alguien lo necesita, en esto soy jr, ya sere semisr y luego sr jajajaj. Saludos y Muchisimas gracias. Felicitaciones a quien ha dictado este tutorial.
saludos
damian

Pablo

19/1/2009
EXCELENTE articulo.
Soy nuevo en PHP, vengo de ASP.NET donde esto de la paginación se hace solamente colocando un tag en la página.
Pero bueno, tenía experiencia del ASP regular que es muy parecido al PHP y nunca vi algo tan fácil en ASP como lo que se expuso aquí. Creo que lo que ayuda mucho es la función "LIMIT" de MySQL.

De cualquier forma el artículo está muy bien escrito, los felicito, y sobre todo, GRACIAS.

mirian

03/4/2009
Una consulta, tengo una base de datos de producto con diferentes tipos de categorias, al listarla selecciono un tipo de categoria y sobre esa consulta paginar, no perdiendo el tipo de categoria o criterio, alguien podría ayudarme....!!!

mirian

03/4/2009
Una consulta, tengo una base de datos de producto con diferentes tipos de categorias, al listarla selecciono un tipo de categoria y sobre esa consulta paginar, no perdiendo el tipo de categoria o criterio, alguien podría ayudarme....!!!

,,WI

26/4/2009
buen tutorial
muy bueno y bien explicado

Fer

06/5/2009
Todo Muy Bueno!, Pero Reporto un mal link?
En esta página cuyo url es:

http://www.desarrolloweb.com/articulos/1035.php

Al comienzo de este tutotial el link que dice:

"ver el resultado que vamos a conseguir en este artículo"

Da un erro de MySQL, es temporal ?, le están haciendo Mantenimiento al Web?.

¡Quiero contribuir.!

¡Muchas Gracias a Desarrolloweb !

pepemetalero

06/6/2009
Como ordeno la lista por nombre?
Adapte el script y funciona, todavia tengo que arreglar algunas cosas por que cuando cambio de pagina se va del marco de diseño. Lo mismo pasa cuando hago una busqueda. Pero lo que quiero saber es como ordeno por nombre los datos que tengo, por que salir salen, pero ordenados por su id.

//construyo la sentencia SQL
$ssql = "select * from grupos
JOIN archivos ON grupos.grp_id=archivos.img_id"
. $criterio . " limit " . $inicio . "," . $TAMANO_PAGINA; " order by grp_nombre";

//echo $ssql . "<p>";

$rs = mysql_query($ssql);

while ($fila = mysql_fetch_array($rs)){
?>
<table align="center">
<tr>
<td>
<a href="bandas.php?grp_id=<?php echo($fila[grp_id]); ?>&img_id=<?php echo $fila[img_id]; ?>" target="_blank">
<?php echo($fila[grp_nombre]); ?></a>
</td>
</tr>
</table>
<?php
}
//cerramos el conjunto de resultados y la conexión con la base de datos
mysql_free_result($rs);
echo mysql_error();
mysql_close();

echo "<br/><hr width=150 />";

//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='bandas_hordas.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}

//muestro un formulario para marcar el criterio?>
<div id="banda"><form action="bandas_hordas.php" method="get" id="form">
Que banda buscas?
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form></div>
</div>

Esa es una parte del codigo que adapte. No le hice demasiados cambios. Salvo a la consulta sql que le agregue el join por que tengo que relacionar estos datos con imagenes. Aclaro que la lista es de bandas de rock y cada una tiene un link a sus datos.

Espero encontrar respuesta.

Saludos!

Gonzalo

18/6/2009
Eliminar
Y si ha este ejercicio le quisiera agregar unos checks con la opcion de eliminar cada registro seleccionado.!

Antonio

04/7/2009
paginacion
Hola,
Tengo una base muy grande y quiero limitar el nº de páginas a 11 en total : 5 antes de la página seleccionada y 5 después de esta. Como puedo hacerlo ? Gracias.

Kathy

24/7/2009
Php
buen aporte.
<a href="http://www.developerusoft.com/" title="Aplicaciones Web" >Aplicaciones Web</a>

CamilongO

25/7/2009
Un detallito
Yo reemplazaría:
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

por:

if (empty($pagina)) {
$inicio = 0;
}
else
$inicio = ($pagina * $limite)+1;

¿Porqué?, simple, porque si $pagina es igual a 1, $inicio tomará el valor 0, por lo que habrá una página que mostrará dos veces el mismo contenido ya que comenzará en la misma parte.
Así nos evitamos darle un valor 1 a $pagina cuando esta esté vacía o sea 0, ya que se quita automáticamente la posibilidad de que la página sea 1.
La función empty retorna un valor 0 si es que no existe, asi que si el get lanza vacío, si o si, resultará, comprobado.
Ahora, un rooteo rápido, por ejemplo, si $limite es 10 elementos y el total es 25, significa que para la página 0, se presentarán los 10 primeros, para la página numerada como 1 serán desde el 11 -> (10*1)+1 hasta el 20 y asi...

Ahora, para el usuario que pedía hacer una paginación limitada, estuve desarrollando recién el código, te lo muestro y me dices si resulta, cualquier bug me mandas un correo a camilongo@live.cl, en este caso se muestran 3 links por página, ahi adaptala para 5:

//Incluímos el archivo de conexión
$limite= 10;

$pagina = $_GET["pagina"];
if (empty($pagina)) {
$inicio = 0;
$primera = true;
}
else
$inicio = ($pagina * $limite)+1;

//Obtenemos la información necesaria para paginar
$sql = "SELECT * FROM messages $condiciones";
$result = mysql_query($sql);
$tot_registros = mysql_num_rows($result);
$tot_paginas = ceil($tot_registros / $limite);

//Imprimimos los campos que requerimos
$sql = "SELECT * FROM messages $condiciones LIMIT $inicio,$limite ";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)){
//Aquí haces lo que quieras con el arreglo row
}
//Mostramos las páginas limitadas
$pag_ant = $pagina - 1;
$pag_sig = $pagina + 1;
$p = $pag_ant - 1;
//Esto solo se hará si hay mas de una página
if ($tot_paginas > 1){
//Si es la primera página
if($primera==true){
echo "<b>0</b>" . " ";
for($i = 1; $i <= 2; $i++)
if($i<=($tot_paginas-1))
echo "<a href='index.php?pagina=$i'>$i</a> ";
}
else{
//Ir a la primera página
echo "<a href='index.php?pagina=0'><<</a> ";
//Imprime desde la pagina anterior a la actual, hasta la siguiente.
for ($i=$pag_ant;$i<=$pag_sig;$i++){
//En el caso que estemos en la última página, se imprimen los links a las 3 ultimas páginas
if($pagina == ($tot_paginas-1)){
echo "<a href='index.php?pagina=$p'>$p</a>";
echo "<a href='index.php?pagina=$pag_ant'>$pag_ant</a> ";
echo "<b>$pagina</b>&nbsp;";
break;
}
else if ($pagina == $i)
echo "<b>$pagina</b>" . " ";
else
if($i<=($tot_paginas-1))
echo "<a href='index.php?&pagina=$i'>$i</a> ";
}
}
if($pagina<($tot_paginas-1))
//Si no estamos en la última página
//Ir a la última página
echo "<a href='index.php?pagina=".($tot_paginas-1)."'>>></a> ";
}
mysql_free_result($result);

Ojalá te sirva ;) Saludos

Fernando (7er)

28/7/2009
Ayuda !
Hola,, ley el articulo es muy util y me sirve pero la verdad no puedo lograr paginar los resulatdos,, m estoy volviendo loco!!

si me podrias dar una mano ,, t lo re agradezco el query original es este:


// Query
$rs = db_query("SELECT *
FROM smf_gallery_pic
ORDER BY ID_PICTURE DESC
LIMIT 15", __FILE__, __LINE__);
$context['imagegallery'] = array();
while ($row = mysql_fetch_assoc($rs))
$context['imagegallery'][] = array(
'filename' => $row['filename'],
'id_picture' => $row['ID_PICTURE'],
);
mysql_free_result($rs);
// Fin Query
foreach ($context['imagegallery'] as $imagegallery){
echo '<a class="highlightit" href="/imagenes/ver/'.$imagegallery[id_picture].'">
<img src="'.$imagegallery[filename].'" width="87" height="62"></img>
</a>';}

Gracias!!

facundo

29/7/2009
Agregue botones Anterior y Siguiente
Buenisimo el codigo! muy facil de adaptar.

En mi caso necesitaba navegar el paginador con los botones Anterior / Siguiente en vez de los numeritos de cada pagina, a continuacion les dejo el codigo:

<a <?php if($pagina!=1){?>href="index.php?pagina=<?php echo $pagina-1;?>"<?php }?>>Anterior</a> |PAGINA <?php echo $pagina;?>/<?php echo $total_paginas;?><a <?php if($pagina!=$total_paginas){?>href="index.php?pagina=<?php echo $pagina+1;?>"<?php }?>>Siguiente</a>

Espero que les sirva!

Saludos!!

Ale Rias

06/8/2009
Muchas gracias!
Buenisimo el código, haciendo las debidas modificaciones, se adapta a todo!!
Gracias de nuevo.

nestor raul

06/1/2010
tengo problemas no muestra los datos de una consulta en la base de datos
les agradezco su colaboracion ayendeme forfavor gracias
</div>
<body>
<table border="1" cellspacing=1 cellpadding=2 style="font-size: 8pt"><tr>
<td><font face="verdana"><b>Consultorio</b></font></td>
<td><font face="verdana"><b>Hora Cita</b></font></td>
<td><font face="verdana"><b>Fecha</b></font></td>
<td><font face="verdana"><b>Cedula</b></font></td>
<td><font face="verdana"><b>Primer Nombre</b></font></td>
<td><font face="verdana"><b>Segundo Nombre</b></font></td>
<td><font face="verdana"><b>Primer Apellido</b></font></td>
<td><font face="verdana"><b>Segundo Apellido Apellido</b></font></td>
<td><font face="verdana"><b>Sexo</b></font></td>
<td><font face="verdana"><b>Empresa</b></font></td>
<td><font face="verdana"><b>Copago</b></font></td>
<td><font face="verdana"><b>Nº contrato</b></font></td>
<td><font face="verdana"><b>Autorizacion</b></font></td>
</tr>

<?php
//Conexion con la base
$link=mysql_connect("localhost","funsecol_yeye","hijo1RAUL") or die ("no puedo conectar base de datos");
mysql_select_db("funsecol_paciente");
$id_cedula = $_POST["id_cedula"];
$result = mysql_query("SELECT *FROM pacientes INNER JOIN prestadores ON pacientes.id_cedula=prestadores.id_cedula",$link);
if ($row = mysql_fetch_array($result)){

do {
echo "<tr> ";
echo "<td>".$row["consultorio"]."</td> ";
echo "<td>".$row["horacita"]."</td> ";
echo "<td>".$row["fechacita"]."</td> ";
echo "<td>".$row["id_cedula"]."</td> ";
echo "<td>".$row["primernombre"]."</td> ";
echo "<td>".$row["segundonombre"]."</td> ";
echo "<td>".$row["primerapellido"]."</td> ";
echo "<td>".$row["segundoapellido"]."</td> ";
echo "<td>".$row["sexo"]."</td> ";
echo "<td>".$row["pagador"]."</td> ";
echo "<td>".$row["copago"]."</td> ";
echo "<td>".$row["ncontrato"]."</td> ";
echo "<td>".$row["autorizacion"]."</td> ";
echo "</tr> ";
} while ($row = mysql_fetch_array($result));
echo "<p>Resultados: $result</p>";
} else {
echo "¡ La base de datos está vacia !";
}


?>


</body>

</html>

alejandro

27/2/2010
paginacion
Por favor no me queda muy claro esto: .....
pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "
tambien pudiera hacer algo mas claro con respecto a la variable
&criterio que es lo que contendra
si es una instruccion de mysql que se llena en la caja osea en $txt_criterio, quiere decir que el cliente debe saber de esto
por otro lado deseo mas amplitud sobre los . de concatenacion porque cuando hay algo que va dentro y esta con apostofe o comillas la linea no funciona o hace cualquier otra cosa..... necesito aclarar esas cosas por favor

Saludos
Alejandro

nosferatu9256

17/3/2010
Felicidades, increibel articulo
En estos momentos estoy haciendo una pagina de soporte para mi compañia y buscaba algo para la paginación de los resultados y este aporte es bueno, lastima que ya no este el codigo en la sección de descargas.

Saludos.

kfn

17/4/2010
PROBLEMA AL DESCARGAR
NO SE PUEDE DESCARGAR EL ACHIVO

lilipato

31/5/2010
El archivo para descarga no existe
El archivo no se puede descargar, parece que ni esta publicado porque no deja ver ni el nombre

paco

19/6/2010
paginacion de un carrito de compras
hola tengo un carrito de compras y queiro que cuando me muestre los articulos existentes llegue a un cierto limite digamos de 6 ariticulos, si se pasa de ese numero de articulos que me mande a otra pagina.. por favor necesito ayuda les agradeceria si me pudieran ayudar

Olifex

16/7/2010
Helllllppppp
Hola, estoy adentrandome en los terrenos de PHP y estas cosas de BD, y tengo un promer problemita, no identifico bien la forma de como poder sacar los datos de una BD, mostrarlos en cajas de texto modificar y volver a guardarlos esto es una simple modificacion de datos ,espero y me puedan ayudar, gracias en verdad

carolan

27/7/2010
LAS PAGINAS CUANDO SE CREAN
Entiendo como se establecen la cantida de paginas a visualizar, pero en que momento se crean esas paginas a las que les hacemos el link. Acaso no tienen que contener un codigo cada una de ellas para seguir mostrando datos desde el registro que quedamos viendo en la primer pagina?. Como hago o como es?

carolan

27/7/2010
CREAR PAGINAS HTML A TRAVES DE PHP
HAY ALGUNA FORMA DE CREAR PAGINAS HTML MEDIANTE PHP Y HACERLAS QUE SE EJECUTEN. GRACIAS

rufus

03/9/2010
no me funciona el script
me salen muchos errores dos de ellos que no me encuentra la variable $_GET['pagina'] y no me puedo descargar el script por que no aparece para poder descargarlo asi que no se el orden en el que van cada uno de los trozos del script........

AurelianoBabilonio

13/9/2010
Funciona con mas de 10 registros
Adapte el codigo a un codigo procedural y solo funciona con mas de 10 registros.

Franz1628

11/11/2010
Con este codigo
Con este codigo puedes cambiar la base datos y la tabla

y te muestra todos los registros con todos los campos de la tabla en una tabla
y con enlaces para ver siguientes registros y anteriores registros
Saludos

<?php
if (!$_GET) {
$numRegistros = 0;
} else {
$numRegistros = $_GET['numRegistros'];
}

$basedatos = 'information_schema';
$tabla = ' REFERENTIAL_CONSTRAINTS';

$cn = mysql_connect("localhost", "root", "");
if (!$cn) {
echo "No se pudo conectar : " . mysql_error();
exit;
}
$db = mysql_select_db($basedatos);
if (!$db) {
echo "No se pudo seleccionar base de datos : " . mysql_error();
exit;
}

$consulta = "SELECT * FROM " . $tabla . " LIMIT " . $numRegistros . ",20";
$resultado = mysql_query($consulta);
$numRows = mysql_num_rows($resultado);
$cont = 0;
echo "<table>";
while ($row = mysql_fetch_assoc($resultado)) {
echo "<tr>";
if ($cont == 0) {
foreach ($row as $key => $value) {
echo "<th>" . $key . "</th>";
}
echo "</tr>";
$cont++;
}
foreach ($row as $key => $value) {
echo "<td>" . $value . "</td>";
}
echo "</tr>";
}
echo "</table>";
$numRegistros += 20;

if ($numRegistros > 20) {
$numRegistros2 = $numRegistros - 40;
echo "<a href='paginacion.php?numRegistros=" . $numRegistros2 . "'>20 registros anteriores</a>";
}
echo "***";
if (($numRegistros >= 20) && ($numRows == 20)) {
echo "<a href='paginacion.php?numRegistros=" . $numRegistros . "'>20 registros siguientes</a>";
}
?>

franz1628

11/11/2010
buen codigo
En este codigo puedes cambiar la base de datos y la tabla
muestra todos los registros de la tabla con todos los campos
y muestra enlaces de siguientes registros y anteriores registros


<?php
if (!$_GET) {
$numRegistros = 0;
} else {
$numRegistros = $_GET['numRegistros'];
}

$basedatos = 'information_schema';
$tabla = ' REFERENTIAL_CONSTRAINTS';

$cn = mysql_connect("localhost", "root", "");
if (!$cn) {
echo "No se pudo conectar : " . mysql_error();
exit;
}
$db = mysql_select_db($basedatos);
if (!$db) {
echo "No se pudo seleccionar base de datos : " . mysql_error();
exit;
}

$consulta = "SELECT * FROM " . $tabla . " LIMIT " . $numRegistros . ",20";
$resultado = mysql_query($consulta);
$numRows = mysql_num_rows($resultado);
$cont = 0;
echo "<table>";
while ($row = mysql_fetch_assoc($resultado)) {
echo "<tr>";
if ($cont == 0) {
foreach ($row as $key => $value) {
echo "<th>" . $key . "</th>";
}
echo "</tr>";
$cont++;
}
foreach ($row as $key => $value) {
echo "<td>" . $value . "</td>";
}
echo "</tr>";
}
echo "</table>";
$numRegistros += 20;

if ($numRegistros > 20) {
$numRegistros2 = $numRegistros - 40;
echo "<a href='paginacion.php?numRegistros=" . $numRegistros2 . "'>20 registros anteriores</a>";
}
echo "***";
if (($numRegistros >= 20) && ($numRows == 20)) {
echo "<a href='paginacion.php?numRegistros=" . $numRegistros . "'>20 registros siguientes</a>";
}
?>

eltiopep

29/11/2010
Paginacion de resultados desde un formulario
Hola compañeros,

A continuación os explico el problema q me lleva de cabeza...

Resulta que tengo un formulario tal que así:

<form name="form1" method="post" action="resultados.php">
<table width="70%" border="0" cellpadding="5" cellspacing="5">
<tr>
<td bgcolor="#CCCCCC">
<label><input name="compra" type="radio" value="si" checked>compra</label></td>
<td bgcolor="#CCCCCC"><strong>Tipo de inmueble:</td>
</tr>
<tr>
<td bgcolor="#CCCCCC">
<label><input type="radio" name="compra" value="no">alquiler</label></td>
<td bgcolor="#CCCCCC">
<select name="tipo" id="tipo">
<option value="no">Seleccionar tipo</option>
<option value="Promocion">promociones</option>
<option value="Piso">pisos</option>
<option value="Casa">casas</option>
<option value="Unifamiliar">unifamiliares</option>
<option value="Chalet">chalets</option>
<option value="Nave">naves</option>
<option value="Solar">solares</option>
<option value="Adosado">adosados</option>
</select>
</td></tr>
<tr><td colspan="2"><input type="submit" name="Submit" value="Buscar">
</div></td>
</tr>
</table>
</form>

Pues bien cuando le paso los resultados por el metodo [B]POST[/B] me los guardo en variables en la pagina [I]resultados.php[/I]

$tipo=$_POST['tipo'];
$venta=$_POST['compra'];

hago la consulta dependendiendo de lo que ha recibido del formulario y tambien le aplico la orden [B]LIMIT[/B] para que me muestre cierta cantidad de registros;

if ($poblacion<>"no") {
if ($venta=="si") {
$sql="SELECT * FROM pisos
WHERE ((tipo= "$tipo") AND (venta="$Venta")
) ORDER BY codigo ASC" LIMIT $inicio, $registros;
}

La primera pagina lo hace bien xo en cuanto pasa a la segunda me pone que las variables que obtiene del form está "[I]undefined[/I]", que supongo que querra decir, vacias.

Alguna idea?

Gracias

León

29/5/2011
url amigable para paginacion de resultados
Hola muy interesante este script de paginación php.

Solo una cosa sería muy útil que alguien se preocupara de incluir los archivos .htaccess en sus scripts de paginacion.

Espero en el futuro pongan algun articulo php de paginacion con .htaccess.

muchas gracias.

angel_oviedo-470687

17/6/2011
paginacion con php
este articulo esta genial, pero k pasa si tengo dos columnas de registros a mostras y necesito paginar los resultados, algo asi

reg n | reg n
reg n | reg n

<primero | <<anterior | 3 | 4 | 5 | 6 | siguiente>> | ultimo>

n= a numero de registro indistito si es par o impar.


alguien me podria dar una idea?

ya tengo el codigo k muestra los registros pero todos a la vez sin paginacion aki c los muestro

<form name="form" action="a_2columns.php" method="get">
<div align="center"><span class="font_small">
<strong>b&uacute;squedas r&aacute;pidas:</strong> </span>
<input type="text" class="mayus" name="q" />
<span class="font_small">&nbsp;&nbsp;
</span>

<input type="submit" name="Submit" value="Search" />

</span><a href="http://www.libreria-morelos.com.mx/buscador_avanzado.htm">Ir al buscador avanzado</a></div></form>

<?php
$var = @$_GET['q'] ;
$trimmed = trim($var); //trim whitespace from the stored variable
if ($trimmed == "")
{
echo "<DIV align="center">PORFAVOR INGRESE UN PARAMETRO PARA SU CONSULTA</div>";
exit;
}
if (!isset($var))
{
echo "<p>We dont seem to have a search parameter!</p>";
exit;
}

include('settings.php');

$var = @$_GET['q'] ;
$trimmed = trim($var); //trim whitespace from the stored variable

$connection = mysql_pconnect($db_host, $db_user, $db_pw) or trigger_error(mysql_error(),E_USER_ERROR);

?>
<?php
mysql_select_db($db, $connection);

$_pagi_sql = "select small, titulo, autor, precio, id from libro1 where titulo like "%$trimmed%" or autor like "%$trimmed%" order by titulo";
$_pagi_cuantos = 6;

$resultado = mysql_query($_pagi_sql);
$rows = mysql_num_rows($resultado);
$media = ($rows/2);

$limite_columna1 = sprintf("%s LIMIT %d, %d", $_pagi_sql, 0, $media);
$resultados1 = mysql_query($limite_columna1, $connection) or die(mysql_error());
$columna1 = mysql_fetch_assoc($resultados1);
$limite_columna2 = sprintf("%s LIMIT %d, %d", $_pagi_sql, $media, $media);
$resultados2 = mysql_query($limite_columna2, $connection) or die(mysql_error());
$columna2 = mysql_fetch_assoc($resultados2);
?>

<table width="931" align="center">
<?
?>

<tr>
<td width="490">
<table width="465" border="0" cellspacing="0" cellpadding="0">
<?php do { ?>
<tr>
<td width="120" rowspan="4"><div style="padding:30px;">
<?php echo $columna1['small']; ?></div>
</td>
<td width="294"><?php echo $columna1['titulo']; ?></td>
</tr>
<tr>
<td><?php echo $columna1['autor']; ?></td>
</tr>
<tr>
<td>ID :<?php echo " ". $columna1['id']; ?></td>
</tr>
<tr>
<td>PRECIO :<?php echo " ". $columna1['precio']; ?></td>
</tr>
<?php } while ($columna1 = mysql_fetch_assoc($resultados1)); ?>
</table>
</td>
<td width="429">
<table width="465" align="center" border="0" cellspacing="0" cellpadding="0">
<?php do { ?>
<tr>
<td width="120" rowspan="4"><div style="padding:30px;"><?php echo $columna2['small']; ?></div></td>
<td width="294"><?php echo $columna2['titulo']; ?></td>
</tr>
<tr>
<td><?php echo $columna2['autor']; ?></td>
</tr>
<tr>
<td>ID :<?php echo " ". $columna2['id']; ?></td>
</tr>
<tr>
<td>PRECIO :<?php echo " ". $columna2['precio']; ?></td>
</tr>
<?php } while ($columna2 = mysql_fetch_assoc($resultados2)); ?>
</table>
</td>
</tr>
</table>

AlexMalg

05/8/2011
Logre hacerlo casi todo =P
Hola, casi logre hacer que funcionara, acomode todo para que se vea como en cualquier buscador.

Solo me falta poner el LIMIT, pero cuando lo agrego al lado de FROM, así:
FROM mitabla LIMIT 1, 10

me tira error de sintaxis, alguien sabe como hacer funcionar el limite??

Gracias

Jhonattan

05/8/2011
Agradecimiento
Muchas Gracias, muy clara la explicacion, lo adapte con un MVC (MODELO VISA CONTROLADOR) y perfecto.

Damian

10/8/2011
Mil gracias!
La verdad es que sos un capo, me fue de mucha ayuda tu codigo....es genial!
Mi tesis y yo te lo agradecemos!

miguel_sanchez-591646

18/8/2011
controlar el numero de paginas
si hay 2000 paginas despues de realizar la busqueda como se puede controlar el numero de paginas que queremos mostrar

Esteban

19/8/2011
Sensibilidad a Mayúsculas/minúsculas
El código es muy bueno y sencillo. Me ha ayudado mucho en mi programación pero tengo un problema que no sé como resolver:

Al hacer, por ejemplo, una búsqueda con el término 'Título', no me tiene en cuenta los registros en los que aparece 'título', con minúsculas, y viceversa. He estado investigando y se supone que las consultas en MySQL no deberían distinguir por defecto entre mayúsculas y minúsculas.

¿Puede deberse a la configuración local de MySQL? ¿Puede deberse al motor de búsqueda seleccionado para la base de datos? ¿Pude deberse a algún parámetro introducido a la hora de crear la columna?

Agradezco ayuda sobre el tema.

Nasio

28/10/2011
Ampliación código
A continuación les muestro un código que limita el número de páginas a mostrar... espero que les sirva.


//--muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1)
{
//Defino el numero de resultados a mostrar a partir de la página
$num_resultados = 9;
//Calculo el mímino
$min = $pagina;
$min-=$num_resultados;
if($min < 1)
$min = 1;

//Calculo el máximo
$max = $pagina;
$max+=$num_resultados;
if($max > $total_paginas)
$max = $total_paginas;


for ($i=$min;$i<=$max;$i++)
{
if ($pagina == $i)
//--si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
{
//--si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='index.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}
print("<br><br>");
print("</div>");
}
//--

Rokus

11/12/2011
Es una pijada pero...
Bueno, pues es una pijada, pero creo que la parte

//Limito la busqueda
$TAMANO_PAGINA = 10;

//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

Podría ser un poco más conciso e igual de funcional si simplemente lo dejaramos así

//Limito la busqueda
$TAMANO_PAGINA = 10;

//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) $pagina=1;

$inicio = ($pagina - 1) * $TAMANO_PAGINA;

Puesto que $inicio se calcula según la página, y lo único que es necesario es darle a página el valor 1 si no nos viene dada por GET

robert

04/1/2012
pregunta sobre la paginacion?
Ahora les hago una pregunta, supongase que tengo una base de datos con 15000 registros y quiero que el tamaño de la pagina sea de 10, el codigo mostrado en este foro me lo hace, pero como le indico yo que solo debe mostrar los numeros del 1 al 10 tipo google, si no me entendieron aqui les va el ejmplo mas grafico:
Yo lo quiero asi;
1 2 3 4 5 6 7 8 9 10 Siguiente
que solo muestre las primeras 10 que no las muestre todas como les dije son 15000 registro y la paginacion es de 10 cuantas paginas pueden salir;
algo asi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 y bueno pare de contar.

ra120354

12/2/2012
El código me da errores ¿Porque?
He puesto todo el código con copiar y pegar para ver si habia cometido un error pero veo que esta bien puesto a pesar de ello me da varios errores por favor decirme que es lo que esta mal.

En la linea 10 he cambiado el código porque me daba tambien un error pero parece ser que con el cambio lo he subsanado.

Errores que me dan:
Linea 20: Notice: Undefined variable: criterio in C:wampwwwActividadesHosteleriaPruebaLocal.php on line 20
Linea 32: Notice: Undefined variable: criterio in C:wampwwwActividadesHosteleriaPruebaLocal.php on line 32
Linea 49: Notice: Undefined variable: txt_criterio in C:wampwwwActividadesHosteleriaPruebaLocal.php on line 49
Linea 55: Notice: Undefined index: criterio in C:wampwwwActividadesHosteleriaPruebaLocal.php on line 55

Este es el código que he puesto:

<?php
$conexion = mysql_connect('localhost', 'root', '');
mysql_select_db('general');
?>

<?php
//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la página a mostrar y el inicio del registro a mostrar
$pagina = isset($_GET["pagina"])? $_GET["pagina"]: ''; // La he cambiado y ya no me da error
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

//miro a ver el número total de campos que hay en la tabla con esa búsqueda
$ssql = "select * from Actividades " . $criterio;
$rs = mysql_query($ssql,$conexion);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);

//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";

//construyo la sentencia SQL
$ssql = "select * from actividades " . $criterio . " limit " . $inicio . "," . $TAMANO_PAGINA;
$rs = mysql_query($ssql);
while ($fila = mysql_fetch_object($rs)){
echo $fila->NombreComer . "<br>";
}
//cerramos el conjunto de resultado y la conexión con la base de datos
mysql_free_result($rs);
mysql_close($conexion);

//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='index.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}

//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
$criterio = " where NombreComer like '%" . $txt_criterio . "%'";
}

?>
<form action="PruebaLocal.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>

HERMAN

11/9/2012
Simple y efectivo
Como debe ser el código, simple y efectivo.
Gracias

branny2010

09/1/2013
PAGINACION
Excelente tutorial yo también hice una contribución de una clase en php para la paginación de resultados espero que sea de utilidad.

http://www.web-design.cl/PaginacionBH/

TinEe varias opciones configurables :)

pablo

29/1/2013
excelente!
despues de 10 años de publicado el articulo, sigue sirviendo!!! excelente me vino al pelo!!!!

mar

08/3/2013
DUDA
HOLA ESTOY DISEÑANDO UNA PAGINA ES SENCILLA SOLO ES PARA EL REGISTRO DE DATOS PERO LA INTRUCCION QUE TENGO INSERTAR LOS REGISTROS NO LO HACE ME PODRIAS DECIR SI TENGO ALGO MAL ES LA SIGIENTE:

$sql1="insert into evuacion(ficha_alumno, resp1, resp2, resp3, resp4, resp5, resp6, resp7, otro_sem, resp9, plan, vocacion, ambiente, empleo, desempeño, csh1, csh2, csh3, csh4, csh5, csh6, mate1, mate2, mate3, mate4, mate5, cb1, cb2, cb3, cb4, cb5, tic1, tic2, tic3, tic4, tic5, cti1, cti2, cti3, cti4, cti5, cti6) values('$mat', '$resp1', '$resp2', '$resp3', '$resp4', '$resp5', '$resp6', '$resp7', '$otro_sem', '$resp9', '$plan', '$voca', '$ambi', '$empl', '$dese', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '');";

EN VERDAD AGRADECERIA SUS COMENTARIOS AL RESPECTO

sub_87

16/4/2013
prioridad en la paginacion
como hago para darle prioridad a los resultados
para que se muestre primero la categoria paga 3 paga 2 paga 1 y despues los resultados que le siguen.
Gracias

olpo18

04/5/2013
Interesante
Muy interesante el articulo, como siempre Desarrollo Web con excelentes aportes, Gracias

microcomputer

26/6/2013
Problema con php y mysql_conect()
Buenas, el codigo me falla en mysql_conect() la pantalla se queda en blanco.

Pruebo a mos trar un echo despues del metodo mysql_conect() y no se imprime.

No encuentro la forma de ver el log de php, trabajo sobre ubunto 10.

Apache, php y mysql funcionan...

Alguien me puede ayudar ? ya no se q mas hacer

Pedro Rojas

05/10/2013
Paginacion con PHP y Msql
Saludos, quisiera saber como hacer con esta paginacion.
tengo un problema a la hora de paginar ya que para mostrar el resultado me bota un error, sucede que hay una variable que recoge datros mediante el metodho post y para el primer resultado va bien pero cuando paso a la segunda pagina me dice que esta indefinido (UNDEFINED:INDEX) quien puede ayudarme por favor se lo agradeceria...

Rafael

03/2/2014
Posible solución
Para aquellos que han tenido problemas por que la variable pagina no estaba definida (Sale un warning durante la ejecución), les recomiendo que usen la función isset. Más información en:

http://es1.php.net/isset

Un saludo y muchas gracias por el código, muy bueno!

luis

15/10/2014
me parese bien que pueda expresarme por aqui
esta informacion es un asco.... porque no crean una partida de counter strike para caerles a plomo a todos ustedes cuerda de perdedores <br> echo "diablos";