Foros del Web » Programando para Internet » PHP »

problema con paginacion de resultados

Estas en el tema de problema con paginacion de resultados en el foro de PHP en Foros del Web. holas, este un codigo que hice para listar losdatos personales de unos socios al cual luego encontre un codigo que permite paginar los resultados. El ...
  #1 (permalink)  
Antiguo 17/11/2006, 23:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 17
Antigüedad: 20 años, 5 meses
Puntos: 0
problema con paginacion de resultados

holas,

este un codigo que hice para listar losdatos personales de unos socios al cual luego encontre un codigo que permite paginar los resultados. El codigo de paginacion lo pude acoplar perfectamente a mi codigo excepto cuando selecciono un filtro al listado. Como pueden ver el listado lo puedo ordenar por apellido o por rut mediante un menu desplegable, el problema es que cuando aplico un ordenamiento, se ordena todo el lista bien en la 1era pagina pero luego se pierde ese ordenamiento en las siguientes paginas. Que me faltaria para que no me pase eso??
Ojala me hayan entendido el problema.
Saludos.


Código PHP:

if ($ORDENAR == ORDENAR){
switch (
$ordenar){
    
    case 
0
            if (!isset(
$pag)) $pag 1
                
$result mysql_query("SELECT COUNT(*) FROM socios WHERE (estado='activo')",$bd); 
                list(
$total) = mysql_fetch_row($result);
                
$tampag 10;
                
$reg1 = ($pag-1) * $tampag;
                
$result mysql_query("SELECT * FROM socios WHERE (estado='activo') ORDER BY rut
                  LIMIT $reg1, $tampag"
$bd); 
            break;
    
    case 
1
            if (!isset(
$pag)) $pag 1
                
$result mysql_query("SELECT COUNT(*) FROM socios WHERE (estado='activo')",$bd); 
                list(
$total) = mysql_fetch_row($result);
                
$tampag 10;
                
$reg1 = ($pag-1) * $tampag;
                
$result mysql_query("SELECT * FROM socios WHERE (estado='activo') ORDER BY apellido
                LIMIT $reg1, $tampag"
$bd); 
            break;
            
}
}
else
{
if (!isset(
$pag)) $pag 1
$result mysql_query("SELECT COUNT(*) FROM socios WHERE (estado='activo')",$bd); 
list(
$total) = mysql_fetch_row($result);
$tampag 10;
$reg1 = ($pag-1) * $tampag;
$result mysql_query("SELECT * FROM socios WHERE (estado='activo') ORDER BY num_socio
LIMIT $reg1, $tampag"
$bd); 
}


function 
paginar($actual$total$por_pagina$enlace) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;
}

if (
$row mysql_fetch_array($result)){

echo 
"<center><table width='97%' border= '1' bordercolor= '#0000CC' cellPadding=3 cellspacing=0 align=center> \n";

echo 
"<tr> \n";

//echo "<td class='celda_encabezado'><b> No. </b></td> \n";
echo "<td class='celda_encabezado'><b><center> RUT </center></b></td> \n";
echo 
"<td class='celda_encabezado'><b> NOMBRES </b></td> \n";
echo 
"<td class='celda_encabezado'><b> AP.PATERNO</b></td> \n";
echo 
"<td class='celda_encabezado'><b> AP.MATERNO </b></td> \n";
//echo "<td class='celda_encabezado'><b> TELEFONO </b></td> \n";
echo "<td class='celda_encabezado'><b> DETALLES </b></td> \n";
echo 
"<td class='celda_encabezado'><b> MODIFICAR </b></td> \n";
//echo "<td class='celda_encabezado'><b> ELIMINAR </b></td> \n";
echo "<td class='celda_encabezado'><b> CUOTAS </b></td> \n";
//echo "<td class='celda_encabezado'><b> BENEFICIOS </b></td> \n";
echo "</tr \n>";



do {

if(
$bgcolor == '#FFFFFF')$bgcolor '#CCCCCC';
else 
$bgcolor '#FFFFFF';

echo 
"<tr> \n";

//echo "<td bordercolor=#FFFFFF bgcolor=".$bgcolor."><div align='center'>".$row["num_socio"]."</div></td>\n";
echo "<td bordercolor=#FFFFFF bgcolor=".$bgcolor."><center>".$row["rut"]."</center></td>\n";
echo 
"<td bordercolor=#FFFFFF bgcolor=".$bgcolor."><center>".$row["nombre"]."</center></td>\n";
echo 
"<td bordercolor=#FFFFFF bgcolor=".$bgcolor."><center>".$row["apellido"]."</center></td>\n";
echo 
"<td bordercolor=#FFFFFF bgcolor=".$bgcolor."><center>".$row["apellido_2"]."</center></td>\n";
//echo "<td bordercolor=#FFFFFF bgcolor=".$bgcolor."><center>".$row["telefono"]."</center></td>\n";
echo '<td bordercolor=#FFFFFF bgcolor='.$bgcolor.'><center><a href="ver_detalles_socio.php?num_socio='.$row["num_socio"].'"><img src="imagenes/ver.gif" width="30" height="30" border="0" /></a></center></td>';
echo 
'<td bordercolor=#FFFFFF bgcolor='.$bgcolor.'><center><a href="modificar_socio.php?num_socio='.$row["num_socio"].'"><img src="imagenes/modificar.gif" width="30" height="30" border="0" /></a></center></td>';
//echo '<td bordercolor=#FFFFFF bgcolor='.$bgcolor.'><center><a href="eliminar_socio.php?num_socio='.$row["num_socio"].'"><img src="imagenes/eliminar.gif" width="30" height="30" border="0" /></a></center></td>';
echo '<td bordercolor=#FFFFFF bgcolor='.$bgcolor.'><center><a href="pago_de_cuotas.php?num_socio='.$row["num_socio"].'"><img src="imagenes/DOLLAR.gif" width="30" height="30" border="0" /></a></center></td>';
//echo '<td bordercolor=#FFFFFF bgcolor='.$bgcolor.'><center><a href="beneficios_socio.php?num_socio='.$row["num_socio"].'"><img src="imagenes/balls8.gif" width="30" height="30" border="0" /></a></center></td>';
echo "</tr> \n";
 

} while (
$row mysql_fetch_array($result));

echo 
"</table></center>\n";

else {

echo 
"&iexcl; La base de datos est&aacute; vacia !";

}

mysql_close ($bd); 
  #2 (permalink)  
Antiguo 18/11/2006, 04:13
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 384
Antigüedad: 19 años, 3 meses
Puntos: 0
Viendo por encima tu codigo, estas pasando por $_GET la pagina actual. Tienes que hacer lo mismo con el valor del ORDENAR para que se mantenga. Algo como:
Código PHP:
enlace.php?pagina=2[B]&ordenar=1[/B
Otra forma seria utilizando variables de sesion,

Código PHP:
$_SESSION['ordenar'] = ordenar
Luego antes del switch del ordenar, recuperas el valor de la var. de sesion y ya esta.
__________________
m!ketrix
CINE25 - Red Social de Cine
byinspiroh
  #3 (permalink)  
Antiguo 18/11/2006, 10:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 17
Antigüedad: 20 años, 5 meses
Puntos: 0
Viendo tu 1era solucion me di cuenta que se me olvido colocar el codigo que hace los enlaces para cada pagina,
Código PHP:
echo paginar($pag$total$tampag"listar_socios.php?pag="); 
por lo que leo de tu 1era alternativa deberia quedar algo asi??:

Código PHP:
echo paginar($pag$total$tampag"listar_socios.php?pag=&ordenar"); 
la modificacion deberia ir entonces en el codigo que crea los enlaces de cada pagina.....
  #4 (permalink)  
Antiguo 20/11/2006, 08:45
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 384
Antigüedad: 19 años, 3 meses
Puntos: 0
Por allí va la cosa, pero para mantener el valor del ORDENAR, tendrás que pasarlo en tu funcion paginar. Algo así sería:
Código PHP:
echo paginar($pag$total$tampag$ordenar,"listar_socios.php"); 
Y luego en la funcion:

Código PHP:

function paginar($actual$total$por_pagina$ordenar$enlace) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"[COLOR="SandyBrown"]$enlace?pag=$anterior&ordenar=$ordenar[/COLOR]\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"[COLOR="SandyBrown"]$enlace?pag=$i&ordenar=$ordenar[/COLOR]\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"[COLOR="SandyBrown"]$enlace?pag=$i&ordenar=$ordenar[/COLOR]\">$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"[COLOR="SandyBrown"]$enlace?pag=$posterior&ordenar=$ordenar[/COLOR]\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;

Fijate en los enlaces, que es donde están los cambios. La idea es esa, claro que lo ideal es que modifiques la función para que sea general y sirva para cualquier caso (no solo paginar y ordenar)
__________________
m!ketrix
CINE25 - Red Social de Cine
byinspiroh
  #5 (permalink)  
Antiguo 20/11/2006, 10:39
 
Fecha de Ingreso: octubre-2003
Mensajes: 17
Antigüedad: 20 años, 5 meses
Puntos: 0
hola miketrix,
estuve probando los cambios que pusiste en el codigo de paginacion y puedo ver en la barra de abajo del navegador que efectivamente se esta pasando el valor de $ordenar para cada pagina creada pero lamentablemente se sigue perdiendo el orden al hacer click en la siguiente pagina.

  #6 (permalink)  
Antiguo 20/11/2006, 15:36
 
Fecha de Ingreso: noviembre-2006
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 17 años, 5 meses
Puntos: 0
Amigo aqui tienes uno que hice que me ha funcionado pero no esta depurado si quieres te lo dejo para que tomes la idea


<?php
################################################## ################################################## ##
# Cargar el archivo de coneccion con la base de datos
# Manuel Ramirez
# 10/11/2006
################################################## ##################################################
include ('pgsql.php');
################################################## ################################################
# Variable y select para el manejo de las tablas y del reporte
# Manuel Ramirez
# 10/11/2006
################################################## ################################################## ##
/*$select="SELECT * FROM deudas";
$begin="BEGIN";
pg_query($conec,$begin);
$declare="DECLARE cursor1 CURSOR FOR SELECT * FROM deudas ";
pg_query ($conec,$declare);
$esta="OPEN cursor1";
pg_execute($connec,$esta);
$fetch=pg_($connec,"FETCH cursor1 into '$muestra'");*/

//$total_rows=pg_num_rows($data);
//echo $total_rows;
//for($i=1;$i=5;$i++){
//echo $i;
//$sql="BEGIN; DECLARE cursor1 CURSOR FOR SELECT rif, referencia FROM deudas; FETCH all in cursor1";
$sql="SELECT a.referencia, d.ramo, d.des_ramo, a.planilla, a.ano_declaracion, a.motivo, a.tipo, a.fec_liquidacion, a.fec_vencimiento, a.fec_cancelacion, a.estado,
a.monto, a.monto-a.cancelado as saldo,
--SUM(a.monto-a.cancelado) as totalsaldo,
SUM((a.monto-a.cancelado)*((b.tasa/12)/100)) as mora,
-- SUM (SUM((a.monto-a.cancelado)*((b.tasa/12)/100))) as totalmora,
a.cancelado,
a.ano_declaracion,
c.razon_social, c.dir_fiscal, e.log_cia
, f.rif, f.fec_cons
FROM deudas a, indice b, principal c, ramos d, gen01 e, contribuyentes f
WHERE a.rif='J000029482'
AND ((to_date(a.fec_vencimiento + '1 months','YYYY MM DD'))<=(to_date (extract(day from a.fec_vencimiento + '1 months') || to_char(b.mes_eje,'99') || to_char(b.ano_eje,'9999'),'DD MM YYYY')))
--AND trim(a.rif)='J000029482'
AND age(current_date, to_date (extract(day from a.fec_vencimiento) || to_char(b.mes_eje,'99') || to_char(b.ano_eje,'9999'),'DD MM YYYY'))>0
AND trim(a.rif) != trim(a.referencia)
AND a.monto-a.cancelado >0
AND trim(a.referencia)='AE00009173'
AND trim(d.ramo)=trim(a.ramo)
AND trim(c.rif)=trim(a.rif)
AND trim(d.ramo)=trim(a.ramo)
AND trim(c.rif)='J000029482'
AND trim(e.edo_reg)='A'
--AND trim(f.rif)='J302688535'
AND trim(f.referencia)=trim(a.referencia)
AND trim(f.rif)!=trim(a.referencia)
GROUP BY a.fec_vencimiento, a.planilla, d.ramo, d.des_ramo,a.ano_declaracion, a.motivo, a.fec_liquidacion,
a.fec_cancelacion, a.estado, a.monto, a.cancelado, a.referencia, c.razon_social, a.tipo, a.ano_declaracion, c.dir_fiscal, e.log_cia
, f.rif, f.fec_cons

UNION ALL
SELECT a.referencia, d.ramo, d.des_ramo, a.planilla, a.ano_declaracion, a.motivo, a.tipo, a.fec_liquidacion, a.fec_vencimiento, a.fec_cancelacion, a.estado,
a.monto, a.monto-a.cancelado as saldo,
-- SUM(a.monto-a.cancelado) as totalsaldo,
SUM(a.monto-a.cancelado) as mora,
--SUM (SUM(a.monto-a.cancelado)) as totalmora,
a.cancelado,
a.ano_declaracion,
c.razon_social, c.dir_fiscal, e.log_cia
, f.rif, f.fec_cons
FROM deudas a, principal c, ramos d, gen01 e, contribuyentes f
WHERE a.monto-a.cancelado = 0
AND trim(a.rif)='J000029482'
AND trim(a.rif) != trim(a.referencia)
AND trim(a.referencia)='AE00009173'
AND trim(d.ramo)=trim(a.ramo)
AND trim(c.rif)=a.rif
AND trim(c.rif)='J000029482'
AND trim(c.edo_reg)='A'
AND trim(e.edo_reg)='A'
--AND trim(f.rif)='J302688535'
AND trim(f.referencia)=trim(a.referencia)
AND trim(f.rif)!=trim(a.referencia)
GROUP BY a.fec_vencimiento,a.planilla, d.ramo,d.des_ramo,a.ano_declaracion, a.motivo, a.fec_liquidacion,
a.fec_cancelacion, a.estado, a.monto, a.cancelado, a.referencia, c.razon_social, a.tipo, a.ano_declaracion, c.dir_fiscal, e.log_cia
, f.rif, f.fec_cons
ORDER BY 1 DESC ";
//$sql="SELECT * FROM indice";
$data=pg_query($sql);
$numreg=pg_num_rows($data);
$numpag=ceil($numreg/20);
$sig=$numpag*20;
$ks=$numpag*6
################################################## ################################################## #########################
# Diseño de la tabla dinamica y muestra de los datos de la base de datos
# Manuel Ramirez
# 10/11/2006
################################################## ################################################## ########################
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<table border='1'>
<?php
for($j=$j;$j<=$numpag;$j++){
$ini=0+$fin;
$fin=19+$ini;
//echo $j;
for ($i=$ini;$i<=$fin;$i++){
//echo $i;
$res=pg_result_seek($data,$i);
$array=pg_fetch_row($data);?>
<tr>
<td><?php echo $array['0']; ?></td>
<td><?php echo $array['1']; ?></td>
<td><?php echo $array['2']; ?></td>
<td><?php echo $array['3']; ?></td>
<td><?php echo $array['4']; ?></td>
<td><?php echo $array['5']; ?></td>
<td><?php echo $array['6']; ?></td>
<td><?php echo $array['7']; ?></td>
</tr>
<?php } ?>
</table>
<?php

################################################## ################################################## ###################################
# Paginación por medio de botones siguiente y anterior
# Muestra de paginas que debe hacer siguiente
# 10/11/2006
# Manuel Ramirez
################################################## ################################################## ####################################
/*if($ini==0){
}
else{
echo "<td>";
if ($ini==19){
$ini=0;
$fin=19;
$j=0;
echo $j;
echo "primer ini y fin " . $ini;
echo $fin;
echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&j=$j'> Anterior</a>";
}
else{
echo "ojo" . $ini . $fin;
if($j<=1 || $ini<=0 || $fin<=0){
$ini=$ini*-1;
$fin=$fin*-1;
$j=$j*-1;}
else{
$j=$j-(1*2);
$ini=$ini-19;
$fin=$fin-19;
}
echo "segundo ini y fin " . $ini;
echo $fin;
echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&amp;j= $j'>Anterior</a>";}
}
echo "</td>";
for($k=1;$k<=$numpag;$k++){
echo "<td>" . $k . "</td>";
}
if($ini==0){
echo "<td>";
$j++;
$ini=0;
$fin=19;
if($j>0){
$ini=$ini+19;
$fin=$fin+$ini;
$j=$j++;
echo $j;}
echo "tercer ini y fin " . $ini;
echo $fin;
echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&amp;j= $j'>Siguiente</a>";
echo "</td>";
}
else{
$fin=19;
if ($ini=19){
$fin=19+$fin;
$j++;
echo "<td>";
echo "cuarto ini y fin " . $ini;
echo $fin;
echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&amp;j= $j'>Siguiente</a>";
echo "</td>";}
/*else{
echo"<td>";
//if ($i=$fin){
if($j<=1 || $ini<0 || $fin<0){
$j=($j*-1)+1;
$ini=$ini*-1;
$fin=$fin*-1;
}
else{
$j++;
}
$ini=(19*2)+$ini;
$fin=$fin+(19*2);
echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&amp;j= $'>Siguiente >></a>";

//}
echo "</td>";
}*///}
################################################## ################################################## ##############################
################################################## ################################################## ###############################
# Codigo de paginacion siguiente y anterior pero con la ubicacion mal del las palabras siguiente y anterior

?>
<div id='tabla'>
<table>
<tr>
<td><div id="siguiente" style="position:absolute; left:200;top:580px; width:auto; height:23px; z-index:3"><table><tr>
<?php
if($fin<=$numreg){
if ($i=$fin){
$j++;
?>
<td>
<?php echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&amp;j= $j'>Siguiente</a>";?></td><?php
//echo "</td>".
//"</tr>";
}
//echo "</tr>";
//echo "<tr>"
//. "<td>";
}
?>
</tr></table></div></td>
<?php
################################################## ################################################## ########################
#Paginacion por paginas para siguiente version
#<td><div id="Layer2" style="position:absolute; left:0px; ?; top:550px; width:auto; height:25px; z-index:2"><table><tr>
#?php
#for($k=1;$k<=$numpag;$k++){?
# #<td>
# #?php echo $k; ?
# #</td>
# #?
# #}?
#
#</tr></table></div></td></div>
################################################## ################################################## ######################
?>
<td><div id="anterior" style="position:absolute; left:0px; top:580px; width:auto; height:22px; z-index:1"><table><tr>
<?php
if($ini==0){
}
else{
// echo "<tr>"
?>
<td>
<?php
if ($fin==19){
echo "<a href='planillasql.php>Anterior</a>";
}
elseif ($fin>19){
$j=$j-(1*2);
$ini=(19*2)-$ini;
$fin=$fin-(19*2);
echo "<a href='planillasql.php?ini=$ini&amp;fin=$fin&amp;j= $j'>Anterior</a>";
}?>
</td>
<?php }?>
</tr></table></div></td>
</tr>
</table>
</div>
<?php

################################################## ################################################## ####################################
# Para parar el for y poder hacer la paginacion
# Manuel Ramirez
# 10/11/2006
################################################## ################################################## #################################
break;
}
?>
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 21:18.