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>
<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...

