Anda di halaman 1dari 48

ej.

css

Buscar
Login | Registro

DesarrolloWeb.com > Manuales > Taller de PHP

PaginacinderesultadosconPHPy
MySQL
Por Miguel Angel Alvarez

Seguira@midesweb

23 de enero de 2003 66 Comentarios Scripts en PHP

Muestra de tcnica de paginacin, para mostrar en distintas pginas 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
pgina web registros de una base de datos, se
deberan mostrar demasiados registros como para
colocarlos todos en una nica pgina. En estas
ocasiones se suele paginar los resultados, quizs
cientos, en distintas pginas con conjuntos de
registros mucho menos numerosos. Por ejemplo,
podramos presentar los resultados en pginas de
10 elementos o 20, dependiendo de nuestras
intenciones y el tipo de datos que se estn
presentando. Este efecto lo habremos podido
observar repetidas veces en los buscadores.
Podramos desarrollar distintos scripts para paginar resultados en PHP. En este artculo
vamos a explicar una posibilidad basada en la utilizacin de una base de datos MySQL y

sentencias SQL a las que indicaremos el conjunto de registros que queremos mostrar en cada
pgina. Los enunciados SELECT del lenguaje SQL, en la base de datos MySQL y otras muchas,
tienen una clusula llamada LIMIT, con la que podemos indicar los registros a mostrar, por
ejemplo, 10 registros empezando por el registro 180.
select*frompaislimit180,10

Como vemos LIMIT tiene dos argumentos, el primero es el registro por el que empezar los resultados y el
segundo el nmero de resultados a recoger en el conjunto de registros resultante.
As pues, en este ejercicio de paginacin la clusula LIMIT ser la clave para mostrar los registros en grupos
del tamao deseado.

Cdigo de paginacin

Hay varias partes del cdigo que servirn especficamente para implementar la paginacin. Lo
primero es saber qu pgina se desea mostrar. En principio se mostrara la primera pgina de
resultados, pero si un visitante selecciona con los enlaces de abajo otra pgina distinta de la
primera, habra que mostrarla tambin. El ndice de la pgina a mostrar, si es que no es la
primera vez que se accede, se recibe por parmetro en la URL.
//Limitolabusqueda
$TAMANO_PAGINA=10;
//examinolapginaamostraryeliniciodelregistroamostrar
$pagina=$_GET["pagina"];
if(!$pagina){
$inicio=0;
$pagina=1;
}
else{
$inicio=($pagina1)*$TAMANO_PAGINA;
}

Estoy definiendo el tamao de la pgina. Luego procuro recibir la pgina por parmetro en la URL. Si no se
recibi nada, se entiende que la pgina 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 habamos
recibido algo como pgina, calculo el inicio con una simple multiplicacin de la pgina a mostrar por el
tamao_ de pgina definido antes.
Es habitual en estas pginas de resultados informar un poco sobre la cantidad de registros encontrados y
los datos de la pgina que estamos viendo. Estos datos se pueden obtener con unas sencillas operaciones.
//miroaverelnmerototaldecamposquehayenlatablaconesabsqueda
$ssql="select*frompais".$criterio;

$ssql="select*frompais".$criterio;
$rs=mysql_query($ssql,$conn);
$num_total_registros=mysql_num_rows($rs);
//calculoeltotaldepginas
$total_paginas=ceil($num_total_registros/$TAMANO_PAGINA);
//pongoelnmeroderegistrostotal,eltamaodepginaylapginaquesemuestra
echo"Nmeroderegistrosencontrados:".$num_total_registros."<br>";
echo"Semuestranpginasde".$TAMANO_PAGINA."registroscadauna<br>";
echo"Mostrandolapgina".$pagina."de".$total_paginas."<p>";

Nota: Este cdigo podra mostrar una informacin como esta:

Nmero de registros encontrados: 256


Se muestran pginas de 10 registros cada una
Mostrando la pgina 19 de 26
Lo primero es hacer una bsqueda en la base de datos por el criterio que se est utilizando
para saber cuantos registros se obtienen en total sin la paginacin (luego veremos de donde
sale la variable $criterio).
A continuacin puedo calcular el nmero total de pginas de resultados que genera la bsqueda. La
funcin ceil() redondea nmeros en coma flotante o reales hacia arriba, as pues, devuelve el entero por
arriba ms prximo.
Las siguientes lneas, donde se utiliza echo, tienen como objeto mostrar los datos en la pgina.
Ahora veremos el cdigo que realiza la bsqueda en la base de datos, extrayendo y mostrando solamente
aquellos registros que corresponden con la pgina a mostrar.
//construyolasentenciaSQL
$ssql="select*frompais".$criterio."limit".$inicio.",".$TAMANO_PAGINA;
$rs=mysql_query($ssql);
while($fila=mysql_fetch_object($rs)){
echo$fila>nombre_pais."<br>";
}
//cerramoselconjuntoderesultadoylaconexinconlabasededatos
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 vaca. Tambin se utiliza LIMIT, como ya se indic:
poniendo los valores definidos antes como inicio y tamao de pgina.

poniendo los valores definidos antes como inicio y tamao de pgina.


El resto es un recorrido tpico por un conjunto de registros, en este caso los pases 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 accin ms con la base de datos, as que podemos cerrar el
resultado de la bsqueda y la conexin con la base de datos.
Ahora podemos ver el cdigo que muestra en la parte de abajo los numeritos de todas las pginas que
genera la bsqueda, para que el visitante pueda seleccionar una pgina y moverse entre los resultados.
//muestrolosdistintosndicesdelaspginas,siesquehayvariaspginas
if($total_paginas>1){
for($i=1;$i<=$total_paginas;$i++){
if($pagina==$i)
//simuestroelndicedelapginaactual,nocolocoenlace
echo$pagina."";
else
//sielndicenocorrespondeconlapginamostradaactualmente,colocoel
enlaceparairaesapgina
echo"<ahref='index.php?pagina=".$i."&criterio=".$txt_criterio."'>".$i
."</a>";
}
}

La primera lnea comprueba si realmente hay varias pginas de resultados, pues, si no es as no tendra que
mostrar nada. Si efectivamente hay varias pginas para mostrar se recorren todas y para cada una se
muestra el ndice.
El ndice a mostrar puede que sea el de la pgina que se est visualizando en ese momento y en ese caso
simplemente podramos el numerito, pero no el enlace para ir a ese documento, pues es en el que
estamos. En caso de que sea una pgina de resultados distinta, se muestra un enlace para moverse a dicha
pgina, donde se incluye pasando por parmetro tanto el ndice de la pgina que se desea ver como el
criterio de la bsqueda que se estaba realizando.
Hasta aqu el cdigo imprescindible para la paginacin. Aunque aun vamos a ver alguna cosa ms.

Cdigo de bsqueda

Para hacer un taller un poco ms completo y poder ofrecer una pgina de muestra con
funcionalidades de bsqueda, hemos creado la posibilidad de aadir un criterio para
encontrar tan slo elementos relacionados con l. Despus de todo, los cdigos de paginacin
suelen utilizarse en situaciones en las que se estn realizando bsquedas en la base de datos.
El criterio se podr definir en una caja de texto y habr un botn de buscar que llame a la misma pgina
pero pasando el texto con las palabras a buscar en la base de datos.

<formaction="index.php"method="get">
Criteriodebsqueda:
<inputtype="text"name="criterio"size="22"maxlength="150">
<inputtype="submit"value="Buscar">
</form>

Nos fijamos que el mtodo por el que pasamos este formulario es GET. Esto es debio a que no queremos
liar el cdigo y como estamos pasando ya por GET el criterio en otros sitios, utilizamos el mismo mtodo.
El formulario lo colocaremos debajo, pero habr tambin un trozo de cdigo que recoger la informacin y
la tratar para adaptarla a una sentencia de bsqueda en la base de datos. Este cdigo lo colocaremos en
la parte de arriba de la pgina.
//inicializoelcriterioyrecibocualquiercadenaquesedeseebuscar
$criterio="";
if($_GET["criterio"]!=""){
$txt_criterio=$_GET["criterio"];
$criterio="wherenombre_paislike'%".$txt_criterio."%'";
}

Se inicializa el criterio a una cadena vaca y luego se comprueba si se ha recibido algo por mtodo GET en el
campo criterio. Si era as se puede recoger el texto recibido y construir el criterio, que no es ms que una
clusula WHERE donde se buscan elementos, en este caso pases, cuyo nombre contenga por algn 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 Programacin 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. Seran unas parecidas a estas.
//conectoconlabasededatos
$conn=mysql_connect("servidor","usuario","password");
mysql_select_db("nombre_bbdd",$conn);

Referencia: A posteriori, hemos recibido un cdigo para paginacin realizado por un lector, que nos lo ha mandado
para complementar este artculo. No podemos ofrecer los crditos porque hemos perdido su comunicacin, as que
si alguien lo reivindica colocaremos la autora gustosamente.

Asmismo, disponemos de otro artculo que trata la paginacin de resultados en PHP con un enfoque un
poco distinto. El artculo viene con el script explicado y todo lo necesario para ponerlo en marcha:
Paginacin PHP y MySQL. Ejemplo 2.

Recomendamos tambin la lectura del artculo Paginator, script para paginar resultados con PHP y
MySQL. Es un texto que presenta un interesante script en espaol y gratuito para realizar la paginacin de
resultados cmodamente.

Autor

Miguel Angel Alvarez

Seguira@midesweb

Miguel es fundador de DesarrolloWeb.com y la plataforma de formacin online


EscuelaIT. Comenz en el mundo del desarrollo web en el ao 1997,
transformando su hobby en su trabajo.

Subir

Manual
Taller de PHP
validar email en PHP

Paginacin con PHP y MySQL. Ejemplo 2

Compartir
8

Tweet

Compartir

26
Recomendar

Comentarios

23

Comentarios
Enviar un comentario al artculo

Freddy
Tengo un par de dudas, a ver si me las pueden responder:

30/1/2003

1. Qu es $_GET?
2. De dnde sale $pagina?
RESPUESTA
$_GET es un array asociativo que contiene todas las variables que se reciben por el mtodo GET, es
decir, por la URL. Se habla de ello en el artculo Pasar variables por la URL
$pagina viene de los enlaces de la parte de abajo, que muestran los ndices de las pginas de resultados
y permiten seleccionar aquella que se desea ver. Pasan a la pgina la variable por URL y con eso de
$_GET la recogemos. El trozo de cdigo donde se generan los ndices est indicado en el artculo. De
todos modos transcribo aqu un trozo para que se pueda identificar:
//sielndicenocorrespondeconlapginamostradaactualmente,colocoelenlacepara
iraesapgina
echo"<ahref='index.php?pagina=".$i."&criterio=".$txt_criterio."'>".$i."
</a>";

Marcar como spam

/r0d
Chevere tutorial.. que interesante tambien esta en www.devshed.com, pero en ingles..

13/6/2003

chau

Marcar como spam

Jos Pino
Hola, este articulo me sirvio muchisimo para hacer una paginacin 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","");

10/9/2004

$TAMANO_PAGINA=20;

$pagina=$_GET["pagina"];
if(!$pagina){
$inicio=0;
$pagina=1;
}
else{
$inicio=($pagina1)*$TAMANO_PAGINA;
}
//Importantehaceelqueryordenadoysinlimit
$ssql="select*fromdata_userORDERbynombre";
$rs=sybase_query($ssql,$conn);
$num_total_registros=sybase_num_rows($rs);

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

echo"Nmeroderegistrosencontrados:".$num_total_registros."<br>";
echo"Semuestranpginasde".$TAMANO_PAGINA."registroscadauna<br>";
echo"Mostrandolapgina".$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,pasolosdatosextraidosenelqueryaunarreglo
//sisonmscamposcomonombre,apellido...
//sepuedetrampiaras:$arreglo[]="$fila>nombre,$fila>numero_tlf";

foreach($arregloas$idarray=>$nombre){
//aquisehacelaverifiacinquefuncionacomoellimit

//aquisehacelaverifiacinquefuncionacomoellimit

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"<ahref='dbd2.php?pagina=".$i."'>".$i."</a>";
}
}
}
//Jospino,cualquiercosaescribanamrpinoc79@hotmail.com///
?>

Jos Pino Mrida - Venezuela


Marcar como spam

Simae
Me ha aydado mucho, la verdad es que sorprende la simplicidad y lo bien que funciona.

28/10/2004

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"];
//elcriterioinitembienloutilizoparahacerlosenlacesalaspginas
$txt_criterio=str_replace("*","'",$txt_criterioini);
$criterio="".$txt_criterio."";
}

El enlace a las pginas 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> ';

echo '<a href="formres.php?pagina=' . $i . '&criterios=' . $txt_criterioini . '">' . $i . '</a> ';


;)
Marcar como spam

Matias
Quiero agregar q si solo se quieren contar la cantidad de registros q cumplen un criterio

13/12/2004

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
Marcar como spam

krypto84sv
<?
mssql_select_db("lib");
//Declaramos el tamao 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 condicin 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++;
}

29/8/2005

}
$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
?>
Marcar como spam

mario castillo
esta funcion es para conectarse nativamente a una base de datos mssql,

15/11/2005

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

//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>";

}
Marcar como spam

J. Pedro
Muy bueno el cdigo, me ha servido de mucha ayuda. Gracias

11/8/2006

Marcar como spam

Daniel Carrero
Tengo un ejemplo en Postgresql que puede ayudar:
<?
//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la pgina a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

28/9/2006

include("conexion.inc.php");
//miro a ver el nmero total de campos que hay en la tabla con esa bsqueda
$ssql = "select * from tabla";
$rs = pg_query($connection,$ssql);
$num_total_registros = pg_num_rows($rs);
//calculo el total de pginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);
//pongo el nmero de registros total, el tamao de pgina y la pgina que se muestra
echo "Nmero de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran pginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la pgina " . $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 conexin con la base de datos
pg_free_result($rs);
pg_close($connection);
//muestro los distintos ndices de las pginas, si es que hay varias pginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el ndice de la pgina actual, no coloco enlace
echo $pagina . " ";
else
//si el ndice no corresponde con la pgina mostrada actualmente, coloco el enlace para ir a esa pgina
echo "<a href='paginacion.php?pagina=" . $i . "'>" . $i . "</a> ";
}
}
?>
Espero que ayude algo :D

Daniel Carrero
Marcar como spam

Gaby
11/2/2007
Hola a todos, muy bueno el artculo!!
Slo quera 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!!
Marcar como spam

Gaby
Otra cosita..

11/2/2007

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 {

} else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
// Tomo los valores mediante GET
$nombre = $_GET['nombre'];
$query = $_GET['query'];
}
Espero no haberlos mareado!!
Saludos..
Marcar como spam

Luis
Estupendo artculo.

18/5/2007

Pens que me llevara horas adaptarlo a mi pgina, pero solo me llevo 10 minutos. Increible.
Muchas gracias.
Marcar como spam

cristina
Sabes que me sirvio mucho este script aunq tuve que hacer algunas adaptaciones

02/11/2007

Marcar como spam

Carlos
Ojito con eso de pasar la condicin como parmetro que luego te pueden inyectar sql y

11/11/2007

hacerte un destrozo.
Marcar como spam

santiago
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 nmero total de campos que hay en la tabla con esa bsqueda
$ssql = "select * from pais " . $criterio;
$rs = mysql_query($ssql,$conn);
$num_total_registros = mysql_num_rows($rs);

11/10/2008

//calculo el total de pginas


$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...
Marcar como spam

alderson
hola a todos.

05/11/2008

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
Marcar como spam

damian
La verdad es exelente y claro. Lo aplique al pie de la letra y funciono exactamente de la

24/11/2008

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
Marcar como spam

Pablo
EXCELENTE articulo.

19/1/2009

Soy nuevo en PHP, vengo de ASP.NET donde esto de la paginacin se hace solamente
colocando un tag en la pgina.
Pero bueno, tena experiencia del ASP regular que es muy parecido al PHP y nunca vi algo tan fcil en
ASP como lo que se expuso aqu. Creo que lo que ayuda mucho es la funcin "LIMIT" de MySQL.
De cualquier forma el artculo est muy bien escrito, los felicito, y sobre todo, GRACIAS.
Marcar como spam

mirian
Una consulta, tengo una base de datos de producto con diferentes tipos de categorias, al

03/4/2009

listarla selecciono un tipo de categoria y sobre esa consulta paginar, no perdiendo el tipo de
categoria o criterio, alguien podra ayudarme....!!!
Marcar como spam

mirian
Una consulta, tengo una base de datos de producto con diferentes tipos de categorias, al

03/4/2009

listarla selecciono un tipo de categoria y sobre esa consulta paginar, no perdiendo el tipo de
categoria o criterio, alguien podra ayudarme....!!!
Marcar como spam

,,WI
buen tutorial

26/4/2009

muy bueno y bien explicado


Marcar como spam

Fer
Todo Muy Bueno!, Pero Reporto un mal link?
En esta pgina cuyo url es:
http://www.desarrolloweb.com/articulos/1035.php
Al comienzo de este tutotial el link que dice:

06/5/2009

"ver el resultado que vamos a conseguir en este artculo"


Da un erro de MySQL, es temporal ?, le estn haciendo Mantenimiento al Web?.
Quiero contribuir.!
Muchas Gracias a Desarrolloweb !
Marcar como spam

pepemetalero
Como ordeno la lista por nombre?

06/6/2009

Adapte el script y funciona, todavia tengo que arreglar algunas cosas por que cuando
cambio de pagina se va del marco de diseo. 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>

</table>
<?php
}
//cerramos el conjunto de resultados y la conexin 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 pginas, si es que hay varias pginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el ndice de la pgina actual, no coloco enlace
echo $pagina . " ";
else
//si el ndice no corresponde con la pgina mostrada actualmente, coloco el enlace para ir a esa pgina
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!
Marcar como spam

Gonzalo
Eliminar

18/6/2009

Y si ha este ejercicio le quisiera agregar unos checks con la opcion de eliminar cada registro
seleccionado.!
Marcar como spam

Antonio
paginacion

04/7/2009

Hola,
Tengo una base muy grande y quiero limitar el n de pginas a 11 en total : 5 antes de la pgina
seleccionada y 5 despus de esta. Como puedo hacerlo ? Gracias.
Marcar como spam

Kathy
Php

24/7/2009

buen aporte.
<a href="http://www.developerusoft.com/" title="Aplicaciones Web" >Aplicaciones Web</a>
Marcar como spam

CamilongO
Un detallito
Yo reemplazara:
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}
por:
if (empty($pagina)) {
$inicio = 0;
}

25/7/2009

}
else
$inicio = ($pagina * $limite)+1;
Porqu?, simple, porque si $pagina es igual a 1, $inicio tomar el valor 0, por lo que habr una pgina
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 vaca o sea 0, ya que se quita
automticamente la posibilidad de que la pgina sea 1.
La funcin empty retorna un valor 0 si es que no existe, asi que si el get lanza vaco, si o si, resultar,
comprobado.
Ahora, un rooteo rpido, por ejemplo, si $limite es 10 elementos y el total es 25, significa que para la
pgina 0, se presentarn los 10 primeros, para la pgina numerada como 1 sern desde el 11 ->
(10*1)+1 hasta el 20 y asi...
Ahora, para el usuario que peda hacer una paginacin limitada, estuve desarrollando recin el cdigo,
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 pgina, ahi adaptala para 5:
//Inclumos el archivo de conexin
$limite= 10;
$pagina = $_GET["pagina"];
if (empty($pagina)) {
$inicio = 0;
$primera = true;
}
else
$inicio = ($pagina * $limite)+1;
//Obtenemos la informacin 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 pginas limitadas
$pag_ant = $pagina - 1;
$pag_sig = $pagina + 1;
$p = $pag_ant - 1;
//Esto solo se har si hay mas de una pgina
if ($tot_paginas > 1){
//Si es la primera pgina
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 pgina
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 pgina, se imprimen los links a las 3 ultimas pginas
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 pgina
//Ir a la ltima pgina
echo "<a href='index.php?pagina=".($tot_paginas-1)."'>>></a> ";

}
mysql_free_result($result);
Ojal te sirva ;) Saludos
Marcar como spam

Fernando (7er)
Ayuda !

28/7/2009

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!!
Marcar como spam

facundo
Agregue botones Anterior y Siguiente

29/7/2009

Agregue botones Anterior y Siguiente

29/7/2009

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!!
Marcar como spam

Ale Rias
Muchas gracias!

06/8/2009

Buenisimo el cdigo, haciendo las debidas modificaciones, se adapta a todo!!


Gracias de nuevo.
Marcar como spam

nestor raul
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>

06/1/2010

<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>
Marcar como spam

alejandro
paginacion

27/2/2010

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
Marcar como spam

nosferatu9256
Felicidades, increibel articulo

17/3/2010

En estos momentos estoy haciendo una pagina de soporte para mi compaia y buscaba
algo para la paginacin de los resultados y este aporte es bueno, lastima que ya no este el codigo en la
seccin de descargas.
Saludos.
Marcar como spam

kfn
PROBLEMA AL DESCARGAR

17/4/2010

PROBLEMA AL DESCARGAR

17/4/2010

NO SE PUEDE DESCARGAR EL ACHIVO


Marcar como spam

lilipato
El archivo para descarga no existe

31/5/2010

El archivo no se puede descargar, parece que ni esta publicado porque no deja ver ni el
nombre
Marcar como spam

paco
paginacion de un carrito de compras

19/6/2010

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
Marcar como spam

Olifex
Helllllppppp

16/7/2010

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
Marcar como spam

carolan
LAS PAGINAS CUANDO SE CREAN

27/7/2010

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?
Marcar como spam

carolan
CREAR PAGINAS HTML A TRAVES DE PHP

27/7/2010

HAY ALGUNA FORMA DE CREAR PAGINAS HTML MEDIANTE PHP Y HACERLAS QUE SE
EJECUTEN. GRACIAS
Marcar como spam

rufus
no me funciona el script

03/9/2010

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........
Marcar como spam

AurelianoBabilonio
Funciona con mas de 10 registros

13/9/2010

Adapte el codigo a un codigo procedural y solo funciona con mas de 10 registros.


Marcar como spam

Franz1628
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'];
}

11/11/2010

$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;

$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>";
}
?>
Marcar como spam

franz1628
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;
}

11/11/2010

$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>";
}
?>
Marcar como spam

eltiopep
Paginacion de resultados desde un formulario
Hola compaeros,

29/11/2010

Hola compaeros,
A continuacin 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'];

$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
Marcar como spam

Len
url amigable para paginacion de resultados

29/5/2011

Hola muy interesante este script de paginacin php.


Solo una cosa sera 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.
Marcar como spam

angel_oviedo-470687
paginacion con php
este articulo esta genial, pero k pasa si tengo dos columnas de registros a mostras y

17/6/2011

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>

<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>

</tr>
</table>
Marcar como spam

AlexMalg
Logre hacerlo casi todo =P

05/8/2011

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
Marcar como spam

Jhonattan
Agradecimiento

05/8/2011

Muchas Gracias, muy clara la explicacion, lo adapte con un MVC (MODELO VISA
CONTROLADOR) y perfecto.
Marcar como spam

Damian
Mil gracias!

10/8/2011

La verdad es que sos un capo, me fue de mucha ayuda tu codigo....es genial!


Mi tesis y yo te lo agradecemos!
Marcar como spam

miguel_sanchez-591646
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
Marcar como spam

18/8/2011

Marcar como spam

Esteban
Sensibilidad a Maysculas/minsculas

19/8/2011

El cdigo es muy bueno y sencillo. Me ha ayudado mucho en mi programacin pero tengo


un problema que no s como resolver:
Al hacer, por ejemplo, una bsqueda con el trmino 'Ttulo', no me tiene en cuenta los registros en los
que aparece 'ttulo', con minsculas, y viceversa. He estado investigando y se supone que las consultas
en MySQL no deberan distinguir por defecto entre maysculas y minsculas.
Puede deberse a la configuracin local de MySQL? Puede deberse al motor de bsqueda seleccionado
para la base de datos? Pude deberse a algn parmetro introducido a la hora de crear la columna?
Agradezco ayuda sobre el tema.
Marcar como spam

Nasio
Ampliacin cdigo
A continuacin les muestro un cdigo que limita el nmero de pginas a mostrar... espero
que les sirva.

//--muestro los distintos ndices de las pginas, si es que hay varias pginas
if ($total_paginas > 1)
{
//Defino el numero de resultados a mostrar a partir de la pgina
$num_resultados = 9;
//Calculo el mmino
$min = $pagina;
$min-=$num_resultados;
if($min < 1)
$min = 1;
//Calculo el mximo
$max = $pagina;
$max+=$num_resultados;
if($max > $total_paginas)

28/10/2011

if($max > $total_paginas)


$max = $total_paginas;

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

Rokus
Es una pijada pero...
Bueno, pues es una pijada, pero creo que la parte
//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la pgina a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

11/12/2011

Podra ser un poco ms conciso e igual de funcional si simplemente lo dejaramos as


//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la pgina 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 segn la pgina, y lo nico que es necesario es darle a pgina el valor 1 si
no nos viene dada por GET
Marcar como spam

robert
pregunta sobre la paginacion?

04/1/2012

Ahora les hago una pregunta, supongase que tengo una base de datos con 15000 registros
y quiero que el tamao 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.
Marcar como spam

ra120354
El cdigo me da errores Porque?

12/2/2012

He puesto todo el cdigo 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 cdigo porque me daba tambien un error pero parece ser que con el
cambio lo he subsanado.

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 cdigo que he puesto:
<?php
$conexion = mysql_connect('localhost', 'root', '');
mysql_select_db('general');
?>
<?php
//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la pgina 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 nmero total de campos que hay en la tabla con esa bsqueda
$ssql = "select * from Actividades " . $criterio;
$rs = mysql_query($ssql,$conexion);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de pginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);

//pongo el nmero de registros total, el tamao de pgina y la pgina que se muestra


echo "Nmero de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran pginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la pgina " . $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 conexin con la base de datos
mysql_free_result($rs);
mysql_close($conexion);
//muestro los distintos ndices de las pginas, si es que hay varias pginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el ndice de la pgina actual, no coloco enlace
echo $pagina . " ";
else
//si el ndice no corresponde con la pgina mostrada actualmente, coloco el enlace para ir a esa pgina
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 bsqueda:
<input type="text" name="criterio" size="22" maxlength="150">

<input type="text" name="criterio" size="22" maxlength="150">


<input type="submit" value="Buscar">
</form>
Marcar como spam

HERMAN
Simple y efectivo

11/9/2012

Como debe ser el cdigo, simple y efectivo.


Gracias
Marcar como spam

branny2010
PAGINACION

09/1/2013

Excelente tutorial yo tambin hice una contribucin de una clase en php para la paginacin
de resultados espero que sea de utilidad.
http://www.web-design.cl/PaginacionBH/
TinEe varias opciones configurables :)
Marcar como spam

pablo
excelente!

29/1/2013

despues de 10 aos de publicado el articulo, sigue sirviendo!!! excelente me vino al pelo!!!!


Marcar como spam

mar
DUDA

08/3/2013

HOLA ESTOY DISEANDO 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, desempeo, csh1, csh2, csh3, csh4, csh5, csh6, mate1, mate2,

resp9, plan, vocacion, ambiente, empleo, desempeo, 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
Marcar como spam

sub_87
prioridad en la paginacion

16/4/2013

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
Marcar como spam

olpo18
Interesante

04/5/2013

Muy interesante el articulo, como siempre Desarrollo Web con excelentes aportes, Gracias
Marcar como spam

microcomputer
Problema con php y mysql_conect()

26/6/2013

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
Marcar como spam

Pedro Rojas

Pedro Rojas
Paginacion con PHP y Msql

05/10/2013

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...
Marcar como spam

Rafael
Posible solucin

03/2/2014

Para aquellos que han tenido problemas por que la variable pagina no estaba definida (Sale
un warning durante la ejecucin), les recomiendo que usen la funcin isset. Ms informacin en:
http://es1.php.net/isset
Un saludo y muchas gracias por el cdigo, muy bueno!
Marcar como spam

luis
me parese bien que pueda expresarme por aqui

15/10/2014

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";
Marcar como spam

Ivan
Cambiar mysql_num_rows

27/5/2015

Hola gente, para hacerlo mas eficiente, yo creo que se podra hacer una consulta mejor, en
vez del "select * from [...]" y luego hacer un "mysql_num_rows()" del resultado, cambiara la consulta por
un "select count(*) from [...]".
De esta manera liberaramos un poco de trfico con la base de datos.
Un Saludo.
Marcar como spam
Enviar un comentario al artculo

Principales

Monotemticos

Blogging

Manuales

Desde cero

Actualidad

FAQs

HTML, CSS

De inters

En directo

Javascript, Ajax

Agenda

Vdeos

Diseo, ASP

Powered by:

Desarrolloweb.com Copyright Publicidad Acerca de Datos legales P. de cookies Contacta

Anda mungkin juga menyukai