Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/12/2011, 08:48
marx-pola
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 10 meses
Puntos: 1
Paginador repite resultados en las otras páginas

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 "
<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 "
<class='txtPaginador11b' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&select1=".$select1."&searchart=buscar'>"; 
echo "
<class='txtPaginador11b'>".$i."</a>*"; 


if($pagina<$numPags) 

echo "
*<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.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.