Foros del Web » Programando para Internet » PHP »

Paginar Resultados

Estas en el tema de Paginar Resultados en el foro de PHP en Foros del Web. Alguien me daria una mano en la explicacion de como se paginan consultas hechas a una BD MySQL????...
  #1 (permalink)  
Antiguo 24/07/2003, 16:59
Avatar de pabloazorin  
Fecha de Ingreso: junio-2003
Ubicación: Pilar, Buenos Aires.
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 1
Paginar Resultados

Alguien me daria una mano en la explicacion de como se paginan consultas hechas a una BD MySQL????
__________________
Pablo S. Azorin
[email protected]
  #2 (permalink)  
Antiguo 24/07/2003, 17:30
 
Fecha de Ingreso: marzo-2003
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 0
http://www.web-studio.com.ar/proyect...umentacion.htm

salu2
  #3 (permalink)  
Antiguo 24/07/2003, 17:55
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
si el de web-studio para mi entender es el mejor...:)
__________________
3w.valenciadjs.com
3w.laislatv.com
  #4 (permalink)  
Antiguo 24/07/2003, 18:18
Avatar de dooky  
Fecha de Ingreso: diciembre-2002
Ubicación: echo$REMOTE_ADDR;
Mensajes: 493
Antigüedad: 15 años
Puntos: 0
Código PHP:
<html>
<head>
<title>Páginación de resultados</title>
</head>
<body bgcolor=#FFFFFF> 
<?
// Datos de conexión a la base
$base="nombredelabase";
$con=mysql_connect(servidor,usuario,password);
mysql_select_db($base,$con);

if (!isset(
$pg))
$pg 0// $pg es la pagina actual
$cantidad=10// cantidad de resultados por página
$inicial $pg $cantidad;

$pegar "SELECT * FROM tabla ORDER BY titulo LIMIT $inicial,$cantidad";
$cad mysql_db_query($base,$pegar) or die (mysql_error());

$contar "SELECT * FROM tabla ORDER BY titulo"
$contarokmysql_db_query($base,$contar);
$total_records mysql_num_rows($contarok);
$pages intval($total_records $cantidad);

// Imprimiendo los resultados
while($array mysql_fetch_array($cad)) {
echo 
$array['titulo']."<br>";


// Cerramos la conexión a la base
$con=mysql_close($con);

// Creando los enlaces de paginación
echo "<p>";
if (
$pg <> 0)
{
$url $pg 1;
echo 
"<a href='paginar.php?pg=".$url."'>&laquo; Anterior</a>&nbsp;";
}
else {
echo 
" ";
}

for (
$i 0$i<($pages 1); $i++) {
if (
$i == $pg) {
echo 
"<font face=Arial size=2 color=ff0000><b>&nbsp;$i&nbsp;</b></font>";
}
else {
echo 
"<a href='paginar.php?pg=".$i."'>".$i."</a>&nbsp;";
}
}

if (
$pg $pages) {
$url $pg 1;
echo 
"<a href='paginar.php?pg=".$url."'>Siguiente &raquo;</a>";
}
else {
echo 
" ";
}
echo 
"</p>";
?>
</body>
</html>
__________________
Eduardo Toloza
SatisFactor.io - NPS
  #5 (permalink)  
Antiguo 24/07/2003, 18:25
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

¿Quieres el codigo o quieres una explicacion en texto de como se haria? Bueno, veo que con el codigo ya te han ayudado. Y la explicacion se puede sacar facilmente del codigo. Tambien puees revisar este otro mensaje http://www.forosdelweb.com/s/msg143725.html .

Saludos.

PD: dooky, revisa http://www.forosdelweb.com/s/msg143725.html ya que Zertiko le ha encontrado un fallo a ese codigo.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 24/07/2003, 18:32
Avatar de dooky  
Fecha de Ingreso: diciembre-2002
Ubicación: echo$REMOTE_ADDR;
Mensajes: 493
Antigüedad: 15 años
Puntos: 0
ok amigo.. aunque yo uso ese codigo..
__________________
Eduardo Toloza
SatisFactor.io - NPS
  #7 (permalink)  
Antiguo 09/11/2003, 08:06
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... y para que funcione con el register_globals en OFF, sólo hay que cambiar estas líneas:
Código PHP:
if (!isset($pg))
$pg 0// $pg es la pagina actual 
Por estas otras
Código PHP:
if (!isset($_GET['pg'])){
    
$pg 0// $pg es la pagina actual
}else{
    
$pg=$_GET['pg'];

Saludos
  #8 (permalink)  
Antiguo 09/11/2003, 08:31
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Me pareció muy didáctico y fácil este script de dooky para paginar. Sobre los errores de los que se habla arriba. Hice algunas correciones.

Éste sería el código final donde he corregido lo siguiente:
-Funciona con register_globals en OFF.
-Corregido el error por el cual se mostraba una página vacía al final cuando era exacto el número de registros dividido por la cantidad de registros a mostrar por página. Es decir, cuando $total_records / $cantidad = entero. Error detectado por Zertiko y corregido por josemi en: http://www.forosdelweb.com/s/msg143725.html
-Uso de $_SERVER['PHP_SELF'], en lugar del nombre del script para facilitar la adaptación con cambios en menos líneas.
-Uso de mysql_query() en lugar de mysql_db_query(), ya que no era necesario al haberse seleccionado la bd con mysql_select_bd().
Código PHP:
<html>
<head>
<title>Páginación de resultados</title>
</head>
<body bgcolor=#FFFFFF> 
<?
// Datos de conexión a la base
$servidor="localhost";
$usuario="tu_user";
$password="tu_password";
$base="tu_base";
$con mysql_connect($servidor,$usuario,$password) or die (mysql_error());
mysql_select_db($base,$con) or die (mysql_error());

if (!isset(
$_GET['pg'])){
    
$pg 0// $pg es la pagina actual
}else{
    
$pg=$_GET['pg'];
}
$cantidad=5// cantidad de resultados por página
$inicial $pg $cantidad;

$pegar "SELECT * FROM tabla ORDER BY titulo LIMIT $inicial,$cantidad";
$cad mysql_query($pegar) or die (mysql_error());

$contar "SELECT * FROM tabla ORDER BY titulo"
$contarokmysql_query($contar);
$total_records mysql_num_rows($contarok);
$pages ceil($total_records $cantidad);

// Imprimiendo los resultados
while($array mysql_fetch_array($cad)) {
    echo 
$array['titulo']."<br>";


// Cerramos la conexión a la base
$con=mysql_close($con);

// Creando los enlaces de paginación
echo "<p>";
if (
$pg <> 0){
    
$url $pg 1;
    echo 
"<a href='paginar.php?pg=".$url."'>&laquo; Anterior</a>&nbsp;";
}else {
    echo 
" ";
}

for (
$i 0$i<$pages$i++) {
    if (
$i == $pg) {
        echo 
"<font face=Arial size=2 color=ff0000><b>&nbsp;$i&nbsp;</b></font>";
    }else{
        echo 
"<a href='".$_SERVER['PHP_SELF']."?pg=".$i."'>".$i."</a>&nbsp;";
    }
}

if (
$pg $pages-1) {
    
$url $pg 1;
    echo 
"<a href='".$_SERVER['PHP_SELF']."?pg=".$url."'>Siguiente &raquo;</a>";
}else {
    echo 
" ";
}
echo 
"</p>";
?>
</body>
</html>
Saludos

Última edición por jpinedo; 09/11/2003 a las 09:10
  #9 (permalink)  
Antiguo 09/11/2003, 22:56
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... ahora le hice un nuevo cambio... para que no muestre los números de página empezando desde cero sino desde uno.
Código PHP:
<html>
<head>
<title>Páginación de resultados</title>
</head>
<body bgcolor=#FFFFFF> 
<?
// Datos de conexión a la base
$servidor="localhost";
$usuario="tu_user";
$password="tu_password";
$base="tu_base";
$con mysql_connect($servidor,$usuario,$password) or die (mysql_error());
mysql_select_db($base,$con) or die (mysql_error());

if (!isset(
$_GET['pg'])){
    
$pg 1// $pg es la pagina actual
}else{
    
$pg=$_GET['pg'];
}
$cantidad=5// cantidad de resultados por página
$inicial = ($pg-1) * $cantidad;

$pegar "SELECT * FROM tabla ORDER BY titulo LIMIT $inicial,$cantidad";
$cad mysql_query($pegar) or die (mysql_error());

$contar "SELECT * FROM tabla ORDER BY titulo"
$contarokmysql_query($contar);
$total_records mysql_num_rows($contarok);
$pages ceil($total_records $cantidad);

// Imprimiendo los resultados
while($array mysql_fetch_array($cad)) {
    echo 
$array['titulo']."<br>";


// Cerramos la conexión a la base
$con=mysql_close($con);

// Creando los enlaces de paginación
echo "<p>";
if (
$pg <> 1){
    
$url $pg 1;
    echo 
"<a href='paginar.php?pg=".$url."'>&laquo; Anterior</a>&nbsp;";
}else {
    echo 
" ";
}

for (
$i 1$i<=$pages$i++) {
    if (
$i == $pg) {
        echo 
"<font face=Arial size=2 color=ff0000><b>&nbsp;$i&nbsp;</b></font>";
    }else{
        echo 
"<a href='".$_SERVER['PHP_SELF']."?pg=".$i."'>".$i."</a>&nbsp;";
    }
}

if (
$pg $pages) {
    
$url $pg 1;
    echo 
"<a href='".$_SERVER['PHP_SELF']."?pg=".$url."'>Siguiente &raquo;</a>";
}else {
    echo 
" ";
}
echo 
"</p>";
?>
</body>
</html>
Saludos
  #10 (permalink)  
Antiguo 17/11/2003, 09:03
Avatar de jraluy  
Fecha de Ingreso: noviembre-2002
Ubicación: En algún lugar al sur de
Mensajes: 46
Antigüedad: 15 años, 1 mes
Puntos: 0
hola,

Primero, gracias por este código, todo esto es una gran ayuda para los que estamos aprendiendo y nos vemos un bastante perdidos.

Estoy probando este código y al hacer la paginación de los datos de la BD, en todas las páginas me deja de mostrar el primer registro de la página. ¿A qué puede deberse?

he comprobado que el "LIMIT" de la consulta esté bien y sí lo está. Para mostrar 10 registros por página, el limit es "LIMIT 0,10 -- LIMIT 10,20 -- LIMIT 20,30 etc...)

No sé a qué puede ser debido
__________________
:'(
  #11 (permalink)  
Antiguo 17/11/2003, 13:00
Avatar de jraluy  
Fecha de Ingreso: noviembre-2002
Ubicación: En algún lugar al sur de
Mensajes: 46
Antigüedad: 15 años, 1 mes
Puntos: 0
Nada, solucionado el problema. Perdón por las molestias
__________________
:'(
  #12 (permalink)  
Antiguo 19/11/2003, 20:43
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
jraluy... si nos cuentas cuál era la falla y cómo la solucionaste, tal vez evitaríamos que otros la cometan... es una buena práctica acá en forosdelweb hacer eso.. así nos ayudamos más... No importa si es algo aparentemente "tonto" o "sin importancia"... si te pasó a ti... le puede pasar a cualquiera...

Esperamos tu post...

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:58.