Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/01/2009, 10:24
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 6 meses
Puntos: 1
paginar buscador con phppaggin de okram

Hola a todos. Os cuento un poco lo que me pasa. he creado un buscador para realizar consultas a una base de datos de productos filtrando por diferentes campos. el buscador va ok. para paginar los resultados, decidi aplicar el paginador de okram (aqui presente en la seccion de aportes). bien. cual es el problema? el problema es que los resultados los pagina correctamente pero solo la primera pagina. es decir, supongamos que yo pagino los resultados en bloques de 3 resultados por paginas y que en base a eso hay 4 paginas (obviamente como digo de tres resultados cada una). me encuentro con que me dice la aplicacion:

"se han encontrado 12 resultados distribuidos a lo largo de 4 paginas. se muestran los resultados del 1 al 3 de la pagina 1".

al hacer click en la pagina numero 2 (o tres o cualquiera) algo raro pasa porque no me muestra los siguientes tres resultados sino que muestra todos los productos de la base de datos de productos distribuidos en "x" paginas. es como si hiciera al hacer click en la pagina 2 una nueva consulta eliminando cualquier criterio de busqueda, es decir, no respeta el filtro aplicado.

el codigo es el siguiente (simplificare los filtros poniendo solo 2 para facilitar la comprension del problema).

Supongamos que en mi base de datos tengo 10 productos con la caracteristica de que estan en oferta.

El formulario de busqueda que tengo quedaria simplificado a esto:

Código PHP:
<form name="form" onReset="return Limpiar();" action=""procesarbuscador.php" ENCTYPE="multipart/form-data" METHOD="POST">

<!-- Nombre del Producto -->
<LABEL for=nombre>Nombre del Producto</LABEL><br> 
<input type="
text" class="caja" id="nombre" name="nombre"></input><br><br> 
<!-- Oferta  -->
<LABEL for=oferta>Producto en Oferta</LABEL><br> 
  <input type=radio value="
Si" name=oferta class=text1>Si</input>&nbsp;&nbsp;
  <input type=radio  value="
No" name=oferta class=text1>No</input>
 <br><br>
  <!-- final Producto en Oferta -->
<input type="
submit" name="Submit" value="Buscar"  class="caja">
<input type="
reset" name="Reset" value="Limpiar"  class="caja">
</form> 
esto me envia a la pagina procesarbuscador.php que tiene el siguiente codigo:

Código PHP:
//recibimos las variables enviadas por el formulario 

$nombre=trim($_POST['nombre']);
$oferta=trim($_POST['oferta']);

$sql =     "    SELECT         *
                FROM         productos
                WHERE         
                 "
;    
$masUnElemento 0
//Para cada una de las cajas: 

if(trim($nombre) == ""){ 
  if(
$masUnElemento){$sql.=" AND ";} 
  
$sql.=" nombreLIKE '%$nombre%' "
  
$masUnElemento++; 
}
if(
trim($nombre) != ""){ 
  if(
$masUnElemento){$sql.=" AND ";} 
  
$sql.=" nombreLIKE '%$nombre%' "
  
$masUnElemento++; 
}
if(
trim($oferta) == ""){ 
  if(
$masUnElemento){$sql.=" AND ";} 
  
$sql.=" ofertaLIKE '%$oferta%' "
  
$masUnElemento++; 
}
if(
trim($oferta) != ""){ 
  if(
$masUnElemento){$sql.=" AND ";} 
  
$sql.=" ofertaLIKE '%$oferta%' "
}

//armamos el phppagging de okram

include_once "../PHPPaging.lib.php";

$result mysql_query($sql) or die (mysql_error());  

$datos mysql_num_rows($result);



      
$paging = new PHPPaging;



      
$paging->agregarConsulta($sql);



      
$paging->porPagina(2); //resultados por pagina. como en este caso hay 10
                                                // resultados, serian 5 paginas



      
$paging->paginasAntes(2);

      

      
$paging->linkTitulo('Página %1$s: Ver registros del %2$s al %3$s (Total: %4$s)');  



      
$paging->mostrarPrimera("--Primera");  



      
$paging->mostrarUltima("Última--"); 



      
$paging->mostrarActual("<span class=\"navthis\">%d</span>");



      
$paging->mostrarAnterior("Anterior"); 



      
$paging->mostrarSiguiente("Siguiente"); 



      
$paging->linkClase('nav');  



      
$paging->ejecutar();



    if(
$datos<=0){ 



echo 
"No hay resultados coincidentes con tu búsqueda";

}    

else

{    



       
echo 
"Se ha(n) encontrado un total de ".$paging->numTotalRegistros()." Cliente(s) coincidentes con su búsqueda<br>";
echo 
"Usted se encuentra en la página ".$paging->numEstaPagina()." de un total de ".$paging->numTotalPaginas(). " página(s) <br>";
 while(
$datos $paging->fetchResultado()) { 

        echo 
"<table><tbody><tr>";
        echo 
"<td class=fil>$datos[nombre]</td></tr></tbody></table>";
echo 
"<div align=center><br>Existen ".$paging->numTotalRegistros()." productos Registrados distribuidos en ".$paging->numTotalPaginas(). " páginas
        <br>Mostrando "
.$paging->numRegistrosMostrados()." producto(s), del "



    echo 
$paging->numPrimerRegistro()." al ".$paging->numUltimoRegistro(); 



    echo 
" de un total de ".$paging->numTotalRegistros()." producto(s)
        </div>"
;
        echo 
"<div align=center><br><div class=\"navigation\">".$paging->fetchNavegacion()."</div></div>";    
?> 
bien. como digo el codigo del buscador funciona y la paginacion en principio tambien. aqui tendriamos una primera pagina con 2 registros, otra segunda con otros 2 y asi hasta cinco paginas. pero al pasar a la pagina 2 no me muestra los registros 3 y 4 sino que realiza una nueva busqueda y saca todos los registros de la base de datos distribuidos a lo largo de x paginas.

alguna ayuda de por que hace esto? gracias a todos...
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen