Hola a todos! Tengo una duda... tengo esta consulta con este paginador. No me tira nungún error, devuelve lo que reciben las variables pero el problema está al paginar. Aclaro que la BDD
NO TIENE datos duplicados.
Si el resultado de la consulta me dice que hay
18 productos, en la primer página me muestra los primeros 16 productos, pero al pasar a la siguiente página, en vez de mostrarme los 2 restantes,
me aparecen 8
Ejemplifico:
Pagina 1
prod 1 - prod 2 - prod 3 - prod 4
prod 5 - prod 6 - prod 7 - prod 8
prod 9 - prod 10 - prod 11 - prod 12
prod 13 - prod 14 - prod 15 - prod 16
Pagina 2
prod 11 - prod 12 - prod 13 - prod 14
prod 15 - prod 16 - prod 17 - prod 18
La página 2 devuelve desde el resultado nro 11 para adelante.
Les muestro el código:
Código PHP:
// realizar esta función si se apretó el botón de enviar en el formulario de busqueda
if(isset($_GET['searchart']))
$select1 = $_GET['select1'];
{
$condiciones = "";
if ($select1 != "") $condiciones .= " AND categoria.id_categoria = $select1";
$res = mysql_query("SELECT * FROM producto, categoria, linea, articulo WHERE producto.cod_categoria = categoria.cod_categoria AND producto.cod_linea = linea.cod_linea AND producto.cod_articulo = articulo.cod_articulo $condiciones GROUP BY producto.cod_articulo ORDER BY producto.cod_linea");
$numeroRegistros = mysql_num_rows($res);
$tamPag=10;
$tamPag2=16;
//pagina actual si no esta definida y limites
if(!isset($_GET["pagina"]))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$pagina = $_GET["pagina"];
}
//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;
}
}
$res = mysql_query("SELECT * FROM producto, categoria, linea, articulo WHERE producto.cod_categoria = categoria.cod_categoria AND producto.cod_linea = linea.cod_linea AND producto.cod_articulo = articulo.cod_articulo $condiciones GROUP BY producto.cod_articulo ORDER BY producto.cod_linea LIMIT ".$limitInf.", ".$tamPag2.");
//muestro los resultados...
//Paginacion
if($pagina>1)
{
echo "<a class='txtPaginador11b' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&select1=".$select1."&searchart=buscar'>";
echo "<class='txtPaginador11b'><< ANTERIOR</font>";
echo "</a>*";
}
for($i=$inicio;$i<=$final;$i++)
{
if($i==$pagina)
{
echo "<class='txtPaginador11b'><b>".$i." </b>";
}else{
echo "<a class='txtPaginador11b' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&select1=".$select1."&searchart=buscar'>";
echo "<class='txtPaginador11b'>".$i."</a>*";
}
}
if($pagina<$numPags)
{
echo "*<a class='txtPaginador11b' href='" .$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&select1=".$select1."&searchart=buscar'>";
echo "<class='txtPaginador11b'>SIGUIENTE >></a>";
}
echo "<div id='total_paginador'><font face='verdana' size='-2'>Total: ".$numeroRegistros." resultados</div>";
mysql_close($conexion);
A la variable
$tamPag le pude
10 para que me muestre en el paginador hasta la cantidad de 10 páginas y a la variable
$tamPag2 le puse
16 para limitar la cantidad de resultados a mostrar por página.
¿Puede ser que ahí esté el problema?
¿Por qué devuelve resultados duplicados si la base no los tiene?
¿Por qué me dice por ej. que hay 100 resultados y me muestra 130?
Muchas gracias, saludos y felices fiestas para todos.
Marx.