Paginar consultas con MySQL, PHP y AJAX

199
60825

Si desemos paginar los resultados de una consulta, podemos hacerlo con PHP y quedaría excelente, por ejemplo en la Portada de este Blog, en la parte final, se puede apreciar un ejemplo en acción. Sin embargo, si queremos que al momento de pasar de una página a otra no recarge toda la página sino solo el contenido que nos interesa. Para ello podemos hacer uso de AJAX.

Por ejemplo, nuestra tabla Empleados tiene como 150 registros, pero cargar esos 150 en una página web tomaría su tiempo. Así que es mejor si los mostramos por páginas o bloques de 10 registros (por ejemplo) , y colocamos el número de páginas en forma de enlaces para navegar por los todas las páginas. En el caso del ejemplo, sería algo de 15 páginas (150/10). Vamos a materializar nuestro aplicación, haciendo uso del lenguaje PHP, MySQL como gestor de Base de Datos y AJAX. Explicaré el objetivo que tiene cada archivo, aunque también incluyo comentarios en los script como para que se entienda mejor. Cualquier duda o pregunta, pueden hacerla con toda confianza.

[Ver el resultado final]

Vamos a trabajar con la tabla Empleados, la cual hemos venido usando en anteriores ejemplos. [Ver Tabla]. Los datos de la conexión a la Base de Datos se guardarán en el archivo conexion.php.

<?php
//Configuracion de la conexion a base de datos
$bd_host = "miservidor";
$bd_usuario = "miusuario";
$bd_password = "micontraseña";
$bd_base = "mibasededatos";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>

Ahora en un archivo JavaScript, el cual llamaremos ajax.js hacemos uso del objeto XMLHttpRequest para hacer peticiones al servidor sin necesidad de recargar toda una página web (está función hemos venido usandola en anteriores tutoriales). También, crearemos la función llamada Pagina(nroPagina), esta recibirá un valor correspondiente a un número de página y se enlazará con el archivo paginador.php para procesar ese número de página. Y el resultado se mostrará en la capa (<div>) "contenido".

function objetoAjax(){
var xmlhttp=false;
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function Pagina(nropagina){
//donde se mostrará los registros
divContenido = document.getElementById('contenido');

ajax=objetoAjax();
//uso del medoto GET
//indicamos el archivo que realizará el proceso de paginar
//junto con un valor que representa el nro de pagina
ajax.open("GET", "paginador.php?pag="+nropagina);
divContenido.innerHTML= '<img src="anim.gif">';
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
//mostrar resultados en esta capa
divContenido.innerHTML = ajax.responseText
}
}
//como hacemos uso del metodo GET
//colocamos null ya que enviamos
//el valor por la url ?pag=nropagina
ajax.send(null)
}

El archivo principal de este proceso es paginador.php, este archivo es el encargado de mostrar los registros dependiendo de la página elegida. Describiré los procesos de manera que sea entendible, de todas maneras pueden preguntar por medio del formulario de comentarios:

  • Antes que nada, hacer un require del archivo de conexión a la Base de Datos (conexion.php).
  • Específicamos qué cantidad de registros se mostrarán por página ($RegistrosAMostrar). Pueden cambiar este valor por el que deseen, y el número de páginas se adecuará a ello. Pero para nuestro ejemplo mostraremos 4 registros por página.
  • En el if verificamos la variable $_GET[‘pag’], si está definida hacemos uso de dos variables: $RegistroAEmpezar que será la variable $_GET[‘pag’] menos 1 multiplicado por la cantidad de registros a mostrar (Ejm. Elegimos Pagina 5, 5 menos 1 igual 4, 4 multiplicado por 3 igual 12, a partir del registro 12 se empezaría a mostrar la consulta en la página 5), y $PagAct tendrá el valor de la variable $_GET[‘pag’]. En el caso de que las variables no estén definidas las variables $RegistroAEmpezar y $PagAct tendrán el valor de 0 y 1 respectivamente.
  • Luego realizamos una consulta SELECT y usamos LIMIT con valores de las variables $RegistroAEmpezar y $RegistrosAMostrar y en una tabla HTML mostramos los resultados.
  • Realizamos un proceso para determinar el número de páginas dependiendo de la cantidad registros de la tabla ($NroRegistros) y de los registros a mostrar ($RegistrosAMostrar). El proceso lo he comentado en el script para que se entienda mejor.
  • Finalmente especificamos enlaces de navegación (Primero, Anterior, Siguiente, Último), cada uno de estos enlaces hará una llamada a la función JavaScript Pagina(nropagina).
<?php
require('conexion.php');
$RegistrosAMostrar=4;

//estos valores los recibo por GET
if(isset($_GET['pag'])){
$RegistrosAEmpezar=($_GET['pag']-1)*$RegistrosAMostrar;
$PagAct=$_GET['pag'];
//caso contrario los iniciamos
}else{
$RegistrosAEmpezar=0;
$PagAct=1;
}

$Resultado=mysql_query("SELECT * FROM empleado ORDER BY nombres LIMIT $RegistrosAEmpezar, $RegistrosAMostrar",$con);
echo "<table border='1px'>";
while($MostrarFila=mysql_fetch_array($Resultado)){
echo "<tr>";
echo "<td>".$MostrarFila['nombres']."</td>";
echo "<td>".$MostrarFila['departamento']."</td>";
echo "<td>".$MostrarFila['sueldo']."</td>";
echo "</tr>";
}
echo "</table>";

//******--------determinar las páginas---------******//
$NroRegistros=mysql_num_rows(mysql_query("SELECT * FROM empleado",$con));
$PagAnt=$PagAct-1;
$PagSig=$PagAct+1;
$PagUlt=$NroRegistros/$RegistrosAMostrar;

//verificamos residuo para ver si llevará decimales
$Res=$NroRegistros%$RegistrosAMostrar;
// si hay residuo usamos funcion floor para que me
// devuelva la parte entera, SIN REDONDEAR, y le sumamos
// una unidad para obtener la ultima pagina
if($Res>0) $PagUlt=floor($PagUlt)+1;

//desplazamiento
echo "<a onclick=\"Pagina('1')\">Primero</a> ";
if($PagAct>1) echo "<a onclick=\"Pagina('$PagAnt')\">Anterior</a> ";
echo "<strong>Pagina ".$PagAct."/".$PagUlt."</strong>";
if($PagAct<$PagUlt) echo " <a onclick=\"Pagina('$PagSig')\">Siguiente</a> ";
echo "<a onclick=\"Pagina('$PagUlt')\">Ultimo</a>";
?>

El archivo index.php tendrá un tabla HTML con tres columnas (Nombres, Departamento, Sueldo) y un capa (<div>) llamado "contenido" dentro de la cual haremos un include del archivo paginador.php.

<html>
<head>
<title>Paginar Resultados</title>
<script type="text/javascript" src="ajax.js"></script>
<style>
td{
width:200px;
}
a{
text-decoration:underline;
cursor:pointer;
}
</style>
</head>
<body>
<div style="margin:auto;width:500px;text-align:center;">
<table border="1px">
<tr>
<td>Nombres</td>
<td>Departamento</td>
<td>Sueldo</td>
</tr>
</table>
<div id="contenido">
<?php include('paginador.php')?>
</div>
</div>
</body>
</html>

Esta es una manera organizada de mostrar nuestras consultas de una Base de Datos. Cualquier duda, consulta, crítica constructiva abajo en sus comentarios. [Ver el resultado final]

Descargar código fuente

Compartir
Artículo anteriorCrear tu Web fácilmente con Weebly
Artículo siguiente¡Y el ganador es … Ajax!
Programador y Desarrollador Web. Administrador de RibosoMatic y Proyecto Yupy. Blogger y entusiasta de la tecnología, internet, software, hardware, gadgets y tutoriales para desarrollo de aplicaciones para la web ....

199 COMENTARIOS

  1. Eres un maestro… te agradezco q hayas hecho este tutorial.. como lo habia dicho en un post de otro tutorial.. es necesario esto de la pginacion y en ajax no tenia idea. Realmente te lo agradezco y a mi por lo menos me servirá es q muchisimo.

    Bueno maestro un saludo desde chile. Y otra cosita de una duda de pq cuando tengo una paigna en ajax y luego la cargo dentro de otra q contiene ajax. Las funciones de adentro no cargan??. Me explico tengo un formulario con javascript que lo cargo dentro de una pagina TAB hecha en ajax pero no me funcionan los asuntos en javascript. Lo mismo me pasa con paginas en ajax par mostrarr contenidos de mysql no me cargan en este TAB. Tenia pensado usar iframe en vez de ajax.

    Saludos master.

  2. Si comprendo a que te refieres a eso de carga una pagina ajax dentro de otra con ajax.

    Pero en cuanto al TAB que desarrolle no lo probe de esa manera aun (no se me ocurrio hacerlo). Pero, si mal no recuerdo al inicio de ese artículo hay 2 enlaces de ejemplos parecidos JavaScript Tabifier y DOMTab que otros desarrolladores habian hecho.

    Sino puedes probar con este articulo que encontre hace poco en Webintenta.

    Mientras trato de ver eso de TabPage que hize, quizas con algunos ejemplos.

    Saludos feliz

  3. Hola, bueno estaba probando el codigo y en fin me salen unos warning q no entiendo mucho.

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\ajax\listadesplegable_consulta2\paginador.php on line 18

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\ajax\listadesplegable_consulta2\paginador.php on line 37
    Primero Pagina 0/0Ultimo

    Y el codigo de paginador.php es el siguiente:

    <?php
    require(‘conexion.php’);
    $RegistrosAMostrar=3;

    //estos valores los recibo por GET
    if(isset($_GET[‘pag’])){
    $RegistrosAEmpezar=($_GET[‘pag’]-1)*$RegistrosAMostrar;
    $PagAct=$_GET[‘pag’];
    //caso contrario los iniciamos
    }else{
    $RegistrosAEmpezar=0;
    $PagAct=1;

    }
    $Resultado=mysql_query("SELECT nombre_sector,id_evento,n_evento,fecha,h_hora,h_minuto,h_segundo,coord_norte,coord_este,coord_cota,magnitud,energia FROM sector,evento WHERE sector.id_sector=evento.id_sector ORDER BY nombre_sector LIMIT $RegistrosAEmpezar, $RegistrosAMostrar",$con);

    echo "<table border=’1px’>";
    while($row =mysql_fetch_array($Resultado)){
    echo "<TR><TD width=\"25\" align=\"center\">".$row[‘n_evento’]."</TD>";
    list( $año, $mes, $dia ) = split( ‘[/.-]’, $row[‘fecha’] );
    $date = $dia."-".$mes."-".$año;
    echo "<TD align=\"center\" width=\"85\">$dia-$mes-$año</TD>";
    echo "<TD align=\"center\">".$row[‘h_hora’].":".$row[‘h_minuto’].":".$row[‘h_segundo’]."</TD>";
    echo "<TD align=\"center\" width=\"50\">".$row[‘coord_norte’]."</TD>";
    echo "<TD align=\"center\" width=\"50\">".$row[‘coord_este’]."</TD>";
    echo "<TD align=\"center\" width=\"50\">".$row[‘coord_cota’]."</TD>";
    echo "<TD align=\"center\">".$row[‘magnitud’]."</TD>";
    echo "<TD align=\"center\">".$row[‘energia’]."</TD>";

    echo "<TD align=\"center\"><a href=\"_view.php?id_evento=".$row[‘id_evento’]."\" target=\"v\" onclick=\"window.open(this.href, this.target, ‘width=900,height=650’); return false\"> VER DETALLE </a>";
    }
    echo "</table>";
    //******——–determinar las páginas———******//
    $NroRegistros=mysql_num_rows(mysql_query("SELECT nombre_sector,id_evento,n_evento,fecha,h_hora,h_minuto,h_segundo,coord_norte,coord_este,coord_cota,magnitud,energia FROM sector,evento WHERE sector.id_sector=evento.id_sector",$con));

    $PagAnt=$PagAct-1;
    $PagSig=$PagAct 1;
    $PagUlt=$NroRegistros/$RegistrosAMostrar;

    //verificamos residuo para ver si llevará decimales
    $Res=$NroRegistros%$RegistrosAMostrar;
    // si hay residuo usamos funcion floor para que me
    // devuelva la parte entera, SIN REDONDEAR, y le sumamos
    // una unidad para obtener la ultima pagina
    if($Res>0) $PagUlt=floor($PagUlt) 1;

    //desplazamiento
    echo "<a onclick=\"Pagina(‘1’)\">Primero</a> ";
    if($PagAct>1) echo "<a onclick=\"Pagina(‘$PagAnt’)\">Anterior</a> ";
    echo "<strong>Pagina ".$PagAct."/".$PagUlt."</strong>";
    if($PagAct<$PagUlt) echo " <a onclick=\"Pagina(‘$PagSig’)\">Siguiente</a> ";
    echo "<a onclick=\"Pagina(‘$PagUlt’)\">Ultimo</a>";
    ?>

    Si puedes ayudarme aentender esos warning te estaré muy agradecido.

  4. Ups error al pegar el codigo quedo bien feo… en fin

    en el warning :

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:wampwwwajaxlistadesplegable_consulta2paginador.php on line 18

    mi código en esa linea tiene:
    18: while($row =mysql_fetch_array($Resultado)){

    Y en el segundo warning

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:wampwwwajaxlistadesplegable_consulta2paginador.php on line 37

    mi código dice

    35: $PagAnt=$PagAct-1;
    36: $PagSig=$PagAct 1;
    37: $PagUlt=$NroRegistros/$RegistrosAMostrar;

  5. El primer error while($row =mysql_fetch_array($Resultado)) ocurre por que tu consulta SQL esta mal formulada, revisala en la variable $Resultado=mysql_query(‘SELECT …. FROM …’), quizas te olvidaste el nombre de correcto de un campo. Revisa la estructura de tu tabla o tablas.

    El segundo error, esta relacionado con el primero, quizas esta mal formulada la consulta, quizas los nombres de los campos no coinciden con las tablas.

  6. Listo ya lo solucioné. Muchas gracias. Sin embargo traté de unir este script con el de mostrar unos datos mediante un ComboBox (el script está en esta pagina tb.) Bueno aqui tengo un problema al pasar a la Página 2 o siguientes me imagino que deber ser al llamar de nuevo a la funcion de ajax capta otros valores o algo asi. Pq de partida lo muestra todo bien pero si hago click en siguiente, entra en otra tabla… y si me devuelvo muestra todos los resultadso de las tablas.

    Luego me pregunto que tan fundamental es el nombre del div donde se mostraran los resultados de la consulta.

    por ejem: resul = document.getElementById(‘resultado’);

    pasa que he intentado el script pero cambiandole nombres a las funciones y divs y me salen errores :S

  7. Buenas,
    Me gustaria saber si es posible el implementar de alguna manera este mismo codigo contra una base de datos oracle…

    Ya que no encuentro los comandos para el conteo de los resultados y cosas asi…

    por favor, necesito esta informacion.

  8. Hola Jesus,

    Mi gran enhorabuena por tu site.
    El codigo funciona a la perfección, es el único código que funciona sin problemas de los que corren por la red. He probado muchos codigos (desarrolloweb.com,webestilo.com,programacion.net, etc..) y me funcionaban en localhost pero en el hosting era otro cantar.

    Muchas gracias!
    Un abrazo crack!

  9. Hola, he probado el codigo y es cojonudo.

    El problema lo tengo cuando creo un un formulario en indice.php que pasa mediante GET una variable, para utilizar en la consulta sql de paginador.
    Es decir: “SELECT * FROM empleado WHERE nombres= ‘$name’ ” donde $name tiene como valor $_GET[‘nombre’]

    Entiendo que el $_GET[‘nombre’] que le paso desde el formulario se encuentra en conflicto con $_GET[‘pag’]. No sabría la forma de pasar éste GET cuando php y mysql convive con AJAX.

    Gracias master

  10. Es cierto. Muchos script por la web no funcan pero que bueno que este si. Y en primera, simplemente haciendo modificaciones a los datos de conexion. Nice! feliz

  11. Hola a todos recien estoy programando y me dieron para hacer una paginacion pero el codigo es el siguiente y lo tengo que implementar con la funcion mod .La consulta esta gracias por responder.

    Esta es la consulta que me trae los las filas que necesito

    function itemsRelacionesProvSuper($opcion)
    {

    // si la opcion es 1 me muestra la grilla para una provincia
    // si la opcion es 2 me muestra la grilla para un organismo
    // si la opcion es 3 me muestra la grilla para un superusuario
    // si la opcion es 4 me muestra la grilla en formato de impresion

    //me trae los items de los organismos que cargaron contra la provincia elegida
    $query = “select Cod_Item_Org,
    provincias.Nombre AS Descripcion,
    tipo_deuda.Descripcion AS deuda,
    origen_deu_acre.Descripcion AS origen, Fecha_Ven,
    monedas.Tipo AS moneda, Monto_Venci,
    categorias.Descripcion AS categoria,
    nomina_org.Fecha_Firma AS firma,
    items_org.Cod_Nomina_Org AS nomina, Doc_Respald,
    items_org.Cod_Actual AS codActual,
    items_org.CodProv AS codProv
    from items_org left join categorias on items_org.idCategoria = categorias.idCategoria, nomina_org, provincias, tipo_deuda, origen_deu_acre, monedas
    where nomina_org.Cod_Nomina_Org = items_org.Cod_Nomina_Org AND
    nomina_org.Cod_Actual = items_org.Cod_Actual AND
    nomina_org.CodProv = items_org.CodProv AND
    items_org.CodProv = provincias.CodProv AND
    items_org.Cod_Tipo = tipo_deuda.Cod_Tipo AND
    items_org.Cod_Origen_Deu_Acre = origen_deu_acre.Cod_Origen AND
    items_org.Cod_Moneda = monedas.Cod_Moneda AND
    items_org.CodProv = $this->codProv AND
    items_org.Cod_Actual = $this->codActual
    order by Cod_Item_Org “;

    Aca las cuento las filas

    function armarPaginacion($opcion)
    {
    //este metodo es para paginar la contar la cantidad de items cargados ya que cuando hay demaciados items cargados se cuelga la aplicacion , el en archivo
    // relaciones2.php

    // si la opcion es 1 me muestra la grilla para una provincia
    // si la opcion es 2 me muestra la grilla para un organismo
    // si la opcion es 3 me muestra la grilla para un superusuario
    // si la opcion es 4 me muestra la grilla en formato de impresion

    //me trae los items de los organismos que cargaron contra la provincia elegida
    $query = “select count(1) as total
    from items_org left join categorias on items_org.idCategoria = categorias.idCategoria, nomina_org, provincias, tipo_deuda, origen_deu_acre, monedas
    where nomina_org.Cod_Nomina_Org = items_org.Cod_Nomina_Org AND
    nomina_org.Cod_Actual = items_org.Cod_Actual AND
    nomina_org.CodProv = items_org.CodProv AND
    items_org.CodProv = provincias.CodProv AND
    items_org.Cod_Tipo = tipo_deuda.Cod_Tipo AND
    items_org.Cod_Origen_Deu_Acre = origen_deu_acre.Cod_Origen AND
    items_org.Cod_Moneda = monedas.Cod_Moneda AND
    items_org.CodProv = $this->codProv AND
    items_org.Cod_Actual = $this->codActual

    order by Cod_Item_Org “;
    $MySql = new dbMySql ;
    $resultado = $MySql->ejecutar($query);
    $row = mysql_fetch_assoc($resultado);

    echo “total: “,$row[“total”],”

    ” ;
    echo “predefinida :”,$row[“TAMANO_PAGINA”] = TAMANO_PAGINA,”

    “;

    echo “total de paginas:”,$paginas = ($row[“total”] / $row[“TAMANO_PAGINA”]);

    Ahora necesito implementar la paginacion

    urgente a alguien que me pueda reponder Muchas gracias

  12. Hola que tal amigos, soy un principiante en php y MySQL, mi duda es
    la siguiente, de una tabla normal de MySQL, Como puedo obtener el solo ultimo valor de la llave principal para imprimirla en una pag. php?

  13. Holas pues te queria comentar que cambie la paginacion de mi web site por esta en ajax por que me parecio mas rapida que cargar la web completamente y solo el pedaso de la consulta….
    los iframes pues no se estiran segun consulta y queria algo asi, bueno al caso es que tengo problemas con los charset, codificacion cada ves que hago la paginacion me explico, cargo la pagina con el ajax y va perfecto pero al pasar a la pagina dos, 3, 4 etc… y volver a la pprimera los acentos y todo me clotea X) alguna idea……

  14. triste nuevamente el molesto pues te explico que puse lo que proponian en el otro topic,
    < ? php // header('Content-Type: text/xml; charset=ISO-8859-1'); ? >

    y pues si me va, no me arroja el error de los acentos y eso, esta linea la puse al comienzo del archivo paginador.php ahora el error que me manda esque resulta que yo en mi pagina index donde se supone va el < " div > contenido, tengo al comienzo otra consulta y pues me manda un error de header que se suponen es lo primero que se manda,

    Warning: Cannot modify header information – headers already sent by (output started at /home/*****/public_html/index.php:5) in /home/******/public_html/paginador.php on line 1

    en el index solo tengo una consulta en el title de tipo
    < ? include ('conexion.php'); $titulox = mysql_query("SELECT titulo FROM articulos ORDER by id ASC"); while ($dam = mysql_fetch_array($titulox)) { $titu = $dam[titulo]; } ? >
    < ! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    < html>
    < head>
    < title>::: Mi WEb – < ? echo "$titu"; ? > – Ultima Noticia :::< /title>

    y pues no se donde poner la famosa linea del header triste
    y lo otro solo me manda el error del warning al cargar por primera ves ya luego al navegar por el ajax no

  15. yo denueo borre todo lo que tenia en index y deje solo el div del contenido y la llamada al paginador e igual me sale

    Warning: Cannot modify header information – headers already sent by (output started at /home/anpvkma/public_html/index.php:2) in /home/anpvkma/public_html/paginador.php on line 1

    esto ya anda mal :/

  16. Holas Kanino pues no creo que sea error tuyo, a mi me sucede lo mismo y aun no encuentro como solucionarlo y el problema va en que un header es lo primero que se envia, y como antes el paginador necesita del contenedor y su div siempre te saldra que alguien esta enviando info antes que el header cuando carges tu pagina donde pones la paginacion, ahora bien para que los caracteres no aparescan se necesita del < ? php // header('Content-Type: text/xml; charset=ISO-8859-1'); ? > que tu mismo publicaste pero siempre te saldra el error de que alguien esta enviando algo antes por el tema del < div> que envuelve al < ?php ..... ? > que va a buscar la paginacion.php ahora yo tambien estoy interesado en solucionar este problema si encontraste la solucion posteala por favor feliz

  17. Pueden usar la funcion utf8_decode (que convierte un cadena codificada con utf a iso-8859-1) en el dato o datos que se mostrarán en servidor. Espero les sirva este dato y disculpad por responder tardiamente.
    Saludos feliz

  18. Oye tio me pasa lo mismo que a los de abajo y eso que propones, de utf8_decode como lo implemento en el paginador, es que no se mucho del tema podrias poner donde va, como va y en cual de las paginas por favor feliz

    que tu paginador se sale mucho y me ha gustao un monton

  19. holas gracias por la respuesta jesusvld ya lo prove y no me da resultado, ahora empeora cuando traigo los datos, antes solo tenia problemas cuando hacia el ajax con el utf8_decode me arroja del comienzo problemas de codificacion, probare otra solucion ,
    por cierto marcos el utf8 se ocupa de esta manera
    < ?php echo utf8_decode("$tu_variable"); feliz saludos

    ?>

  20. Hola kanino y demás, espero que esta pequeña explicación sirva:

    Supongamos que nuestra tabla articulos el titulo de uno estos sea:
    “Ajax: Pequeña Introducción” tal y como esta, con ñ y tilde, esta guardado en nuestra tabla.

    1. Ahora si trabajamos con UTF-8 en nuestra pagina (charset), en la pagina en resultado será:
    “Ajax: Peque?a Introducc?n”

    2. Si al momento de consultar los datos usamos utf8_decode($titulo) como lo indique antes saldrá esto:
    “Ajax: Peque?ntroducci?”

    Disculpen. en vez de arreglar esto, empeoro!

    3. Si cambiamos la codificación de la pagina a ISO-8859-1 el resultado es:
    “Ajax: Pequeña Introducción”

    4. Finalmente usé utf8_encode, para pasar de ISO a UTF y el resultado fue igual al punto 3.

    Ahora supongamos que en nuestra tabla articulos el dato esta guardado con coficacion UTF-8 de esta manera:
    “Ajax: Peque±a introducción”

    Si usamos ISO como charset en nuestra pagina se verá un simbolo de ?.

    Para que se vea correctamente solo tenemos que cambiar el charset de la pagina web a UTF-8, no mas, como es el caso de este blog.

    Importante: Para trabajar con ajax la pagina debe usar charset UTF-8 siempre.

    Conclusión: revisen la codificacion con la que trabaja su base de datos y aplicar la solucion adecuada. Espero que sirva estas pruebas que realize en el server remoto y local.
    Saludos a todos feliz

  21. haber probe y no me sale sorry tare haciendo algo mal haber tengo mi bases de datos de tipo utf8_unicode_ci y en mi index.php que tiene el charset en ISO lo pase a utf8 y me salio claro ?
    pero cuando hago en mis variables en paginacion.php utf8_decode(“$mi_variable”); pues no pasa nada :/

    claro si ocupo solo ISO me aparecen bien tildes y Ñ y al navegar por el ajax se ve mal, con el utf8_decode en cambio se ve mal desde que cargo con los ? sera por el tipo de mi base de datos :/ o estare haciendo algo mal si me resulta posteo la solucion lengua

  22. kanino probastes con utf8_encode??, no utf8_decode, encode pasa de utf-8 a iso. Yo creo que el problema puede ser esto, por ejemplo, la tabla mysql de este ejercicio, que esta en este enlace, en el registro numero 12,’David liñan’,’Logistica’,500, nota que la ñ esta con utf-8, cuando ejecuté este script en mi servidor paso de eso a esto: David liÃ?±an, asi esta guardado, cuando use esto en la paginacion te darás cuenta que salia así David liñan, pero lo arregle con utf8_decode.

    En resumen esta guardado asi: David liÃ?±an y se muestra así en la pagina: David li±an, pero no es lo correcto y lo arregle asi: utf8_decode($nombreEmpleado). Y todo ok.

    Asi que revisa como estas guardando tus registros en la BD.

  23. holas yo molestando nuevamente espero me puedas ayudar, resulta que quiero integrar este script a la web…
    web : http://www.huddletogether.com/projects/lightbox2/

    es para imagenes al pinchar sobre ellas me da un efecto que deseo, ahora bien los :
    < link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
    < script type="text/javascript" src="js/prototype.js">
    < script type="text/javascript" src="js/scriptaculous.js?load=effects">
    < script type="text/javascript" src="js/lightbox.js">

    los ongo en mi pagina index en el head y bueno cuando ingreso en mi base de datos los link de imagenes le pongo el rel=”lightbox” que me pide, todo perfecto pruebo y ok pero cuando navego por el ajax ya no resulta el efecto, mi duda es donde pongo los srcipt src por que trate en hasta en el paginador y nada… alguna sugerencia plis feliz

    saludos…

  24. oye kanino que buen script de imagenes, tambien lo quiero implementar en mi paginador, si lo solucionaste podrias escribir aqui la solucion feliz
    me pasa lo mismo que ti al navegar ya no funciona, pero te fijaste en el fuente de la pagina siempre trae las noticias de la pagina 1 que tienes es medio raro….

    bueno me estare pasando por aqui para ver las novedades por cierto gran pagina su paginador me ha solucionado grandes cosas…..
    pd: yo arregle el problema de las ñ y eso con el decode….

  25. amigos jugando un poco saque una respuesta al lightbox paginacion ajax xD
    cuando ponen la imagen, que le ponen
    rel=”lightbox”
    agregenle onmousedown=”initLightbox();”
    pasa que al hacer click, carge denuevo la ventanita 😉
    quedaria

    < a href="imagen_grande.jpg" rel="lightbox" onmousedown="initLightbox();" />

    reemplaxen los nombres de las imagenes…, y las xx e yyy

    saludos !!!
    elchuecodel88[@]hotmail.com !
    si andan en esto me gustaria contactarme con diseñadores que esten empazando con ajax, ( como yo xD )

  26. Holaa es como estan, me parece fabulosa esat pagina… Hasta ahora estoy iniciandome en ajax, corri el ejemplo de paginacion y cuando le doy a atras o siguiente me sale el siguiente error.:

    Fatal error: Call to a member function on a non-object in C:AppServwwwsiteadminpaginador.php on line 16

    De veras estoy un poco confundida, cualquier ayuda que me puedan brindar se los agredeceria

  27. pues muchas gracias por el dato del lightbox risas me ha ido de maravilla compadre feliz….
    y para yade, pues el error que te envia es por que debes haber llamado a tu pagina con otro nombre y en el a href esta puesto paginador.php entyonces llama a esa pagina y no la encuentra revisa eso y nos comentas risas

  28. pues me gustaria saber si alguien tiene la paginacion asi como la de google o como la muestra aqui…

    ej…
    primero < 1 2 ... 5 6 7 8 9 ... 25 26 > ultimo

    de ese tipo risas
    se lo agradeceria bastante…

  29. hola buen scritp aunque tengo algunos problemas ,veras cuando doy click en la pagina siguiente aparece como numero 1 de 0 paginas talves estoy haciendo algo mal espero me puedas ayudar

    chekealo aqui http://sexedur.info

    gracias

  30. Disculpen, volviendo al tema de las codificaciones, podrian poner exactamente la aplicacion de utf8_decode($nombreEmpleado). En el ejemplo de esta paginacion?

    ya defini:
    utf8_encode($MostrarFila);
    utf8_encode($Resultado);
    etc etc y no aparece nada.

  31. Holas, tengo el paginador en una carpeta, si navego con la carpeta funciona super bien feliz
    Pero si llamo le hago un include al index.php desde un directorio superior al de la carpeta contenedora… el navegador no funciona, al hacer clic no hace nada… como lo puedo solucionar triste
    Gracias y muy buen tutorial…

  32. Hola Que tal !!
    estoy pegado tratando de aplicar esta paginacion….la observacion es que la estoy haciendo con postgresql….pero no creo q cambie muxo…o si ???

    el resultado de lo que me da esta aplicacion es el sgte:
    en la pag 1 no me muestra ningun resultado de mi consulta,
    en la pag 2 me muestra una fila….
    en la pag 3 me muestra el que estaba en la fila 2 mas una fila mas…y asi…
    que puedo tener malo…..
    esta corriendo bajo apache2, php5, postgresql 8….
    eso de antemano muxas gracias .-

  33. Christian, no he trabajado con postgresql, por lo que ignoro si aplicará las funciones mysql_x. Así que la recomendación: revisa la estructura de las consultas sql. Saludos.

  34. No se podria hacer una paginacion con el id del empleado linkeado a una funcion ajax que lo borre, lo he hecho y he logrado que lo haga solo que no actualiza automaticamente, alguna recomendacion?

  35. hola, necesito ayuda urgente!!! tengo q paginar una consulta en caso de q agarre mas de una pagina, es un formato q muestra los productos seleccionados, pero por lo general la descripcion del producto me toma dos dos lineas. Como haria para validar, independientemente de las lineas que tome, la consulta y se muestre en las paginas que sean requeridas. Se le agradece cualquier ayuda…

  36. Christian Tejos lo que esta pasandote es que en PostgreSQL la sentencia para el LIMIT no es igual que en MySQL; Debes poner:
    ..LIMIT $RegistrosAMostrar OFFSET $RegistrosAEmpezar
    Espero haber llegado a tiempo.
    Saludos

  37. AAhh ! Me olvidaba Jesus me podrias explicar para que sirve y que hace esta linea de la funcion Pagina():

    divContenido.innerHTML= ‘‘;

  38. Me olvidaba Jesus me podrias decir para que sirve y que hace esta linea de la funcion Pagina():

    divContenido.innerHTML= ‘‘;

  39. Hola, ¿tiene alguien el código para combinar el ” Ordenar Registros y Paginar resultados ” ? un saludo.

  40. Hola!
    muy bueno, estoy intentando implementarlo en wordpress, pero no me funciona, me lee la tabla donde tengo los post, me reconoce cuantas páginas hay, pero cuando le doy clic a siguiente no hace nada.

    alguna idea?

    el ejemplo imagino que tienes que actualizarlo, el que linkeas no existe, lo he buscado dentro de la web y tiene errores de la base de datos.

    gracias!

  41. Solucionado, no había linkado bien el ajax.js y he tenido que cambiar una ruta de acceso en el ajax.js:

    ajax.open(“GET”, “wp-content/themes/default/paginador.php?pag=”+nropagina);

    gracias por el tutorial, lo buscaba como loco, mil gracias.

  42. Alguien me puede ayudar…este paginador me funciona de lujo, el problema se presenta cuando necesito propagar una variable en la consulta, es decir el query que hago es select * from tabla where campo=$variable;
    AL realizarlo la primera pagina muestra ese filtro, ta al pasar a la segunda, se pierde el valor en la consulta y me muestra todos los datos. NO se de ajax, y conozco algo de PHP

    AYUDA PLEASE

  43. Hola a todos, os cuento mi problema. Estoy intentando implementar este paginador en una aplicación web desarrollada en php, mysql y javascript, pero tengo el problema mencionado de los acentos y eñes. He intentado aplicar los métodos que algunos habeis propuesto y que también he encontrado como solución en otros problemas similares en internet, pero no me funciona nada.

    Estoy aplicandolo en un formulario que muestra en una tabla los registros de una tabla de mysql.

    ¿Alguien podría concretar sobre el código de este ejemplo como solucionar esto?

    Un saludo y muchas gracias de antemano.

  44. El codigo funciona estupendamente, yo quiero que me aparezca asi:

    primero 1,2,3,4,5…..10,11,12) ultimo

    como puedo conseguirlo ?

  45. pana a mi no me corre no me muestra el link por q la funcion no esta definida o hecha ps asi es el error q muestra

    Fatal error: Call to undefined function pagina() in …paginador.php on line 40

  46. ola kisiera tener un paginador con style como este post si alguien sabe de donde sacarlo se lo agredeceria , asi con ese paginador y estilo de los comentarios y de este formulario..

  47. ami me gustaria una paginacion asi de este tipo como se ilustra aqui en cada comentarios como pueden ver esta la paginacion con css y con numeros seria exelente que explicaran este tipo de paginacion como se ilustra en este ejemplo… sii el web master escucha mi llamado seria gernial..

  48. esto es un aprueba para ver el contenido de comentarios si se esta generando con caracteres latinos ÑñÚÓÍÉÁúóíéá

  49. Muchas gracias por tan valioso aporte. Solo comentar que, como en otros artículos, sería muy bueno que colocara un enlace con el código de toda la aplicación, comprimido.

    Agradecería también un artículo donde en vez de un hiperenlace lo que se colocara fuera un botón, algo así como para recorrer la tabla registro a registro, que al dar click en el botón “siguiente” apareciera el siguiente registro, y al dar click en “atrás” apareciera el anterior.

    Agradezco mucho su invaluable colaboración; esta página me ha sido de gran utilidad.

  50. Me marca un error, primero copie el codigo de cada pagina tal y como lo menciona, pero al correrlo me marca este error:

    Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in C:\wamp\www\paginacion\paginacion3\paginador.php on line 48

    lo que hice aqui fue que concatene las siguientes lineas.

    ANTES DE CONCATENAR:

    //desplazamiento
    echo “Primero “;
    if($PagAct>1) echo “Anterior “;
    echo “Pagina “.$PagAct.”/”.$PagUlt.”“;
    if($PagAct< $PagUlt) echo " Siguiente “;
    echo “
    Ultimo“;

    DESPUES DE CONCATENAR:

    echo “Primero “;
    if($PagAct>1) echo “Anterior “;
    echo “Pagina “.$PagAct.”/”.$PagUlt.”“;
    if($PagAct< $PagUlt) echo " Siguiente “;
    echo “
    Ultimo“;

    SALE ESTE RESULTADO.

    Nombres Departamento Sueldo

    Alex Castillo Contabilidad 800
    Ana Maria Logistica 800
    David liñan Logistica 500
    David Vilchez Contabilidad 550

    Fatal error: Call to undefined function Pagina() in C:\wamp\www\paginacion\paginacion3\paginador.php on line 48

    y no sale la paginacion.

    Despues mire el codigo de Primitivo R. Montero
    y remplaze el bloque siguiente que por esas lineas marcaba el error y ya funciona

    //desplazamiento
    echo “Primero “;
    if($PagAct>1) echo “Anterior “;
    echo “Pagina “.$PagAct.”/”.$PagUlt.”“;
    if($PagAct< $PagUlt) echo " Siguiente “;
    echo “
    Ultimo“;
    ?>

    Alguien sabe a que se debe?

  51. seria bueno que den el archivo entero, pero mejor que te lo explique para que te esfuerce en hacerlo, otra que como seria un mejor paginado pero ya con diseño css, quedaria mucho mejor

  52. Hola, un comentario, yo tengo una base de datos de productos y con muchas categorias, al ordenar los productos no quisiera perder el codigo de categoria para poder listar en orden solo esa categoria, no se si se puede incluir esto en el ajax u otra funcion.

  53. mae vviendo el tuto que se nos afrece esta muy bueno pero al intentar hacerlo este me mustra todo pero los links de primero atras siguiente y ultimo me los imprime como etiquetas y no como links lo cual no encuentro la forma de hacerlo
    si alguien me puede ayudar con mandarme el codigo corregido al correo :josed1212@hotmail.com
    se le agradeceria en puta desde costa rica muchas gracias de antemano y pura vida

  54. @Juan Luis: El error mysql_fetch_array() ocurre cuando esta mal formulada la consulta, revisa bien que corresponda tal como esta en tu BD con minusculas o mayusculas.

  55. Hola Jesús: Gracias por resolverme la duda anterior, tenías razón, la consulta estaba mal formulada y después de corregirla, no me funcionan los enlaces; siempre estoy en la página 1 aunque le de a la siguieten, última, et. no me muevo de aquí.
    ¿Me puedes echar una mano?.
    Gracias de nuevo.

    Esta es la parte del código que no me funciona.
    if($Res>0) {
    $PagUlt=floor($PagUlt)+1;
    echo “Primera “;}
    if($PagAct>1) { echo “Anterior “;
    echo “Pagina “.$PagAct.”/”.$PagUlt.”“;}
    if($PagAct< $PagUlt) {echo " Siguiente “;
    echo “
    Ultimo“;}

  56. Saludos. Muchas gracias por este aporte, me ha aclarado una cantidad de dudas que tenía al respecto.
    Tengo una inquietud, necesito hacer lo mismo que ud hizo aquí pero utilizando en todo momento POST, nunca GET para el paso de los parámetros, quisiera saber si me puede orientar un poco acerca de los cambios necesarios para que funcione de este modo.
    De antemano muchas gracias por su atención.

  57. Excelente articulo, pero como quedaria esto si se le agregar filtros, es decir si pongo antes de mostrar los datos paginados filtrar por sueldo, departamento, etc.. y mantener los datos filtros.

    Agradeceria que me ayudaras.

  58. Buenas, felicidades por el blog.
    Estoy usando el script éste de paginación y me va de maravilla.

    El problema es que me gustaria saber como podria hacer para que la paginación saliera por numeros y no como sale ahora “Primero 1/10 Siguiente Ultimo”.

    ¿No estaria mejor asi?:
    Primero|1,2,3…10|Ultimo

  59. buenas, me sirvio de mucha la paginacion ajax. mi duda es al siguiente.

    si quiero por usar la funcion show/hidde de jquery en el paginador.php (incluyo en index.php el jquery.js) no me funciona…

    en paginado.php pongo el codigo del show/hide que seria este

    y en como dije anteriormente incluyo el jquery.js en el index.php

    salu2 y gracias

  60. buenas de nuevo, no seria mejor crear una funcion … o sea si tenemos que ahcer esto cada vez que queremos mostrar datos seria bueno llamar a una sola funcion y pasar solo los parametros del string SQL.

    salu2 ymuy bueno este espacio

  61. Para que publican algo que no sirve

    Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in C:\wamp\www\prueba\paginador.php on line 40

  62. amigo esta muy chevere tu blog solamente que tengo un problema con el codigo me salie un error el paginaodr.php en la parte de

    //desplazamiento

    echo “ Primero “;
    if($PagAct>1) echo “Anterior“;
    echo “Pagina “.$PagAct.”/”.$PagUlt.”“;
    if($PagAct< $PagUlt) echo " Siguiente “;
    echo “
    Ultimo“;

    este es el error q muestra
    Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in C:\wamp\www\prueba\paginador.php on line 40

    espero q me puedas ayudar de antemano muchas gracias

  63. @fernando:
    Tienes que escapar las comillas de dentro de las comillas del comando echo por ejemplo:

    echo “Esto es una prueba \”Importante\””;

    echo ‘Esto es una prueba \’Importante\”;

    echo ‘Aqui no es “Necesario”‘;

    Saludos

  64. Por que hacen las cosas mas complicada se ponen a axplicar y el codigo vota mas errores por que no colocan el codigo descargable da la imprecion que se hiso por salir del paso. me sale el mismo error de muchos la verdad mejor no coloquen nada si esta MALO.

  65. La solucion es simple tienes que escapar las comillas pues. Jesus tiene razón. Con respecto a nuestro amigo fermin Mercado,sería bueno que en ves de criticar seas tu quien suba un ejemplo para ver tus capacidades. Solo criticas y no aportas en nada. Hay que pensar un poco antes de hablar

    Primero

  66. El resultado de la paginación está EXCELENTE! Pero tengo una consulta: Es posible parametrizar la consulta SQL? es decir, capturar una variable desde un formulario y que se ejecute como:” SELECT * from empleados where=$variable .

    Aguardo tu comentario.

    Victor.

  67. @virticius

    Claro que es posible. Puedes recoger el contenido de un formulario mediante la variable $_POST[] y armar una consulta. Seria bueno que menciones para que situación piensa usarlo.

  68. OK, en mi caso, tengo una tabla con mas de 10.000 registros y se me hace muy poco practico mostrar todos los registros de buenas a primera. Por esa razón, creí necesario agregar una caja de texto y mostrar solo los registros que interesan al usuario.

    PD: pude agregar dicha caja de texto, pero al consultar, solo me muestra la primera página de la consulta (no funciona el link de siguiente). Probablemente necesite pasar parámetros desde el ajax.js, podrías ayudarme por favor?

  69. hola yo he visto este script pq estaba buscando exactamente programar con ajax php y sql
    pero hay algo q no entiendo, y es para q sirve la variable $con????
    esta en el codigo cuando hace el query del select, y en mi editor me lo pone como error y nose para q sirve, ademas yo lo hago de otra forma el select para no mezclar capa logica con presentacion.
    si supiera lo q hace podria modificarlo para q me fuera bien, muchas gracias
    muy bien echo el aporte, si señor
    Saludos

  70. hola como esta la paginacion no me funciona me sale esto
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:AppServwwwpaginar_resultadospaginador.php on line 17

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:AppServwwwpaginar_resultadospaginador.php on line 26

    y de verdad no se por que si me pueden ayudar gracias

  71. ¡¡Una maravilla de paginador!!

    Al usarlo, he tenido una necesidad muy concreta: ¿Cómo se puede liberar la memoria, el valor de las variables: página siguiente, anterior, primera y última; para poder usarlas en otro HTML?

    Es decir, estoy usando el ejercicio con una condicional simple WHERE. Para que me devuelva todos los que están en el deparamento y se llaman Juan, por ejempo; ahí va bien. Pero a la hora de usar otro html, con otro paginador, donde pongo otra condicional: todos los que están en el departamento y se llaman Luis; al dar siguiente o anterior, me manda a las páginas de la primera condicional: los que se llaman Juan.

    No sé si me pude dar a entender.

  72. @jesusvld

    Hola me parece excelente el paginador que desarrollaste. Pero la primera vez que lo probe andubo perfectamente. Al recargar la misma pagina ya no me funciona mas el Siguiente, Ultimo, etc.

    Sabes a que se deberia esto?

    Gracias por tu aporte

    Saludos

  73. Estimados, podrian poner los archivos con los que se genera el ejemplo que muestran?. Porque al copiar el codigo que esta en la explicacion, en la primer paginacion me muestra todo ok, pero cuando voy a la siguiente/siguinetes me tira este error.

    mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:wampwww2paginador.php on line 14

    Saludos y gracias!

  74. jesusvld, millones de gracias!
    Me baje el codigo fuente y me anda perfecto, tenia un problemilla con las comillas.
    Exelente el post, luego posteo la pag sobre la que lo voy a implementar para que la veas.
    Saludos y nuevamente mil gracias!

  75. Antes que nada un agradecimiento por el codigo , quisiera saber si hay alguna forma de hacer una especie de “recarga” de la tabla con algun boton o link.

    Gracias por su tiempo.

  76. Chido aporte, me funciono sin fallas. Pues de lo poco que empeze leeyendo pienso que muchos les sale el error y no tratan de solucionarlo antes de opinar. hay se ven todos.

  77. Hola, Primero q nada, excelente pagina, esta todo muy ordenado y muy bien explicado.

    aun asi.. no logro q me resulte… en vez de mostrarme los 4 regitros por paginacion.. me muestra los 13 registros q tengo… y al pie de pagina .. me hace la division de cuantas paginas son , en este caso serian 4/4 … pero en todas las paginas muestra los 13 registros…

    cual podria ser el problema?

    gracias..

  78. @danielwish:

    Lo que se me ocurre en estos momentos es revisar las funciones de PHP que hemos usado. Si estan funcionando como debe ser.

    Si todo esta bien aplicado, quizas con el firebug ubicar el problema, quizas sea en la parte de JavaScript.

    Modificastes el código ó lo probastes tal como esta publicado?

    El punto es revisar, haber que nos cuentas luego.

    Saludos

  79. eso es simple podrias asociar tu consulta o mejor el resultadore tu consukta aun campo parameto id el cual permiria lograr eso suerte

  80. mmmmmm¡¡¡¡ sinseramente excelente compare, me salvaste de un miedo tremendo k le tenia a httprequest, pero me di cuenta k es muy sencillo, gracias men sos la leche ¡

  81. hey men, esta a full, pero si te podrias hacer un tuto iguala este pero para hacer un sistema de comentarios como el de esta pagina, k esta chidisima… please men… o date una pequeña explicadita, de como lo podría hacer, estoy comenzandoen esto y me parece muy interesante…

  82. hey bro, no se porque cuando le paso un scan a mi server para encontrar vulnerabilidades encuentra que el archivo paginador.php no es nada seguro, pero no entiendo porque ??? tienes alguna idea, porfa respondeme aqui o a mi mail please… bye

  83. hola, he implementado esta forma de paginacion, pero tengo el problema de que cuando quiero pasar a otra pagina, se me borra la información, o sea no retoma la informacion en la capa que estoy mandando..
    agregue
    divContenido.style.display=”block”;
    ajax.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);

    y tampoco.. :S

  84. ya encontre el error.. que pues.. seguro por mi forma de programacion es permitido..
    agregue al campo ajax.open(…..,true);

    para que me funcionara..
    gracias de todas formas..
    el ejemplo funcionando al 100%
    😀

  85. que tal

    no me sirivio y no se porque me tira los siguientes errores

    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/content/c/r/e/creativostar/html/elearning2009/main/sistema/paginador.php on line 37

    y en esa linea tengo lo siguiente

    dentro de un if
    ($ver = mysqli_fetch_array($reporte)

    y tambien el siguiente error
    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/content/c/r/e/creativostar/html/elearning2009/main/sistema/paginador.php on line 127
    y en esa linea tengo lo siguiente
    dentro de un while
    $ver = mysqli_fetch_array($reporte)

    y mi variable $reporte almacena lo siguiente

    $reporte = $conn->query(“select *
    from reporte_asesor
    where usuario = ‘$name’ or
    profesor LIKE ‘%$name%’
    limit $RegistrosAEmpezar, $RegistrosAMostrar”);

    cual es el error ahi

  86. @Rodrigo Hernan Arriagada Quezada:

    Algo que puedes hacer para evitar eso es colocar un cabecera de texto tipo H1, H2, etc antes de la tabla ó listado con un atributo id definido. Y en los enlaces primero, antes, siguiente, ultimo estableces el atributo href al id de la cabecera. Algo así como hago yo con el listado de los comentarios en esta misma pagina, cuando tu pulsa un numero de pagina en la parte inferior, salta a la parte donde inician los comentarios y luego procede a cargarte la pagina de comentarios deseada.

    Ej. En la parte superior esta

    Comentarios

    .

    En los enlaces que te llevan a la pagina:

    Así saltara de todas formas a la cabecera.

    Espero haya servido el tip.

    Saludos

  87. Hola, antes de nada agradecerte que compartas tu código, es lo estaba buscando. Sin embargo te comento que solo me funciona el onClick siguiente (va de lujo), los de anterior, primero y ultimo no, y no sé por qué (he comprobado que recoge $PagAnt y $PagUlt), si necesitas ver mi código no dejes de decírmelo,pero t cuento que traigo las variables con GET de un formulario.

  88. Hola,

    implementé este paginador y anda muy bien, pero tengo un problema cuando en la consulta SQL incorporo la clausula WHERE, por ejemplo select * from empresas where nom_empresa = $nombre_empresa. En la primera paginacion no hay problema, muestra los datos que necesito, pero al dar clic en el boton siguiente se pierde el valor de la variable $nombre_empresa y por supuesto muestra 0 registros. Como se puede solucionar esto??

    De antemano muchas gracias

  89. La verdad que muy bueno el post, simple, comprensible, 100% efectivo (los probe en casi todos los navegadores y funciona perfectamente)… yo lo he utilizado, obviamente hice unos pequeños cambios… y funciona correctamente…

  90. Hol el post es muy bueno, pero tengo un problema quiero mostrar un solo registro por pagina la primera vez que entro lo hace bien, pero cuando pasa a la segunda hoja se me pierde esto y me muestra la configuracion inicial de 4 registros por paginas, te lo agradeceria si me pudieras colaborar en esta parte, muchas gracias

  91. Holas a todos!!!

    Lo que recomiendo en estas circunstancias es:

    1. Si copiaron el código de esta pagina quizas tengan errores por las comillas simples o dobles. Así que les recomiendo descargar el zip.

    2. Revisar la consulta SQL, es probable que no este bien establecida.

    3. Probar en firefox el addon firebug para revisar las consultas ajax que estan pidiendo y si es correcto los datos que se recibe.

    Prueban y me avisan. Saludos.

  92. Antes de nada comentarte que felicidades por el artículo ya que está claro y conciso, y he conseguido que me funcione perfectamente, pero te comento un problemilla que tengo.

    Tengo estilos en la página, y cuando cambia de página con el paginador se cambia siempre el estilo de letra a negro, y con el fondo negro no se ven la letras, de un principio sale bien pero cuando cambio de pagina se me cambia el estilo.

    Tengo el estilo definido tanto en lo que aqui se denomina “index.php” y en el “paginador.php” pero igualmente cuando carga se cambia el estilo, ¿alguna idea?

    Antes de nada gracias.

  93. Gracias al equipo me he beneficiado con ustedes, gracias a su aporte he podido sacar mi proyecto de ingeneria adelante. Un nmonton de exitos para ustedes desde Venezuela

  94. Hola, como siempre gracias por este buen aporte, pero como han preguntado algunos se presenta el problema que cuando la busqueda en mysql tiene un filtro Where cyuyo valor es una variable, que se encuentra en la pagina index, al hacer click en siguiente esta variable deja de existir ya que el proceso de paginacion se encuentra en otra pagina por lo tanto no muestra mas resultados.
    Espero que me hayan entendido y si alguno sabe la solucion estare muy agradecido.

  95. Hola Jonatan, estoy de paso por aca, jeje, si logre entender tu pregunta, pues la solucion, es que envies la variable que recibiste a la funcion

    function Pagina(nropagina,variableWhere){
    ajax.open(“GET”, “paginador.php?pag=”+nropagina+”&variable=”+variableWhere);
    }

    para que no la pierdas, saludos

  96. hola primero gracias por el aporte pero tengo un problema… la paginacion es correcta cuando yo le doy 2 se muestran 2 productos en la pagina cuando doy 4 iwal pero mi problema es en el texto anterior siguiente o ultimo ya que no hay enlace a otra pagina para ver los demas productos es decir que no hay link a ninguna parte tan solo me aparece como texto.. pido que me ayuden en este problema se los agradeceria mucho que esten bien

  97. Hola nesesito esto mismo realizarlo pero el llamado tendria que ser del html, no puedo incluir el php en html y lo otro que trabajo con smarty alguna idea, probado de diferentes formas pero no resulta, lo otro donde parte la secuencia. gracias.

  98. mi pregunta es la siguiente si la informacion a cargar en la consulta es grande por ejemplo algunos 300 caracteres por linea y la paginacion se hiciera de a 10 registros se demoraria mucho. sera que hay alguna forma de cargar de fila por fila hasta que complete la paginacion de 10 registros, ya que al cargar todo de una se queda? y si la paginacion se hace con menos registros con 5 daria muchas paginas

  99. La verdad es que este (estos) scripts me han sido de muchisima utilidad.
    Fue instalarlos, modificarlos a los requerimientos de mis necesidades y ponerlos a funcionar…
    Nada mas simple.
    Realmente si debiera calificarlos del 1 al 10, pues tendrían un 12…
    Saludos y gracias, ya los tengo como mis favoritos…

  100. buenas tardes.
    Antes que nada quiero felicitarlo por este gran articulo.
    Mi duda es la siguiente:
    usando el ejemplo propuesto, que pasaría si mi cantidad de registros es demasiado grande? por ejemplo, si superara los 300 registros?
    y si yo quisiera encontrar al registro N° 150? tendria que clickear muchas veces en “SIGUIENTE”
    creo que seria necesario incluir numeros de pagina en forma de botones como se aprecia en la portada de ribosomatic.com y en google.
    Intento programar mi propia paginación pero este asunto me parece muy complicado… alguna sugerencia?

  101. PARA PACO…

    PACO SABES QUE PODES HACER….TRATA DE HACER QUE DENTRO DE LAS ETIQUETAS
    echo “

    “.$MostrarFila[‘nombres’].”

    “;
    ALLI PODES HACER REFERENCIA A UN LINK O A UNA IMAGEN..POR EJEMPLO
    echo “

    “;
    eso es en el caso de un link y en el caso de una imagen es la etiqueta en vez de
    espero que me hayas entendido

  102. Gracias amigos por este excelente script pero tengo problemas con los acentos al mostrar registros con acento como lo puedo solucionar gracias

  103. problema de acentos solucionado con utf8_encode(‘$registro’) para los compañeros que tienen este error busquen en gogle como trabaja en consultas while su index debe tener codificacion utf8 en la etiqueta meta

  104. Hola esta muy currado este post sobre paginar, al igual que post de ordenar registros.

    Mi pregunta es: Como se pueden juntar ordenar registros y paginar a la vez porque lo estoy intentando y no me sale. Por favor ayudenme.

    Graciass

  105. Gracias por el ejemplo, que funciona bien, pero en este ejemplo no:
    Tenemos dos páginas: index.php y paginador.php
    Si en index.php creamos una variable ($tabla) y en paginador hacemos una consulta sobre esa variable va bien la primera página pero en la siguiente página no muestra nada, y es porque la variable que antes tenía se pierde. ¿Sabéis por qué puede ser eso?

  106. Hola comenta :
    2010-04-25 20:58:55
    Hola Jonatan, estoy de paso por aca, jeje, si logre entender tu pregunta, pues la solucion, es que envies la variable que recibiste a la funcion

    function Pagina(nropagina,variableWhere){
    ajax.open(“GET”, “paginador.php?pag=”+nropagina+”&variable=”+variableWhere);
    }

    Exactamente como defino la variable, porque debería estar definida dentro del archivo paginador.php y poder usarla dentro de ajax.js ???

    Por cierto muy buen codigo!

  107. Hola,lo primero gracias por el articulo,he estado probando el codigo y queria adaptarlo a que me mostraria los datos siendo variables, ej. empleados>los muestra pero por ejemplo otra tabla que serian jefes y los mostraria, consigo que me enseñe la primera pagina pero al darle a siguiente la pagina 2,3…. son siempre las de la tabla empleados.he estao mirando por todos lados pero no se como cambiarlo, haber si me podias decir como cambiar las demas paginas.
    gracias

  108. ola esta excelente tu aporte..pero tenia una pregunta…como lo arias para que te muestre las paginas directamente, osea
    pagina 1,2,3 como links asi solo le tendria k dar a la pagina 3 para mostrar los datos en esa pagina…
    me gustaria aserlo asi pero no se como, si me ayudaras seria genial..gracias

  109. Hola, se ve muy bien tu ejemplo, este es mi segunda prueba en PHP, disculpa si es una pregunta muy tonta, solo que al tratar de hacer tu ejemplo que marca un eror asi:

    mysql_query() expects parameter 2 to be resource, null given in

    entiendo que es algo elemental pero aun no estoy ni en ese nivel. Gracias

  110. Estoy tratando de implementar tu codigo de paginación y no me funciona, no se si será porque en la consulta estoy mezclando datos de 3 tablas diferentes, solo me muestra el primer resultado de la paginación pero al dar siguiente se pierde todo y ya no me muestra ni la siguiente ni la última y si me regreso a la principal tampoco me la muestra, me podrían ayudar?????

  111. una pregunta yo he adaptado el codigo a mis necesidades y agradezco por el aporte que usted ha hecho, solo tengo una duda como hago para que los titulos de las columnas queden uniformes, he probado ya mucho y no se como hacerlo, agradecere algun tip.

  112. exelente explicacion la verdad me haz salvado la vida, solo tengo una duda espero me puedas ayudar, tengo una pagina en la cual en un div debo tener un formulario de busqueda, al introducir los datos hago
    click en el formulario y necesito que en este mismo div quiero cargar los registro encontrados? como podria hacerlo?, muchas gracias y de nuevo exelente articulo

  113. hola soy un principiante en esto pero algo asi creo que es lo que necesito,
    estoy haciendo una pequeña pagina la idea es hacer dinamica en todo sentido, estoy creando un menu que que se crea a partir de una tabla en mysql. hasta este punto todo bien, lo que estoy intentando es que al dar click en un enlace del menu, la informacion de ese menu me la carge en un DiV que esta en el centro, pero no quiero que recarque toda la pagina,
    no se me pueden orientar,

  114. hola podrian echarme la mano para poder meter este ejemplo en una web modular de antemano muchas gracias amigos

  115. Excelente post. Muchas gracias pues esto exactamente estaba buscando. Toca copiar y pegar por ahora pues no entiendo mucho de Ajax.

    Muchas Gracias.

  116. Avís per a navegants: Hay que meter el (language=”javascript” ) en la llamda a la hoja ajax.js, caso contrario no funciona:

  117. saludos, que buen blog, me sirvió de mucho, tengo una duda cuando pongo el código en un base de datos dinámica, y me muestra digamos que 1/2 y luego le hago clic en el siguiente, desaparece el 1/2 y aparece 2/7(ya que muestra toda la base) no se porque me manda llamar toda si le indico en el select que busque lo que indicamos en una caja de texto, soy novato espero me puedas explicar,gracias.

  118. se podría manipular este código para que el paginador se desplegué hacia abajo?
    me explico
    en la pagina se nos muestran 10 registros de la DB
    pero si queremos ver mas pincharemos en el botón
    (ver mas), donde en lugar de mostrarnos los siguientes 10 nos muestre los 10 mas los 10 que tenemos actuales y que esto se valla mostrando hacia abajo.
    espero verme explicado bien.

  119. Hola, muy bueno el post, estoy con un problema que es el siguiente:
    Quiero tomar de la base una imagen y ponerla aqui: echo “

    “.$MostrarFila[‘nombres’].”

    “; que me la muestre en la tabla pero no se como, les pido ayuda. gracias

  120. es muy bueno el tutorial, pero quiero que me lo ordene de dos formas esque ahi nada masd muestra el orden por nombre, pero yo quiero ordenarlo de 2 maneras ya lo intente con un order by pero nada mas me muestra el orden de uno como le hago para que me haga las dos funciones alguien me podria ayudar… gracias…

  121. Muy buen post…. pero tiene un gran problema… por ejemplo, si se traen imágenes de una base de datos y se le aplica una galería como la de lightbox, esta funciona perfectamente en el primer pantallazo, pero luego de pasar a la página dos o mas (o hasta inclusive, devolverse a la página uno (1)), ya deja de funcionar la galería (o si se cuenta con más scripts estos dejan de funcionar).

    Alguien sabe como solucionar este problema y saben cual puede ser el motivo del por que esto sucede.

    Agradezco mucho a quien me pueda colaborar.

  122. una pregunta si usare este para paginar pero a muchas paginas, como puedo evitar usar paginador.php en ajax.

    Es decir una forma de usarlo sin decir a que pagina enviarle el parametro por GET!

  123. Hola, estoy intentando modificar un poco el codigo, para que el paginador verie dependiendo de una busqueda.

    Uno de los problemas que tengo es que al hacer la nueva busqueda lo hace perfecto el paginador me divide las nuevas paginas, pero cuando le doy a “Siguiente” me vuelve a cargar el paginador pero como si la consulta no tuviera un filtro.

    Por ejemplo tengo edades de 0 a 100 años.
    23
    24
    45
    67
    77
    y en mi filtro pongo que solo salgan las que tengan un 2.
    deberian salir 23 y 24
    esto lo ahce pero si le doy a siguiente me las vuelve a sacar todas.

    Me podrias ayudar?

  124. que significa este pedazo de codigo if (ajax.readyState==4) en el ajax.js, en especifico el 4 ¿significa el número de registros a mostrar?

  125. he acondicionado el ejemplo y me funciona en la primera consulta o primera vista, pero, en la siguiente pagina los registros ya no se ven igual, en vez de mostrar acentos muestra signos de interrogación ?, ya que en la bd contiene oraciones con acentos y ñ.
    que puedo hacer?

  126. Hola…Saben alguna solucion para esto??
    Ya meti la variable al ajax.js, pero sigue perdiendola.
    gracias por vuestra colaboracion

    Jonatan comenta :
    2010-04-23 12:51:17
    Hola, como siempre gracias por este buen aporte, pero como han preguntado algunos se presenta el problema que cuando la busqueda en mysql tiene un filtro Where cyuyo valor es una variable, que se encuentra en la pagina index, al hacer click en siguiente esta variable deja de existir ya que el proceso de paginacion se encuentra en otra pagina por lo tanto no muestra mas resultados.
    Espero que me hayan entendido y si alguno sabe la solucion estare muy agradecido.

  127. Porfavor, que alguien tenga la amabilidad de contestar el PROBLEMA que tiene la paginación cuando se incorpora un filtro de datos mediante una cláusula WHERE. En mi caso hay una parte del codigo donde pongo WHERE dni_alu=’1005′ (cuando yo pongo el valor a filtrar en la paginacion funciona muy bien)Sin embargo cuando pongo WHERE dni_alu=’$_REQUEST[txtDni]'(para que capture el dato y segun eso filtre los registros paginados. se malogra todo.)

  128. oyes brother esta muy bueno oyes no tienes unos ejemplos para aprender ajax aun no se eso si tienes unos ejemplos simple para aprender ahi me avisas y gracias por el ejemplo ;D

  129. Estimado jesusvld, gracias por el aporte y un PALO en la cabeza para todos aquellos que dicen que el codigo no funciona pues lo primero que tienen que hacer es bajarse el codigo y montarlo en su db y se darán cuenta que esta de lujo.
    Ahora mi consulta…
    Quiero que $RegistrosAMostrar sea seleccionado de una lista, para eso cree el formulario:

    Links por Page

    y también agregue al ajax.js
    function enviar()
    { document.forms[“n_registros”].submit ();}

    y funciona!! el tema es que al cambiar a la siguiente pagina se pierde la variable POST! y $RegistrosAMostrar se queda con el valor por default…

    como puedo evitar esto??

  130. Genio la verdad que me salvaste la vida, es el único adaptable 100% todos los demás que andan dando vuelta por la web no sirven para nada. GRACIAS TE DEBO UNA.

  131. Hola amigos… estoy desarrollando una aplicación para mostrar una tabla con una paginación, pero dentro de la tabla debo ordenar los registros para mostrarlos; en primer lugar ordenar por codigo y dentro de ese codigo ordenar por tipo de producto.. Se que es un pastel, por eso necesito ayuda.

  132. Muy util. Funciona muy bien. Me hubiera gustado no tener que realizar la consulta a la BDD cada vez que se recarga el div, pero parece ser que con AJAX esto, o no es posible o es mas complicado de lo que me gustaria.

  133. Hola que tal…es un excelente codigo, muchas gracias por compartirlo, pero solo tengo una pregunta, tengo un form el cual envia 2 variables en el archivo paginador $uno = $_GET[&apos;cont&apos;]; y $dos = $_GET[&apos;cont2&apos;]; , estas variables las necesito para los querys de paginacion, quedan de la sigueinte manera …

    $Resultado=mysql_query("SELECT * FROM autos where $uno = &apos;$dos&apos; ORDER BY id LIMIT $RegistrosAEmpezar, $RegistrosAMostrar",$con);

    $NroRegistros=mysql_num_rows(mysql_query("SELECT * FROM autos where $uno = &apos;$dos&apos; ORDER by id",$con));

    Si me muestra los datos en la tabla y la cantidad de paginas que deberian de ser, el problema es que al momento de dar click en siguiente, ya no muestra nada y me marca error en los dos querys del archivo paginador. Mi teoria es que al hacer click en sigueinte se pierde el valor de las variables en los querys, porque las imprimo y no tienen valor. A que se debe eso y como podria solucionarlo

    Saludos.

    P.D. Las variables $uno = $_GET[&apos;cont&apos;]; y $dos = $_GET[&apos;cont2&apos;]; las he colocado dentro del div &apos;contenido&apos; y afuera y es lo mismo.

  134. Hola, excelente funciona muy bien, lo tengo funcionando y lo adapte a ubna pagina depruba, sinproblema alguno, solo queda algo por hacer. ¿Cómo poder dar un color a cada renglon para identificarlos,, hacer que las columnas tengan diferente ancho y bueno en general como aplicar un css, especifico para la tbla, la letra, el fondolos colores, etc. de ver da apreciaria mcuho tu apoyo, gracias

  135. AMIGO MUCHAS GRACIAS POR COMPRTIR TUS CONOCIMINETOS PERO TENGOUN PROBLEMA EL DETALLE ES QUE EN LA CONSULTA LE MANDO UNA VARIABLE ME REFIERO EN EL ARCHIVOPAGINACION AHI MANDO A IMPRIMI R UNA VARIABLE PEROESTA SE BORRA CUANDOOBIAMENTE LE DOY SIGUIENTE OPRIMERO PORLO QUE ESTUBE ESTUDIANDOES POR ELMETODO GET NOAY UNA FORMA PARA IMPLEMENTARLE CON POST O ALGUNA SOLUCION PARA QUE NO SE RECARGUE DE ANTEANO MUCHAS GRACIAS

  136. Me funciona correctamente, lo único que quiero modificar los estilos de los resultados de la tabla, no se si me explico, es decir, darles diseño. No quiero mostrarlo con tablas si no a través de un div con listas ¿cómo puedo acerlo

  137. Hola, me funciona correctamente, lo único que no se como utilizar mas de una vez la paginación para distintos divs con distintos registros, los parámetros se entrecruzan y me da error. Por favor ¿me podría decir como arreglarlo?

  138. El tutorial en chrome me funciona correctamente pero en IE me da problemas de tildes, no se como solucionarlo, por favor dime como hacerlo.

Comments are closed.