entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Como se puede paginar registros mysql mostrándolos uno por uno?

Buenas hoy les vengo con una nueva inquietud... resulta que estoy mostrando en una sección de mi web (realizada con jquery mobile) una información del ultimo registro, cuyo código le pongo aquí abajo (zona donde esta el código php) y asi se ve en el cell: http://waybill.hyeride.com/index.php#info

<div id="info" data-role="page">

    <div data-theme="b" data-position="fixed" data-role="header">
        <div data-role="navbar">
            <ul>
                <li><a data-transition="slidefade" data-icon="home" href="#home">Home</a></li>
                <li><a data-transition="slidefade" data-icon="edit" href="#addwaybill">Add Way Bill</a></li>
                <li><a data-transition="slidefade" data-icon="bars" href="#listwaybill">Way Bill List</a></li>
                <li><a data-transition="slidefade" href="#info" data-icon="info" class="ui-btn-active ui-state-persist">Way Bill Show</a></li>
            </ul>
        </div>
    </div>

    <div data-role="content">

    <h4>Way Bill</h4>

    <?php

    include("conexion/conexion.php");

    ?>

    <?php
        $consulta=mysql_query("SELECT * FROM waybill ORDER BY id DESC LIMIT 1") or die(mysql_error());
        $registro=mysql_fetch_array($consulta);
        echo "<table id='cuadro' cellpadding='0' cellspacing='0'>";
        do{
            $ids=$registro['id'];
            $dat=$registro['date'];
            $amo=$registro['amount'];
            $com=$registro['company'];
            $tc=$registro['tcp'];
            $dri=$registro['driver'];
            $lic=$registro['licence'];
            $npe=$registro['npersons'];
            $pas=$registro['passenger'];
            $pic=$registro['pickup'];
            $cip=$registro['citypickup'];
            $dro=$registro['dropoff'];
            $cid=$registro['citydropoff'];
            $ter=$registro['terminal'];
            $fli=$registro['flight'];
            $tim=$registro['time'];
        echo "<bill><date><span2>Date:</span2><resultado>$dat</resultado></date> <amount><span2>Amount:</span2>  <resultado>$amo</resultado></amount></br> <company><span2>Campany Name:</span2> <resultado>$com</resultado></company> <tcp><span2>TCP#:</span2><resultado>$tc</resultado></tcp></br><driver><span2>Driver Name:</span2><resultado>$dri</resultado></driver><licence><span2>Veh. Licence Plate: </span2><resultado>$lic</resultado></licence></br><npersonas><span2>No.of Person in Group: </span2><resultado>$npe</resultado></npersonas><pasajero><span2>Passenger Name: </span2><resultado><b>$pas</b></resultado></pasajero></br> <pickup><span2>Pick-Up Location: </span2><resultado>$pic</resultado></pickup></br><citypickup><span2>City Pickup: </span2><resultado>$cip</resultado></citypickup></br> <dropoff><span2>Drop-off Location: </span2><resultado>$dro</resultado></dropoff></br> <citydropoff><span2>City Dropoff: </span2><resultado>$cid</resultado></citydropoff></br><terminales><span2>Airline/Terminal: </span2><resultado>$ter</resultado></terminales> <vuelo><span2>Flight #: </span2> <resultado>$fli</resultado></vuelo></br><times><span2>Time: </span2><resultado>$tim</resultado></times>";
        }while($registro=mysql_fetch_array($consulta));
        echo "</table>";
    ?>
    </div>

    <div data-role="footer" id="footer">
        <div id="corte"> </div>
        Pursuant to Public Utilities Commissions General Order 157-C, Section 3.01 # Waybills must be completed
        filled out and driver must have it in their possession when conducting business at Los Angeles.
        <center>International Airport</center>
    </div>
</div>

Ahora lo que necesitaría es poner dos botones uno sea BACK y otro que sea NEXT para pasar los registros uno por uno en dicha pagina, ahora la lista debería empezar desde el mas actual hasta el mas antiguo. (dicha referencia se tomaría desde el key 'id')

Espero este me entiendan lo explicado de lo que necesito y desde ya muchas gracias por su tiempo.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola Chirola30,

paginadores para MySQL debe de haber cientos: mi primer sugerencia es que busques alguno, por ejemplo en www.phpclasses.org y lo uses.

De todas maneras, la cuestión de la paginación, independientemente de si vas de a 1 o de a100, es idéntica desde el código, y consiste en variar el valor del LIMIT de la consulta para que muestre la posición de la query que quieras. Esto además es independiente del ID de la tabla, ya que la "página" a mostrar será siempre consecutiva, pero el ID de la tabla no tiene por qué serlo.

Tenés que modificar tu query para que sea, para cada registro a mostrar, así:

SELECT * FROM waybill ORDER BY id DESC LIMIT 1, 1; -- Primera página
SELECT * FROM waybill ORDER BY id DESC LIMIT 2, 1; -- Segunda página
SELECT * FROM waybill ORDER BY id DESC LIMIT 3, 1; -- Tercera página
SELECT * FROM waybill ORDER BY id DESC LIMIT N, 1; -- Enésima página

Como se ve, el primer valor del LIMIT es desde que registro mostrar, y el segundo es cuantos registros devuelve la query.

Esto significa que tenés que pasarte como parámetro la página que quereés ver (no el ID del registro) para que tu query sea:

$consulta=mysql_query("SELECT * FROM waybill ORDER BY id DESC LIMIT $pagina 1") or die(mysql_error());

El valor de la variable $pagina, si no existe, lo podrás en 1 antes de la query, y si existe, el botón de "siguiente" enviará el valor $pagina+1 y el de "atrás" el valor de $pagina-1

Cómo tomes el valor de la paǵina dependerá de si lo enviás por GET o POST. Por proligidad, está bueno que si página es 0 el botón de "atrás" esté deshabilitado, y si vale la cantidad máxima de registros (cosa que tendrás que comprobar con otra query) el botón de "siguiente" esté deshabilitado.

Saludos cordiales!

0voto

carlossevi comentado

La definición de la variable $pagina debe estar antes de la creación de la $consulta ya que la segunda utiliza el número de página.

0voto

Leonardo-Tadei comentado

Tal y como dice Carlos, tenés que definir las variables antes de usarlas...

0voto

chirola30 comentado

así lo he puesto y sigue sin funcionarme, ademas aparece el botón siguiente solamente, el anterior no aparece, que cosa estare haciendo mal en este código para que no me funcione ni responda?

 <?php

    include("conexion/conexion.php");

    ?>
<?php
        $pagina = 1;
        if(isset($_GET['pagina'])) {
        $pagina = intval($_GET['pagina']);
}
        $consulta=mysql_query("SELECT * FROM waybill ORDER BY id DESC LIMIT $pagina , 1") or die(mysql_error());
        $registro=mysql_fetch_array($consulta);
        echo "<table id='cuadro' cellpadding='0' cellspacing='0'>";
        do{
            $ids=$registro['id'];
            $dat=$registro['date'];
            $amo=$registro['amount'];
            $com=$registro['company'];
            $tc=$registro['tcp'];
            $dri=$registro['driver'];
            $lic=$registro['licence'];
            $npe=$registro['npersons'];
            $pas=$registro['passenger'];
            $pic=$registro['pickup'];
            $cip=$registro['citypickup'];
            $dro=$registro['dropoff'];
            $cid=$registro['citydropoff'];
            $ter=$registro['terminal'];
            $fli=$registro['flight'];
            $tim=$registro['time'];
        echo "<bill><date><span2>Date:</span2><resultado>$dat</resultado></date> <amount><span2>Amount:</span2>  <resultado>$amo</resultado></amount></br> <company><span2>Campany Name:</span2> <resultado>$com</resultado></company> <tcp><span2>TCP#:</span2><resultado>$tc</resultado></tcp></br><driver><span2>Driver Name:</span2><resultado>$dri</resultado></driver><licence><span2>Veh. Licence Plate: </span2><resultado>$lic</resultado></licence></br><npersonas><span2>No.of Person in Group: </span2><resultado>$npe</resultado></npersonas><pasajero><span2>Passenger Name: </span2><resultado><b>$pas</b></resultado></pasajero></br> <pickup><span2>Pick-Up Location: </span2><resultado>$pic</resultado></pickup></br><citypickup><span2>City Pickup: </span2><resultado>$cip</resultado></citypickup></br> <dropoff><span2>Drop-off Location: </span2><resultado>$dro</resultado></dropoff></br> <citydropoff><span2>City Dropoff: </span2><resultado>$cid</resultado></citydropoff></br><terminales><span2>Airline/Terminal: </span2><resultado>$ter</resultado></terminales> <vuelo><span2>Flight #: </span2> <resultado>$fli</resultado></vuelo></br><times><span2>Time: </span2><resultado>$tim</resultado></times>";

        $anterior = $pagina-1;
        $siguiente = $pagina+1;
        echo "<a href='?pagina=$anterior#info>anterior</a> - <a href='?pagina=$siguiente#info>siguiente</a>";

        }while($registro=mysql_fetch_array($consulta));
        echo "</table>";
    ?>

0voto

carlossevi comentado

Ahora tu página carga bien inicialmente pero los enlaces lo tienes mal creados. El fallo está en esta línea:

echo "<a href='?pagina=$anterior#info>anterior</a> - <a href='?pagina=$siguiente#info>siguiente</a>";

0voto

Leonardo-Tadei comentado

Hola @chirola30,

los enlaces los tenés ahora bien generados. Si te fijás cargar las páginas:

http://waybill.hyeride.com/index.php?pagina=2#info
http://waybill.hyeride.com/index.php?pagina=3#info
http://waybill.hyeride.com/index.php?pagina=4#info

te muestran los registro correctos.

Creo que no te anda porque debés tener previamente una directiva JavaScript que está anulando el comportamiento de los enlaces A, que es simplemente cargar una página.

Tal vez debas crear los enlaces poniendo las clases de JQueryMobile, como tenés en la cabecera con los controles, para que sí funcionen, pero esto depende de detalles de tu aplicación y no sabría decirte exactamente cómo escribirlos o si te conviene poner un formulario HTML con un botón para el "anterior" y el "siguiente"

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta