Foros del Web » Programando para Internet » PHP »

paginar buscador con phppaggin de okram

Estas en el tema de paginar buscador con phppaggin de okram en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/01/2009, 10:24
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 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
  #2 (permalink)  
Antiguo 12/01/2009, 11:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: paginar buscador con phppaggin de okram

Hola estibaliz2006,

Tienes que cambiar de usar $_POST a usar $_GET y pasar los parametros en los siguientes links, por eso "pierdes" los filtros al cambiar a la pagina 2.

Saludos
  #3 (permalink)  
Antiguo 12/01/2009, 12:54
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: paginar buscador con phppaggin de okram

estibaliz2006, es mejor usar GET, como dice GatorV, pues para propagar variables así sólo basta con incluirlas en la URL, mientras con POST se requiere armar un formulario que use este método.

Pero te recomiendo ver http://scripts.phperu.net/paging/avanzado/post. Allí explico cómo podrías paginar con datos de un formulario POST.

En resumen. En vez de usar la superglobal $_POST usa $_REQUEST para recoger tus variables, y luego indícale al paginador que las variables puede que vengan de un formulario POST:

Código PHP:
$nombre=trim($_REQUEST['nombre']); //Usa $_REQUEST
$oferta=trim($_REQUEST['oferta']); //Usa $_REQUEST

//...

//armamos el phppagging de okram

//...
$paging = new PHPPaging;

// Le indicamos al paginador que los datos vendrán inicialmente de POST
$paging->verPost(true);

// Continuas normalmente 
Lo que haces este método (verPost) es considerar para la propagación las variables del entorno GET y POST. Pero esto es para recoger, pues la propagación se hace igual siempre por la URL. Es por eso que si haces esto y realizas tu búsqueda, al principio verás en la URL sólo el nombre de la página (Lo que haya en el action de tu formulario, como buscar.php), pero los links de la barra de links se generarán de la forma buscar.php?filtro1=contenido_del_filtro&filtro2=co ntenido_del_otro ....

Mira el ejemplo de lo que te digo aquí: http://scripts.phperu.net/paging/ejemplos.php?tipo=post. En ese ejemplo, el select de países funciona como un criterio de búsqueda, que se envia usando el método POST. Entonces el paginador toma estos datos también y los incluye en la URL de los links para la navegación.

Cualquier problema publícalo aquí.

Saludos,
  #4 (permalink)  
Antiguo 20/01/2009, 03:47
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: paginar buscador con phppaggin de okram

disculpad a todos pero no he podido contestar antes. el problema estaba efectivamente en la forma en la que pasaba los datos. pero no me había percatado. me fui a dar un largo paseo y esa misma noche al volver lo descubrí. de cualquier modo gracias a gatorV y okram por vuestra inestimable ayuda
__________________
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
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:11.