Foros del Web » Programando para Internet » PHP »

Paginar registros mostrados en horizontal

Estas en el tema de Paginar registros mostrados en horizontal en el foro de PHP en Foros del Web. Hola Tengo el siguiente código que me muestra los registros en horizontal en 5 columnas: Código: <?php echo "<table align=center>"; $columnes = 5; # Número ...
  #1 (permalink)  
Antiguo 23/05/2009, 02:22
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Paginar registros mostrados en horizontal

Hola

Tengo el siguiente código que me muestra los registros en horizontal en 5 columnas:

Código:
<?php 
echo "<table align=center>"; 

$columnes = 5; # Número de columnas (variable) 

if (($rows=mysql_num_rows($cas))==0) { 
  echo "<tr><td colspan=$columnes>No hay resultados en la BD.</td></tr> "; 
} else { 
  echo "<tr><td colspan=$columnes><div align='center'>Resultados</div></td></tr>"; 
} 

for ($i=1; $row = mysql_fetch_row ($cas); $i++) { 
$resto = ($i % $columnes); # Número de celda del <tr> en que nos encontramos 
if ($resto == 1) {echo "<tr>";} # Si es la primera celda, abrimos <tr> 
    echo "<td><div align='center'>$row[0]<br><a href='javascript:;' onClick=MM_openBrWindow('pagina.php?Referencia=$row[0]','pantalla','toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=700,height=400')><img src='./cand/$row[2]' height='100' width='90' border='0'></A><br>$row[1]</div></td>";  
if ($resto == 0) {echo "</tr>";} # Si es la última celda, cerramos </tr> 
} 
if ($resto <> 0) { # Si el resultado no es múltiple de $columnes acabamos de rellenar los huecos 
$ajust = $columnes - $resto; # Número de huecos necesarios 
for ($j = 0; $j < $ajust; $j++) {echo "<td>&nbsp;</td>";} 
echo "</tr>"; # Cerramos la última línea </tr> 
} 
mysql_close($cas); 
echo "</table>"; 
?>
Me funciona perfectamente.
Pero, claro, muestra todos los registros en la misma página.

Mi pregunta es ¿como puedo paginar mis datos para que en cada página salgan por ejemplo 30 registros en 5 columnas y que se muestren tambien los típicos botones que permitan ir a la 1ra, 2a.... primera y última página?

Gracias
__________________
Gracias

Última edición por Anushka; 23/05/2009 a las 02:30
  #2 (permalink)  
Antiguo 23/05/2009, 09:13
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paginar registros mostrados en horizontal

Basta una búsqueda al estilo php+paginar para obtener muchos tutoriales y scripts pefabricados para realizar lo que deseas. En el foro el tema se trató también muchas veces

  #3 (permalink)  
Antiguo 23/05/2009, 09:44
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Paginar registros mostrados en horizontal

Si fuera un código simple......

Pero mi caso es un poco especial.
Si has fijado en el código, se muestran los registros en 5 columnas y el código de los tutoriales simples (ántes de preguntar en el foro siempre busco en internet) me hacen desaparecer los registros o desordenarlos
__________________
Gracias
  #4 (permalink)  
Antiguo 23/05/2009, 10:09
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paginar registros mostrados en horizontal

Código php:
Ver original
  1. for ($i=1; $row = mysql_fetch_row ($cas); $i++) {
No veo problema alguno. Esa parte del código es la que finalmuente cicla sobre los resultados para mostrarlos. $cas es el recurso generado por mysql_query() por tu script. Lo que la mayoría de scripts de paginación hace es crear ese recurso ellos mismos diciéndoles tu la consulta sql que se debe realizar.

Lo de dividir los resultados en columnas lo haces teniendo ese recurso ya creado (habiendo ya ejecutado mysql_query(). Agregar un script de paginación no interferirá en nada con el proceso que ya tienes en tu script, pues en donde intervienen estos scripts es en la generación del recurso.

  #5 (permalink)  
Antiguo 23/05/2009, 10:54
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Paginar registros mostrados en horizontal

Gracias a tu respuesta, intuyo mas o menos por donde van los tiros.
Pero como acabo de iniciarme hace 2 semanas en PHP (ántes trabajaba con ASP), todavía no consigo aplicar tu consejo en el código.
¿Me podrias aconsejar algún ejemplo práctico?
__________________
Gracias
  #6 (permalink)  
Antiguo 23/05/2009, 12:11
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Paginar registros mostrados en horizontal

Estoy probando esto:

Código:
<?php 
echo "<table align=center>"; 

$columnes = 5; # Número de columnas (variable) 

if (($rows=mysql_num_rows($cas))==0) { 
  echo "<tr><td colspan=$columnes>No hay resultados en la BD.</td></tr> "; 
} else { 
  echo "<tr><td colspan=$columnes><div align='center'>$rows Resultados</div></td></tr>"; 
} 

for ($i=1; $row = mysql_fetch_row ($cas); $i++) { 
$resto = ($i % $columnes); # Número de celda del <tr> en que nos encontramos 
if ($resto == 1) {echo "<tr>";} # Si es la primera celda, abrimos <tr> 
    echo "<td><div align='center'>$row[0]<br><a href='javascript:;' onClick=MM_openBrWindow('pagina.php?Referencia=$row[0]','pantalla','toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=700,height=400')><img src='./$row[2]' height='100' width='90' border='0'></A><br>$row[1]</div></td>";  
if ($resto == 0) {echo "</tr>";} # Si es la última celda, cerramos </tr> 
} 
if ($resto <> 0) { # Si el resultado no es múltiple de $columnes acabamos de rellenar los huecos 
$ajust = $columnes - $resto; # Número de huecos necesarios 
for ($j = 0; $j < $ajust; $j++) {echo "<td>&nbsp;</td>";} 
echo "</tr>"; # Cerramos la última línea </tr> 
} 
$registros = 30;
$pagina = $_GET["pagina"];

if (!$pagina) { 
$inicio = 0; 
$pagina = 1; 
} 
else { 
$inicio = ($pagina - 1) * $registros; 
} 
$total_paginas = ceil($totalRows_cas / $registros); 
if(($pagina - 1) > 0) { 
echo "<a href='paginacion.php?pagina=".($pagina-1)."'>< Anterior</a> "; 
} 
for ($i=1; $i<=$total_paginas; $i++){ 
if ($pagina == $i) { 
echo "<b>".$pagina."</b> "; 
} else { 
echo "<a href='paginacion.php?pagina=$i'>$i</a> "; 
} }
if(($pagina + 1)<=$total_paginas) { 
echo " <a href='paginacion.php?pagina=".($pagina+1)."'>Siguiente ></a>"; 
} 
mysql_close($cas); 
echo "</table>"; 
?>
Ahora tengo siguientes errores:
1. Me salen las páginas (1, 2, 3 ... Siguiente) pero no se paginan los registros, osea, siguen saliendo todos en la primera.
2. Al hacer click en los "números" me traslada a la página ..... /paginacion.php?pagina="el número de página" ..... que da el típico error "404 - Not found"

¿Alguna idea?
__________________
Gracias
  #7 (permalink)  
Antiguo 23/05/2009, 14:52
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: Paginar registros mostrados en horizontal

hola puedes dejar tu codigo para verlo.
  #8 (permalink)  
Antiguo 23/05/2009, 16:32
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paginar registros mostrados en horizontal

El tema de verdad no es muy complejo. Como te dije, si lo haces siguiendo un tutorial debes también trabajar con la consulta SQL, agregando cláusulas LIMIT que en primera instancia serán las que devuelvan sólo los resultados que corresponden a la página que deseas ver.

Te recomiendo ver el tema de aportes del foro PHP y utilices alguno de los sistemas allí publicados. Con eso sólo necesitarás asignar la consulta SQL que usas y el script que escojas se encargará de realizar el paginado, además de generarte una barra de navegación entre distintas páginas. Los scripts para paginación publicados allí tienen todos un tutorial de uso, verás que no es muy dificil adaptarlos a tu script ya hecho.

  #9 (permalink)  
Antiguo 24/05/2009, 02:36
 
Fecha de Ingreso: marzo-2004
Mensajes: 109
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Paginar registros mostrados en horizontal

Cita:
Iniciado por okram Ver Mensaje
El tema de verdad no es muy complejo. Como te dije, si lo haces siguiendo un tutorial debes también trabajar con la consulta SQL, agregando cláusulas LIMIT que en primera instancia serán las que devuelvan sólo los resultados que corresponden a la página que deseas ver.
El código que puse arriba es el único que me distribuye los registros de la manera que necesito.
He resuelto el error 404 de que no encontraba las páginas.

Estoy segura que falta por cambiar una tontería y va funcionar. Lo más raro es que este código me calcula bien la cantidad de páginas pero es como si no "leera" algo que le permitiera paginar los registros de la consulta SQL

Ahora solo me queda por conseguir resolver:

1. Me salen las páginas (1, 2, 3 ... Siguiente) pero no se paginan los registros, osea, siguen saliendo todos en la primera y cuando hago clik en cualquier número de página me salen todos los registros otra vez
__________________
Gracias
  #10 (permalink)  
Antiguo 24/05/2009, 09:33
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paginar registros mostrados en horizontal

Me cito a mí mismo
Cita:
Iniciado por okram Ver Mensaje
debes también trabajar con la consulta SQL, agregando cláusulas LIMIT que en primera instancia serán las que devuelvan sólo los resultados que corresponden a la página que deseas ver
Ejemplo:

Cita:
SELECT * FROM tabla WHERE condicion LIMIT 19, 10
donde 19 es el registro inicial correspondiente a la página actual y 10 es el número de páginas a mostrar.

En tu ejemplo, ya tienes una variable que indica el registro inicial: $inicio. Debes entonces armar tu consulta SQL usando esa variable. Ahora, si te das cuenta entonces, necesitas dos consultas SQL. Una que vayas a usar para contar el número total de registros en tu tabla, y otra para extraer aquellos que necesitas. Ergo, tus consultas deberán ser más o menos de la siguiente forma:

Código php:
Ver original
  1. $query = mysql_query("SELECT COUNT(*) as total FROM tabla WHERE condicion");
  2. $total = mysql_result($query, 0);
y luego
Código php:
Ver original
  1. $query = mysql_query("SELECT campo1, campo2, etc FROM tabla WHERE condicion LIMIT $inicio, $registros_por_pagina");
  2.  
  3. // tienes el recurso $query para trabajar sobre él
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 07:07.