css
Buscar
Login | Registro
PaginacinderesultadosconPHPy
MySQL
Por Miguel Angel Alvarez
Seguira@midesweb
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>";
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.
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
Seguira@midesweb
Subir
Manual
Taller de PHP
validar email en PHP
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>";
/r0d
Chevere tutorial.. que interesante tambien esta en www.devshed.com, pero en ingles..
13/6/2003
chau
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///
?>
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> ';
Matias
Quiero agregar q si solo se quieren contar la cantidad de registros q cumplen un criterio
13/12/2004
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;
}
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
$recordset=mssql_query($query,$conn);
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
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);
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
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
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
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
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)){
}
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
29/7/2009
Ale Rias
Muchas gracias!
06/8/2009
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
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
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
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
AurelianoBabilonio
Funciona con mas de 10 registros
13/9/2010
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;
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
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
}
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
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
Esteban
Sensibilidad a Maysculas/minsculas
19/8/2011
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
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
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);
HERMAN
Simple y efectivo
11/9/2012
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
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
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
Pedro Rojas
Pedro Rojas
Paginacion con PHP y Msql
05/10/2013
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: