Foros del Web » Programando para Internet » PHP »

Paginación PHP + MySQL; Pierdo la consulta.

Estas en el tema de Paginación PHP + MySQL; Pierdo la consulta. en el foro de PHP en Foros del Web. Hola a todos, Antes que nada, he estado leyendo más problemas de paginación pero no he encontrado respuesta o solución a lo mio... Estoy haciendo ...
  #1 (permalink)  
Antiguo 28/01/2008, 12:56
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Paginación PHP + MySQL; Pierdo la consulta.

Hola a todos,
Antes que nada, he estado leyendo más problemas de paginación pero no he encontrado respuesta o solución a lo mio...

Estoy haciendo el mítico paginador con php y mysql. El problema que tengo es que al avanzar la página coge todos los registros (o filas) de la tabla sobre la cual realizo la consulta.

Tengo 2 paginas:
La primera es el formulario html donde recojo todos los datos.
En la segunda pagina, recojo estos datos mediante post, monto la consulta y hago la paginación.
Entiendo el problema, pero no sé como resolverlo. He probado pasando la consulta por la URL y recogerla con un $_GET pero no lo hago bien, también he intentado guardar la consulta en la BD, pero no la guarda bien por el tema de las ' ' de las variables....

Dejo el codigo a ver si me podéis echar una mano...
muchas gracias de antemano... me estáis ayudando mucho

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
include "conexion.php";
$dbconectarse();

$cerca=$_POST['cerca']; $criteri=$_POST['criteri']; 
$iono=$_POST['iono']; 
$cerca2=$_POST['cerca2']; $criteri2=$_POST['criteri2'];
$tipus=$_POST['tipus']; $llengua=$_POST['llengua']; $nivell=$_POST['nivell'];
$editorial=$_POST['editorial']; $any=$_POST['any'];


$cons="SELECT * FROM catàleg WHERE Registre > 0 ";
if (
$cerca!="" && $criteri!=""){
    if (
$criteri == "tit"){
        
$cons $cons."AND Títol LIKE '%$cerca%' "//'%".$nom_proy."%
    
}else if ($criteri == "aut"){
        
$cons $cons."AND Autors LIKE '%$cerca%' ";
    }else if (
$criteri == "par"){
        
$cons $cons."AND MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca') ";
    }else if (
$criteri == "mat"){
        
$cons $cons."AND Descriptors LIKE '%$cerca%' ";
    }else if (
$criteri == "ISBN"){
        
$cons $cons."AND ISBN = '$cerca' ";
    }
}

if (
$iono=="i"){ $cons $cons."AND "; }
if (
$iono=="o"){ $cons $cons."OR "; } 
if (
$iono=="no"){
    if (
$criteri2 == "tit"){ $cons $cons."AND Títol NOT LIKE '%$cerca2%' "//'%".$nom_proy."%
    
}else if ($criteri2 == "aut"){ $cons $cons."AND Autors NOT LIKE '%$cerca2%' ";
    }else if (
$criteri2 == "par"){ $cons $cons."AND NOT MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca2') ";
    }else if (
$criteri2 == "mat"){ $cons $cons."AND Descriptors NOT LIKE '%$cerca2%' ";
    }else if (
$criteri == "ISBN"){ $cons $cons."AND ISBN != '$cerca2' ";
    }

}

if (
$cerca2!="" && $criteri2!="" && $iono!="no"){ 
    if (
$criteri2 == "tit"){ $cons $cons."Títol LIKE '%$cerca2%' "//'%".$nom_proy."%
    
}else if ($criteri2 == "aut"){ $cons $cons."Autors LIKE '%$cerca2%' ";
    }else if (
$criteri2 == "par"){ $cons $cons."MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca2') ";
    }else if (
$criteri2 == "mat"){ $cons $cons."Descriptors LIKE '%$cerca2%' ";
    }else if (
$criteri == "ISBN"){ $cons $cons."ISBN = '$cerca2' ";
    }
}

if (
$tipus != "" && $tipus !="0"){ $cons =$cons."AND Material = '$tipus' "; }
if (
$llengua != "" && $llengua !="0"){ $cons=$cons."AND Llengua = '$llengua' "; }
if (
$nivell != "" && $nivell !="0"){ $cons=$cons."AND Nivell = '$nivell' "; }
if (
$editorial != ""){ $cons=$cons."AND Editor = '$editorial' "; }
if (
$any != ""){ $cons=$cons."AND Data = '$any' "; }    

//Fi de la construccio de la consulta sense limits

//Inici de calculs de la paginació.

    
$res=mysql_query($cons,$db);
    
$numeroRegistros=mysql_num_rows($res);   //Comptar el número de resultats
    
if ($numeroRegistros <=0){                 //Si no hi han resultats
        
echo "<div align='center'>";
        echo 
"<font face='verdana' size='-2'>No s'han trobat resultats</font>";
        echo 
"</div>";
    }else{
        
$tamPag=10;  //número de resultats per pàgina
        
$pagina=$_GET['pagina'];
        
        
//pàgina actual si no esta definida y limits
        
if(!isset($pagina))
        {
               
$pagina=1;
               
$inicio=1;
               
$final=$tamPag;
        }        
        
        
$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;
            }
        }
        
//        echo $cons;
        //////////creacion de la consulta con limites
        
$consLIM $cons."LIMIT ".$limitInf.",".$tamPag;
        
//echo $consLIM;
        
$result=mysql_query($consLIM,$db);
        
        echo 
"<div align='center'>";
        echo 
"<font face='verdana' size='-2'>Trobats ".$numeroRegistros." documents<br>";
        echo 
"</font></div>";
        
        echo 
"<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>";
        echo 
"<tr><td colspan='4'><hr noshade></td></tr>";
        echo 
"<th bgcolor='#CCCCCC'>Seleccionar</a></th>";
        echo 
"<th bgcolor='#CCCCCC'>Código</a></th>";
        echo 
"<th bgcolor='#CCCCCC'>Títol</a></th>";
        echo 
"<th bgcolor='#CCCCCC'>Autors</a></th>";
        
        while(
$registre=mysql_fetch_array($result))
        {
?>
<!-- tabla de resultados -->
    <tr bgcolor="#CC6666" onMouseOver="this.style.backgroundColor='#FF9900';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#CC6666'"o"];" onClick="javascript:muestra('<? echo "[".$registro["Registre"]."] ".$registro["Autors"]." - ".$registro["Títol"]; ?>');">
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><input name="sel" type="checkbox" value=""></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registre["Registre"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registre["Autors"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registre["Títol"]; ?></b></font></td>
  </tr>
<!-- fin tabla resultados -->
<?
        
}//fin while

            
echo "</table>";
    }
//fin if

            //////////a partir de aqui viene la paginacion
?>
    <br>
    <table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr><td align="center" valign="top">
<?
    
if($pagina>1)
    {
        echo 
"<a class='p' href='".$_SERVER['PHP_SELF']."&?pagina=".($pagina-1)."'>";
        echo 
"<font face='verdana' size='-2'>anterior</font>";
        echo 
"</a>&nbsp;";
    }

    for(
$i=$inicio;$i<=$final;$i++)
    {
        if(
$i==$pagina)
        {
            echo 
"<font face='verdana' size='-2'><b>".$i."</b>&nbsp;</font>";
        }else{
            echo 
"<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".$i."'>";
            echo 
"<font face='verdana' size='-2'>".$i."</font></a>&nbsp;";
        }
    }
    if(
$pagina<$numPags)
    {
        echo 
"&nbsp;<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".($pagina+1)."'>";
        echo 
"<font face='verdana' size='-2'>siguiente</font></a>";    }
    
//////////fin de la paginacion
        
mysql_close($db);
?>
    </td></tr>
    </table>

</body>
</html>
  #2 (permalink)  
Antiguo 28/01/2008, 13:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Paginación PHP + MySQL; Pierdo la consulta.

Tu problema es que debes de enviar aparte del numero de pagina, tus condiciones (criteri, criteri2, iono, tipus, etc.) Para que puedas seguir paginando y no se pierda la pagina actual.

Adicionalmente debes de modificar tu script para que no busque las variables desde $_POST, si no desde $_REQUEST.

Saludos.
  #3 (permalink)  
Antiguo 28/01/2008, 13:34
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Paginación PHP + MySQL; Pierdo la consulta.

Muchas gracias por la pronta respuesta, ahora mismo prueba y te digo.
  #4 (permalink)  
Antiguo 28/01/2008, 14:39
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Paginación PHP + MySQL; Pierdo la consulta.

Bueno... pues no me ha funcionado, no sé que debo hacer mal....

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
include "conexion.php";
$dbconectarse();

$cerca=$_REQUEST['cerca']; $criteri=$_REQUEST['criteri']; 
$iono=$_REQUEST['iono']; 
$cerca2=$_REQUEST['cerca2']; $criteri2=$_REQUEST['criteri2'];
$tipus=$_REQUEST['tipus']; $llengua=$_REQUEST['llengua']; $nivell=$_REQUEST['nivell'];
$editorial=$_REQUEST['editorial']; $any=$_REQUEST['any'];

echo 
$tipus;

$cons="SELECT * FROM catàleg WHERE Registre > 0 ";
if (
$cerca!="" && $criteri!=""){
    if (
$criteri == "tit"){
        
$cons $cons."AND Títol LIKE '%$cerca%' "//'%".$nom_proy."%
    
}else if ($criteri == "aut"){
        
$cons $cons."AND Autors LIKE '%$cerca%' ";
    }else if (
$criteri == "par"){
        
$cons $cons."AND MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca') ";
    }else if (
$criteri == "mat"){
        
$cons $cons."AND Descriptors LIKE '%$cerca%' ";
    }else if (
$criteri == "ISBN"){
        
$cons $cons."AND ISBN = '$cerca' ";
    }
}

if (
$iono=="i"){ $cons $cons."AND "; }
if (
$iono=="o"){ $cons $cons."OR "; } 
if (
$iono=="no"){
    if (
$criteri2 == "tit"){ $cons $cons."AND Títol NOT LIKE '%$cerca2%' "//'%".$nom_proy."%
    
}else if ($criteri2 == "aut"){ $cons $cons."AND Autors NOT LIKE '%$cerca2%' ";
    }else if (
$criteri2 == "par"){ $cons $cons."AND NOT MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca2') ";
    }else if (
$criteri2 == "mat"){ $cons $cons."AND Descriptors NOT LIKE '%$cerca2%' ";
    }else if (
$criteri == "ISBN"){ $cons $cons."AND ISBN != '$cerca2' ";
    }

}

if (
$cerca2!="" && $criteri2!="" && $iono!="no"){ 
    if (
$criteri2 == "tit"){ $cons $cons."Títol LIKE '%$cerca2%' "//'%".$nom_proy."%
    
}else if ($criteri2 == "aut"){ $cons $cons."Autors LIKE '%$cerca2%' ";
    }else if (
$criteri2 == "par"){ $cons $cons."MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca2') ";
    }else if (
$criteri2 == "mat"){ $cons $cons."Descriptors LIKE '%$cerca2%' ";
    }else if (
$criteri == "ISBN"){ $cons $cons."ISBN = '$cerca2' ";
    }
}

if (
$tipus != "" && $tipus !="0"){ $cons =$cons."AND Material = '$tipus' "; }
if (
$llengua != "" && $llengua !="0"){ $cons=$cons."AND Llengua = '$llengua' "; }
if (
$nivell != "" && $nivell !="0"){ $cons=$cons."AND Nivell = '$nivell' "; }
if (
$editorial != ""){ $cons=$cons."AND Editor = '$editorial' "; }
if (
$any != ""){ $cons=$cons."AND Data = '$any' "; }    

echo 
$cons;
//Fi de la construccio de la consulta sense limits

//Inici de calculs de la paginació.

    
$res=mysql_query($cons,$db);
    
$numeroRegistros=mysql_num_rows($res);   //Comptar el número de resultats
    
if ($numeroRegistros <=0){                 //Si no hi han resultats
        
echo "<div align='center'>";
        echo 
"<font face='verdana' size='-2'>No s'han trobat resultats</font>";
        echo 
"</div>";
    }else{
        
$tamPag=10;  //número de resultats per pàgina
        
$pagina=$_GET['pagina'];
        
        
//pàgina actual si no esta definida y limits
        
if(!isset($pagina))
        {
               
$pagina=1;
               
$inicio=1;
               
$final=$tamPag;
        }        
        
        
$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;
            }
        }
        
//        echo $cons;
        //////////creacion de la consulta con limites
        
$consLIM $cons."LIMIT ".$limitInf.",".$tamPag;
        
//echo $consLIM;
        
$result=mysql_query($consLIM,$db);
        
        echo 
"<div align='center'>";
        echo 
"<font face='verdana' size='-2'>Trobats ".$numeroRegistros." documents<br>";
        echo 
"</font></div>";
        
        echo 
"<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>";
        echo 
"<tr><td colspan='4'><hr noshade></td></tr>";
        echo 
"<th bgcolor='#CCCCCC'>Seleccionar</a></th>";
        echo 
"<th bgcolor='#CCCCCC'>Código</a></th>";
        echo 
"<th bgcolor='#CCCCCC'>Títol</a></th>";
        echo 
"<th bgcolor='#CCCCCC'>Autors</a></th>";
        
        while(
$registre=mysql_fetch_array($result))
        {
?>
<!-- tabla de resultados -->
    <tr bgcolor="#CC6666" onMouseOver="this.style.backgroundColor='#FF9900';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#CC6666'"o"];" onClick="javascript:muestra('<? echo "[".$registro["Registre"]."] ".$registro["Autors"]." - ".$registro["Títol"]; ?>');">
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><input name="sel" type="checkbox" value=""></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registre["Registre"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registre["Autors"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registre["Títol"]; ?></b></font></td>
  </tr>
<!-- fin tabla resultados -->
<?
        
}//fin while

            
echo "</table>";
    }
//fin if

            //////////a partir de aqui viene la paginacion
?>
    <br>
    <table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr><td align="center" valign="top">
<?

    
if($pagina>1)
    {
    
        echo 
"<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".($pagina-1)."?cerca=".$cerca."?criteri=".$criteri."?iono=".$iono."?cerca2=".$cerca2."?criteri2=".$criteri2."?tipus=".$tipus."?llengua=".$llengua."?nivell=".$nivell."?editorial=".$editorial."?any=".$any."'>";
        echo 
"<font face='verdana' size='-2'>anterior</font>";
        echo 
"</a>&nbsp;";
    }

    for(
$i=$inicio;$i<=$final;$i++)
    {
        if(
$i==$pagina)
        {
            echo 
"<font face='verdana' size='-2'><b>".$i."</b>&nbsp;</font>";
        }else{
            echo 
"<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".$i."?cerca=".$cerca."?criteri=".$criteri."?iono=".$iono."?cerca2=".$cerca2."?criteri2=".$criteri2."?tipus=".$tipus."?llengua=".$llengua."?nivell=".$nivell."?editorial=".$editorial."?any=".$any."'>";
            echo 
"<font face='verdana' size='-2'>".$i."</font></a>&nbsp;";
        }
    }
    if(
$pagina<$numPags)
    {
        echo 
"&nbsp;<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".($pagina+1)."?cerca=".$cerca."?criteri=".$criteri."?iono=".$iono."?cerca2=".$cerca2."?criteri2=".$criteri2."?tipus=".$tipus."?llengua=".$llengua."?nivell=".$nivell."?editorial=".$editorial."?any=".$any."'>";
        echo 
"<font face='verdana' size='-2'>siguiente</font></a>";    }
    
//////////fin de la paginacion
        
mysql_close($db);
?>
    </td></tr>
    </table>

</body>
</html>
he intentado hacer un "echo" de lo que tienen las variables pero nunca muestran nada, ni cuando vienen de formulario ni cuando lo cgen por la URl.
Además, no siempre se llenan todos los campos de la consulta, con lo que una URL de ejemplo, si busco solo por $tipus podria ser esto:
http://localhost/cons6.php?pagina=2?...ditorial=?any=

que puedo estar haciendo mal?
  #5 (permalink)  
Antiguo 28/01/2008, 15:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Paginación PHP + MySQL; Pierdo la consulta.

Recuerda que las variables en el Query String se separan con el simbolo &, no con el ?, es decir:
Código:
http://localhost/pagina.php?var1=a?var2=b?var3=c
Es incorrecto, la forma correcta es:
Código:
http://localhost/pagina.php?var1=a&var2=b&var3=c
Saludos.
  #6 (permalink)  
Antiguo 28/01/2008, 16:34
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Paginación PHP + MySQL; Pierdo la consulta.

Muchisimas gracias GatorV, ahora ya sí que funciona... no tenía ni idea de eso de los & y ?.
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 13:38.