Foros del Web » Programando para Internet » PHP »

Ayuda con resultados paginados

Estas en el tema de Ayuda con resultados paginados en el foro de PHP en Foros del Web. Buenas tengo el siguiente incoveniente: Tengo un formulario de busqueda (buscar.php) q funciona perfectamente generando la sentencia sql correcta como una cadena en el php ...
  #1 (permalink)  
Antiguo 01/07/2005, 11:36
Avatar de davidrenzzo  
Fecha de Ingreso: enero-2004
Mensajes: 59
Antigüedad: 13 años, 10 meses
Puntos: 0
Ayuda con resultados paginados

Buenas tengo el siguiente incoveniente:

Tengo un formulario de busqueda (buscar.php) q funciona perfectamente generando la sentencia sql correcta como una cadena en el php de resultados (resultados.php) mediante metodo POST, el problema empieza cuando muestro resultados paginados para una mejor visualizacion, debido a q los valores obtenidos mediante POST vienen de buscar.php al hacer click a la siguiente pagina en resultados.php pierdo por completo los valores obtenidos para generar la sentencia sql. ¿Existe alguna manera de no perder los valores POST recibidos para poder paginar sin problema alguno?. Espero haber sido lo suficientemente claro. Gracias de antemano
__________________
www.gradamedia.com
  #2 (permalink)  
Antiguo 01/07/2005, 12:07
Avatar de DoKyE  
Fecha de Ingreso: junio-2005
Mensajes: 144
Antigüedad: 12 años, 5 meses
Puntos: 0
Prueba con esto:

Código PHP:
<?
    mysql_connect
("localhost","user","pass");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Colegio Cahuala</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Pragma" content="no-cache" />
<style type="text/css">
<!--
a.p:link {
    color: #0066FF;
    text-decoration: none;
}
a.p:visited {
    color: #0066FF;
    text-decoration: none;
}
a.p:active {
    color: #0066FF;
    text-decoration: none;
}
a.p:hover {
    color: #0066FF;
    text-decoration: underline;
}
a.ord:link {
    color: #000000;
    text-decoration: none;
}
a.ord:visited {
    color: #000000;
    text-decoration: none;
}
a.ord:active {
    color: #000000;
    text-decoration: none;
}
a.ord:hover {
    color: #000000;
    text-decoration: underline;
}
a:link {
    color: #FFFFFF;
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #FFFFFF;
}
a:hover {
    text-decoration: underline;
    color: #FFFFFF;
}
a:active {
    text-decoration: none;
    color: #FFFFFF;
}
.Estilo1 {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 14px;
}
-->
</style>
</head>
<body bgcolor="#FFFFFF">
<img src="img/logo.JPG" width="120" height="105"><hr noshade style="color:CC6666;height:1px">
<form action="ProcesaInformeGo.php" method="get">
  <div align="center"><span class="Estilo1">Ingrese  C&oacute;digo del Curso :</span>    
    <input type="text" name="criterio" size="22" maxlength="150">
    <input type="submit" value="Buscar">
  </div>
</form>
<p><br>
  <?
        
//inicializo el criterio y recibo cualquier cadena que se desee buscar
        
$criterio "";
        if (
$_GET["criterio"]!=""){
    
$txt_criterio $_GET["criterio"];
    
$criterio " where cu_id like '%" $txt_criterio "%'";
}


    
$sql="SELECT * FROM basedatos.tabla ".$criterio;
    
$res=mysql_query($sql);
    
$numeroRegistros=mysql_num_rows($res);
    if(
$numeroRegistros<=0)
    {
        echo 
"<div align='center'>";
        echo 
"<font face='verdana' size='-2'>No se encontraron resultados</font>";
        echo 
"</div>";
    }else{
        
//////////elementos para el orden
        
if(!isset($orden))
        {
//entre las comillas ingresa el campo de la tabla por el cual vas a ordenar la consulta
            
$orden=" ";
        }
        
//////////fin elementos de orden

        //////////calculo de elementos necesarios para paginacion
        //tamaño de la pagina
                         // abajo ingresa los registros por pagina que se mostraran
        
$tamPag=6

        
//pagina actual si no esta definida y limites
        
if(!isset($pagina))
        {
               
$pagina=1;
               
$inicio=1;
               
$final=$tamPag;
        }
        
//calculo del limite inferior
        
$limitInf=($pagina-1)*$tamPag;

        
//calculo del numero de paginas
        
$numPags=ceil($numeroRegistros/$tamPag);
        if(!isset(
$pagina))
        {
               
$pagina=1;
               
$inicio=1;
               
$final=$tamPag;
        }else{
            
$seccionActual=intval(($pagina-1)/$tamPag);
            
$inicio=($seccionActual*$tamPag)+1;

            if(
$pagina<$numPags)
            {
               
$final=$inicio+$tamPag-1;
            }else{
                
$final=$numPags;
            }
                
                if (
$final>$numPags){
                     
$final=$numPags;
            }
        }

        
//////////fin de dicho calculo

        //////////creacion de la consulta con limites
        
$sql="SELECT * FROM basedatos.tabla ".$criterio." ORDER BY ".$orden." ASC LIMIT ".$limitInf.",".$tamPag;
        
$res=mysql_query($sql);

        
//////////fin consulta con limites
        
echo "<div align='center'>";
        echo 
"<font face='verdana' size='-2'>Se encontraron ".$numeroRegistros." registros <br>";
        echo 
"ordenados por <b>".$orden."</b>";
                if(isset(
$txt_criterio)){
        echo 
"<br>Valor filtro: <b>".$txt_criterio."</b>";
                }
        echo 
"</font></div>";
        echo 
"<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>";
        echo 
"<tr><td colspan='3'><hr noshade></td></tr>";
        echo 
"<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=al_id&criterio=".$txt_criterio."'>Código</a></th>";
        echo 
"<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=al_nombre&criterio=".$txt_criterio."'>Nombre</a></th>";
        echo 
"<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=cu_id&criterio=".$txt_criterio."'>Curso</a></th>";
        while(
$registro=mysql_fetch_array($res))
        {
?>
  <!-- tabla de resultados -->
</p>
<tr bgcolor="#CC6666" onMouseOver="this.style.backgroundColor='#FF9900';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#CC6666'"o"];" onClick="">
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["campo1"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["campo2"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["campo3"]; ?></b></font></td>
  <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><a href="InformeNotasRedirect.php?id_del_alumno=<? echo $registro["al_id"]; ?>&nombre_alumno=<? echo $registro["al_nombre"]; ?>&id_del_curso=<? echo $registro["cu_id"]; ?>&clave_curso=<? echo $registro["cu_clave"]; ?> "><strong>Imprimir Informe</strong></a></font></td>
</tr>
<!-- fin tabla resultados -->
<?
        
}//fin while
        
echo "</table>";
    }
//fin if
    //////////a partir de aqui viene la paginacion
?>
    <br>
    <table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr><td align="center" valign="top">
<?
    
if($pagina>1)
    {
        echo 
"<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
        echo 
"<font face='verdana' size='-2'>anterior</font>";
        echo 
"</a>&nbsp;";
    }

    for(
$i=$inicio;$i<=$final;$i++)
    {
        if(
$i==$pagina)
        {
            echo 
"<font face='verdana' size='-2'><b>".$i."</b>&nbsp;</font>";
        }else{
            echo 
"<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&orden=".$orden."&criterio=".$txt_criterio."'>";
            echo 
"<font face='verdana' size='-2'>".$i."</font></a>&nbsp;";
        }
    }
    if(
$pagina<$numPags)
    {
        echo 
"&nbsp;<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
        echo 
"<font face='verdana' size='-2'>siguiente</font></a>";
    }
    
//////////fin de la paginacion
?>
    </td></tr>
    </table>
<hr noshade style="color:CC6666;height:1px">
<div align="center"><font face="verdana" size="-2"><a class="p" href="index.php">::Inicio::</a></font></div>
</body>
</html>
<?
    mysql_close
();
?>
__________________
Chiloé
  #3 (permalink)  
Antiguo 02/07/2005, 12:08
Avatar de davidrenzzo  
Fecha de Ingreso: enero-2004
Mensajes: 59
Antigüedad: 13 años, 10 meses
Puntos: 0
Un saludo DoKeY
Es precisamente lo q estoy haciendo, pero a diferencia de lo q me muestras yo uso dos archivos, uno de busqueda y otro q muestra los resultados. He intentado recogiendo todas las variables POST del archivo 1 al archivo 2 y recuperandolos como hidden, funciona para la primera pagina pero los valores se pierden al picar a la siguiente pagina. Te agradezco igual tu ayuda.
__________________
www.gradamedia.com
  #4 (permalink)  
Antiguo 04/07/2005, 17:04
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
Hola davidrenzzo:

Me gustaría que pruebes Paginator que te provee una manera de propagar las variables a través de las páginas generadas.

El script está en español y el código tiene muchos comentarios, así que si no quieres utilizarlo, por lo menos podrás ver cómo hace la propagación de esas variables y adaptarla a tus necesidades.

Si necesitas ayuda con eso, no dudes en preguntar.

Saludos
  #5 (permalink)  
Antiguo 05/07/2005, 00:53
Avatar de davidrenzzo  
Fecha de Ingreso: enero-2004
Mensajes: 59
Antigüedad: 13 años, 10 meses
Puntos: 0
Hola jpinedo:
Pude solucionar mi problema haciendo unas correciones en mi codigo, tengo otro incoveniente un tanto raro, al generar un query de la siguiente forma

SELECT * FROM noticia WHERE resumennot LIKE "%de%" ORDER BY IdNot DESC

el link de la siguiente pagina recibe el sgte query:

SELECT * FROM noticia WHERE resumennot LIKE "Þ%" ORDER BY IdNot DESC

es decir la cadena "%de%" es reemplazada por "Þ%"

no tengo idea de q puede estar sucediendo.
__________________
www.gradamedia.com
  #6 (permalink)  
Antiguo 05/07/2005, 09:35
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
Hola....
Al parecer la cadena se está interpretando como url codificado. Si es éste el caso, tienes que utilizar alguna función como $var_url = urlencode($var) antes de pasar la variable. Luego utilizas $var = urldecode($var_url) al momento de leerla en las páginas.

Por cierto... ¿Pasas por url toda la cadena de comparación (%de%)? Tal vez deberías controlar un poco más tu consulta desde la aplicación y sólo pasar la cadena "de".

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 20:08.