Ver Mensaje Individual
  #9 (permalink)  
Antiguo 12/08/2011, 19:39
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

mmm... interesante todas vuestras respuestas... Muchas gracias nuevamente por el gran apoyo que estoy recibiendo.

Llevo horas haciendo pruebas... y solo he sacado un par de cositas de bueno:
1.-Si mediante el formulario de búsqueda (Antes de que se me olvide... "historiasdemaria" utilizo el metodo GET en el formulario de búsqueda) busco algo (Ya sea por palabra, provincia o población) y los registros a mostrar es menor que el LIMIT configurado, me aparecen dichos registros en la primera página, pero en la segunda, tercera... me aparecen todos los demás que se encuentran en la base de datos (BD), es decir, si he puesto un LIMIT de 5 registros por página, y mediante la búsqueda solo me devuelve 3 que coinciden con dicha búsqueda, en la primera página saldrán esos 3 y en las demás páginas salen los demás registros de BD.

2,-Cuando paso de página... en la url parece que si que se transmiten los valores por GET, es decir, tomando como ejemplo tu código "Sourcegeek" he conseguido que me aparezca en la 2ª página lo siguiente:
Código:
http://www.midominio.com/contenidoweb/php/resultados/index.php?page=2&frase=sidney&provincia=0&poblaciones=&submit=Buscar
Pero no hace nada...

"cuasatar" Gracias por tu elaborada respuesta... el LIMIT si que lo indico mediante un código muy similar al tuyo... ahora os muestro el código completo.

Este seria un ejemplo de mi formulario de búsqueda;
Código HTML:
<form  method="get" action="index.php">
<label >Búsqueda por palabra </label>
<input name="frase" type="text" maxlength="255" value="<?php echo $_GET['frase']; ?>"/>

<label class="description" for="element_3">Población </label>
<select  name="poblacion" id="poblaciones" disabled="disabled">
  <option value="0">--Elige una provincia--</option>
</select>

<label >Población </label>
<select  name="poblacion" id="poblaciones" disabled="disabled">
  <option value="0">--Elige una población--</option>
</select>
		    
<input type="submit" name="buscar" value="Buscar"/>
</form> 
Ahora el código de la consulta sql, donde también se puede empezar a apreciar ya código de paginación donde indico el LIMIT:
Código PHP:
//AL PRINCIPIO COMPRUEBO SI HICIERON CLICK EN ALGUNA PÁGINA
        
if(isset($_GET['page']))
        {
            
$page$_GET['page'];
        }
        else
        {
        
//SI NO DIGO QUE ES LA PRIMERA PÁGINA
        
$page=1;
        }

        
//AQUÍ SE SELECCIONAN TODOS LOS DATOS DE LA TABLA
        //Hago la consulta a la BD e indico la relación entre campos
        
$sqlBuscar "SELECT * FROM profesionales, provincia, poblacion WHERE profesionales.provprof = provincia.idprovincia AND profesionales.pobprof = poblacion.idpoblacion";
        
$datos=mysql_query($sqlBuscar,$conexion);

        
//MIRO CUANTOS DATOS FUERON DEVUELTOS
        
$num_rows=mysql_num_rows($datos);

        
//AQUÍ SE DECIDE CUANTOS RESULTADOS MOSTRAR POR PÁGINA , PONGO 5
        
$rows_per_page5;

        
//CALCULO LA ÚLTIMA PÁGINA
        
$lastpageceil($num_rows $rows_per_page);

        
//COMPRUEBO QUE EL VALOR DE LA PÁGINA SEA CORRECTO Y SI ES LA ULTIMA PÁGINA
        
$page=(int)$page;
        if(
$page $lastpage)
        {
            
$page$lastpage;
        }
        if(
$page 1)
        {
        
$page=1;
        }
        
        
// verifico que el formulario halla sido enviado
if(isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar')
// #IF 1 (abro)
    
if (intval($_GET['provincia']) > 0
    { 
// #IF 2 (abro)
        
$sqlBuscar .= " AND profesionales.provprof= '" intval($_GET['provincia']) . "'";
    } 
// #IF 2 (Cierro)
    
if (intval($_GET['poblaciones']) > 0
    { 
// #IF 3 (abro)
        
$sqlBuscar .= " AND profesionales.pobprof='"intval($_GET['poblaciones'])."'";
    } 
// #IF 3 (Cierro)
    
if (isset($_GET['frase'])) 
    {  
// #IF 4 (abro)
        
$sqlBuscar .= " AND profesionales.nombreempresa LIKE '%" $_GET['frase'] . "%' "
    }  
// #IF 4 (Cierro)
    //Desde aquí empieza el código para mostrar un mensaje cuando no hayan registros en la consulta.
    
$resultado=mysql_query($sqlBuscar) or die (mysql_error()); 
    if (
mysql_num_rows($resultado)== 0
    { 
// #IF 6 (abro)
        
echo "No disponemos de registros con esos criterios de búsqueda."
    }
// #IF 6 (Cierro)
    //aquí finaliza el script de no hay registros.
}// #IF 1 (Cierro)
$sqlBuscar .= " ORDER BY profesionales.fechaingreso  ASC LIMIT ".($page -1) * $rows_per_page.",".$rows_per_page.""// Indico el orden a seguir por el listado
$tabla mysql_query($sqlBuscar);
        while(
$registrolistado mysql_fetch_array($tabla))
        {
 
// Aquí tengo una tabla que no muestro por no hacer muy largo el código con los campos a mostrar, evidentemente esta es la zona de repetición 

Y por último el cógido donde se centra todos los pasos de la paginación:
Código PHP:
//UNA VEZ QUE MUESTRO LOS DATOS TENGO QUE MOSTRAR EL BLOQUE DE PAGINACIÓN SIEMPRE Y CUANDO HAYA MÁS DE UNA PÁGINA
        
if($num_rows != 0)
        {
           
$nextpage$page +1;
           
$prevpage$page -1;
        
         echo 
'<ul id="paginacion">';
         
        
//SI ES LA PRIMERA PÁGINA DESHABILITO EL BOTON DE ANTERIOR, MUESTRO EL 1 COMO ACTIVO Y MUESTRO EL RESTO DE PÁGINAS
         
if ($page == 1
        {

          echo 
'<li class="previous-off">&laquo; Anterior</li>';
          echo 
'<li class="active">1</li>'

             
// Numero de paginas a mostrar
        
$num_paginas=7;
        
//limitando las paginas mostradas
        
$pagina_intervalo=ceil($num_paginas/2)-1;
        
// Calculamos desde que numero de pagina se mostrara
        
$pagina_desde=$page-$pagina_intervalo;
        
$pagina_hasta=$page+$pagina_intervalo;
         
// Verificar que pagina_desde sea negativo
        
if($pagina_desde<1)
        {
        
// le sumamos la cantidad sobrante para mantener el numero de enlaces mostrados
        
$pagina_hasta-=($pagina_desde-1);
        
$pagina_desde=1;
        }
        
// Verificar que pagina_hasta no sea mayor que paginas_totales
        
if($pagina_hasta>$lastpage)
        {
            
$pagina_desde-=($pagina_hasta-$lastpage);
            
$pagina_hasta=$lastpage;
            if(
$pagina_desde<1)
            {
                
$pagina_desde=1;
            }
        }
        
            for(
$i$page+$pagina_desde$i<= $pagina_hasta $i++)
            {
                 echo 
'<li><a href="index.php?page=' $i '&frase='.$_GET['frase'].'&provincia='.$_GET['provincia'].'&poblaciones='.$_GET['poblaciones'].'&submit='.$_GET['buscar'].'">' $i '</a></li>';
            }
           
//Y SI LA ULTIMA PÁGINA ES MAYOR QUE LA ACTUAL MUESTRO EL BOTON SIGUIENTE O LO DESHABILITO
        
if($lastpage >$page )
        {      
              echo 
'<li class="next"><a href="?page='$nextpage .'&frase='.$_GET['frase'].'&provincia='.$_GET['provincia'].'&poblaciones='.$_GET['poblaciones'].'&submit='.$_GET['buscar'].'">Siguiente &raquo;</a></li>';
        }
        else
        {
              echo 
'<li class="next-off">Siguiente &raquo;</li>'
        }
         } 
        else 
        {
        
//EN CAMBIO SI NO ESTAMOS EN LA PÁGINA UNO HABILITO EL BOTON DE ANTERIOR Y MUESTRO LAS DEMÁS
              
echo '<li class="previous"><a href="?page=' $prevpage '&frase='.$_GET['frase'].'&provincia='.$_GET['provincia'].'&poblaciones='.$_GET['poblaciones'].'&submit='.$_GET['buscar'].'?>"  >&laquo; Anterior</a></li>';
        
// Numero de paginas a mostrar
        
$num_paginas=7;
        
//limitando las paginas mostradas
        
$pagina_intervalo=ceil($num_paginas/2)-1;
        
// Calculamos desde que numero de pagina se mostrara
        
$pagina_desde=$page-$pagina_intervalo;
        
$pagina_hasta=$page+$pagina_intervalo;
         
// Verificar que pagina_desde sea negativo
        
if($pagina_desde<1)
        {
        
// le sumamos la cantidad sobrante para mantener el numero de enlaces mostrados
        
$pagina_hasta-=($pagina_desde-1);
        
$pagina_desde=1;
        }
        
// Verificar que pagina_hasta no sea mayor que paginas_totales
        
if($pagina_hasta>$lastpage)
        {
            
$pagina_desde-=($pagina_hasta-$lastpage);
            
$pagina_hasta=$lastpage;
            if(
$pagina_desde<1)
            {
                
$pagina_desde=1;
            }
        }
 
          for(
$i$pagina_desde$i<= $pagina_hasta $i++)
        {
        
//COMPRUEBO SI ES LA PÁGINA ACTIVA O NO
        
if($page == $i)
        {  
            echo 
'<li class="active">' .$i'</li>';
        }
        else
        { 
            echo 
'<li><a href="?page=' $i '&frase='.$_GET['frase'].'&provincia='.$_GET['provincia'].'&poblaciones='.$_GET['poblaciones'].'&submit='.$_GET['buscar'].'" >' $i '</a></li>';
        }
          }
        
//SI NO ES LA ÚLTIMA PÁGINA ACTIVO EL BOTON SIGUIENTE    
          
if($lastpage >$page )
        {
              echo 
'<li class="next"><a href="?page='$nextpage .'&frase='.$_GET['frase'].'&provincia='.$_GET['provincia'].'&poblaciones='.$_GET['poblaciones'].'&submit='.$_GET['buscar'].'">Siguiente &raquo;</a></li>';
          }
        else
        {
            echo 
'<li class="next-off">Siguiente &raquo;</li>';
          }
         }
        }
            echo 
'</ul>'
Siento que sea una respuesta tan robusta y extensa pero no doy con el problema...

Yo seguiré por mi parte buscando... y si tengo alguna novedad os informaré para ver si se os ocurre algo y evidentemente si encontrase "The problem" lo publicaría para evitar tropiezos como el mio...

Un saludo muy grande!!