Foros del Web » Programando para Internet » PHP »

Paginación - Pasar página sin perder los criterios de búsqueda

Estas en el tema de Paginación - Pasar página sin perder los criterios de búsqueda en el foro de PHP en Foros del Web. Buenos días compañeros!! Os explico mi problema... Estoy creando una paginación para un listado de registros mostrados desde mi BD. El problema es el siguiente: ...
  #1 (permalink)  
Antiguo 12/08/2011, 04:27
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Paginación - Pasar página sin perder los criterios de búsqueda

Buenos días compañeros!!

Os explico mi problema...

Estoy creando una paginación para un listado de registros mostrados desde mi BD. El problema es el siguiente:

Mi formulario de búsqueda manda los datos mediante el metodo GET, y en la página de resultados/index.php (Archivo donde manda los datos) me aparece en la URL los datos enviados y me muestra los registros disponibles según los criterios seleccionados y el número de páginas, pero al pasar a la la segunda página desaparecen dichos criterios de búsqueda y me muestra todos los registros d ela base de datos.... graficamente lo entendereis mejor:


Esta es la URL que me aparece después de haber realizado una consulta desde el formulario de búsqueda:
Código:
http://www.midominio.com/contenidoweb/php/resultados/index.php?palabra=&provincia=9&poblaciones=0&element_1=&form_id=218021&submit=Buscar
Y una vez pincho en la página 2 o 3 o....... Se borra los datos de get y solo indica en que página estamos:
Código:
http://www.midominio.com/contenidoweb/php/resultados/index.php?page=2
Y mi pregunta es: ¿Como indico para que al pinchar sobre la página 2 o 3... me aparezcan los siguientes registros según los criterios de búsqueda que he indicado?

Espero haberme explicado lo mejor posible...

Un saludo muy grande!!

Y gracias de antemano!
  #2 (permalink)  
Antiguo 12/08/2011, 05:07
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

Cómo estás paginando ??, hay librerías para eso, pero si lo estas haciendo a mano, usas la clausula LIMIT en la query ?.
  #3 (permalink)  
Antiguo 12/08/2011, 08:52
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

Hola, no se como estas realizando la paginación pero no es dificil resolver este problema. Como no tenemos a mano el código que usas no se puede detectar cual puede ser el error.

Yo sugeriria algo así:
Código PHP:
for ($i=1;$i<$totalregistros;$i++){
echo 
"<a href=index.php?palabra=provincia&pagina=".$i.">".$i."</a>";

Igual revise las comillas por si de pronto las puse mal.

Como se puede ver al imprimir así los enlaces siempre va a estar la condición de que pagina sea igual a provincia(el cual me imagino es un dato dinamico y no estatico así que podria colocarse como $provincia y de pronto venga de algun formulario)

Lo de pagina significa la cantidad total de registros que salen de la consulta, entonces a medida que se hace la consulta se va recorriendo.

Para poner un ejemplo digamos que se tiene 50 registros y se quieren mostrar de 10 en 10, entonces significa que tendremos en total 50/10=5 paginas el cual seria el valor de $totalregistros;

Por ultimo es bueno aclarar que la consulta debe estar limitada para que recorra los registros por ejemplo del 1 al 10 del 11 al 20 del 21 al 30 etc entonces cuando se coloque el limit a la consulta debe estar en función del valor de pagina para que así pagina 1 corresponda con un limit de 1 a 10, pagina 2 del 11 al 20 etc.
  #4 (permalink)  
Antiguo 12/08/2011, 10:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 12
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

Yo lo tengo asi y me funciona bien:

Código:
   $coneccion=mysql_connect("localhost", "admin", "1234") or die(mysql_error());
			
			if (!(isset($pagenum))) 
			 { 
			 $pagenum = 1; 
			 } 

   mysql_select_db("prueba", $coneccion) or die(mysql_error());
   mysql_query("SET NAMES 'utf8'");
	
	$consulta=mysql_query("SELECT * FROM maquinas");

  
         $rows = mysql_num_rows($consulta);   //saber cuantas registros
	 $page_rows = 6;  //nuemro registros por pag
	 $last = ceil($rows/$page_rows);   // ultima pag

	 if ($pagenum < 1) 
	 { 
	 $pagenum = 1; 	    } 																		//colocacion nume pag
	 elseif ($pagenum > $last) 
	 { 
	 $pagenum = $last; 
	
	 } 
	 $max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows;    //maximo posible
	 
	 $data_p = mysql_query("SELECT * FROM maquinas  $max") or die(mysql_error()); 
   mysql_close($coneccion);

   
   
 while($registro=mysql_fetch_row($data_p))  	  {	

  echo  "<tr>
   			<td class='td'> ".$registro[0]." </td>
			<td class='td'> ".$registro[1]." </td>
			<td class='td'> ".$registro[2]." </td>
	
		 </tr> "; 
   }
  ?>	 
 
</table> 
<br/>
<?
 echo "<div class='paginacion' align='center'> ";
  if ($pagenum == 1) 
 {
 } 
 else 
 {
 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <img border=0 title='ir al primero' src='images/icons/pagination_1_first.png'></a> ";
 echo " ";
 $previous = $pagenum-1;
 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'><img  border=0 title='anterior' src='images/icons/pagination_1_previous.png'></a> ";
 } 
 //espaciado
 echo "Página  $pagenum  de  $last  ";
 if ($pagenum == $last) 
 {
 } 
 else {
 $next = $pagenum+1;
 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'><img border=0 title='siguiente' src='images/icons/pagination_1_next.png'></a> ";
 echo " ";
 echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'><img border=0 title='ir al último' src='images/icons/pagination_1_last.png'></a> ";
 } 
 echo "</div>";
suerte y saludos.
  #5 (permalink)  
Antiguo 12/08/2011, 11:27
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

Hola "ramiro_md", "cuasatar" y "Pherenick", Muchas gracias por vuestras respuestas....

Ramiro_md: Lo estoy haciendo manual y si que tengo un LIMIT indicado, ahora lo podrás ver graficamente.

Cuasatar: Gracias por tu gran explicación, me he centrado en tu respuesta haciendo pruebas... pero me sigue sin mostrar los registros correspondientes a las paginas 2, 3....

Pherenick: Gracias por mostrar tu código, lo estudiaré y probaré posibles soluciones.

Centrandome en la respuesta de "Cuasatar", pongo el código sin modificar y la modificación que realizaria según su respuesta a ver si podeis indicarme que hago mal.

El código sin modificar es:

Código PHP:
<!------- Paginación (Empieza) ----------> 
       <div class="barrapaginacion"> 
       <?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 '">' $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 '" >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 '?>"  >&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 '" >' $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 .'">Siguiente &raquo;</a></li>';
          }
        else
        {
            echo 
'<li class="next-off">Siguiente &raquo;</li>';
          }
         }
        }
            echo 
'</ul>';
        
?> 
        </div>
      <!------- Paginación (Termina) ---------->
En todos los lugares donde pongo el link de la página, debería ponerlo según me ha indicado Cuasatar, ¿verdad?, es decir, sustituir esto:
Código PHP:
echo '<li><a href="?page=' $i '" >' $i '</a></li>'
¿Por esto otro?
Código PHP:
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="index.php?frase=' $_GET['frase'] . '&provincia=' $_GET['provincia'] . '&poblaciones=' $_GET['poblaciones'] . '&form_id=218021&buscar=Buscar" >' $i '</a></li>';
        }
          } 
Así puesto no me funciona... Por lo tanto si me pudieseis guiar... jeje

$_GET['frase'] : Lo recojo de un input del formulario
$_GET['provincia'] : Lo recojo de un option de un select del formulario
y $_GET['poblaciones'] : Lo recojo de un option de un select del formulario que e sun como anidado al select de provincia.

Espero sus respuestas!! muchas gracias por vuestro interés en ayudarme.

Un saludo.
  #6 (permalink)  
Antiguo 12/08/2011, 13:07
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

WOW, de verdad no sabes cómo!? No puedo creer que hiciste un paginador y no sabes la solución tan sencilla
Código PHP:
Ver original
  1. echo "<li class=\"next\"><a href=\"?page=$nextpage&palabra={$_GET['palabra']}&provincia={$_GET['provincia']}&problaciones={$_GET['poblaciones']}&element_1={$_GET['element_1']}&form_id={$_GET['form_id']}&submit={$_GET['buscar']}\">Siguiente&raquo;</a>/li>';
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #7 (permalink)  
Antiguo 12/08/2011, 13:18
Avatar de historiasdemaria  
Fecha de Ingreso: septiembre-2010
Ubicación: www
Mensajes: 433
Antigüedad: 13 años, 6 meses
Puntos: 54
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

Cita:
Iniciado por sidneyendis Ver Mensaje
Hola "ramiro_md", "cuasatar" y "Pherenick", Muchas gracias por vuestras respuestas....

Ramiro_md: Lo estoy haciendo manual y si que tengo un LIMIT indicado, ahora lo podrás ver graficamente.

Cuasatar: Gracias por tu gran explicación, me he centrado en tu respuesta haciendo pruebas... pero me sigue sin mostrar los registros correspondientes a las paginas 2, 3....

Pherenick: Gracias por mostrar tu código, lo estudiaré y probaré posibles soluciones.

Centrandome en la respuesta de "Cuasatar", pongo el código sin modificar y la modificación que realizaria según su respuesta a ver si podeis indicarme que hago mal.

El código sin modificar es:

Código PHP:
<!------- Paginación (Empieza) ----------> 
       <div class="barrapaginacion"> 
       <?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 '">' $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 '" >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 '?>"  >&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 '" >' $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 .'">Siguiente &raquo;</a></li>';
          }
        else
        {
            echo 
'<li class="next-off">Siguiente &raquo;</li>';
          }
         }
        }
            echo 
'</ul>';
        
?> 
        </div>
      <!------- Paginación (Termina) ---------->
En todos los lugares donde pongo el link de la página, debería ponerlo según me ha indicado Cuasatar, ¿verdad?, es decir, sustituir esto:
Código PHP:
echo '<li><a href="?page=' $i '" >' $i '</a></li>'
¿Por esto otro?
Código PHP:
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="index.php?frase=' $_GET['frase'] . '&provincia=' $_GET['provincia'] . '&poblaciones=' $_GET['poblaciones'] . '&form_id=218021&buscar=Buscar" >' $i '</a></li>';
        }
          } 
Así puesto no me funciona... Por lo tanto si me pudieseis guiar... jeje

$_GET['frase'] : Lo recojo de un input del formulario
$_GET['provincia'] : Lo recojo de un option de un select del formulario
y $_GET['poblaciones'] : Lo recojo de un option de un select del formulario que e sun como anidado al select de provincia.

Espero sus respuestas!! muchas gracias por vuestro interés en ayudarme.

Un saludo.
Y el formulario? cual es el methodo que utilizas, GET o POST?
Haz un print_r($_GET) para ver si recuperas de verdad los valores
  #8 (permalink)  
Antiguo 12/08/2011, 14:16
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: Paginación - Pasar página sin perder los criterios de búsqueda

Hola acabo de ver rapidamente tu código y veo que no veo algo y es la consulta desde la cual generas los limites de la consulta.

yo esperaria ver algo por el estilo y explico rapidamente

$inicio=Es la que va a indicar el limite donde empieza la busqueda de la base de datos (es decir si va de 10 en 10 entonces tendria que tomar valores de 1,11,21,etc)
$tamano pagina=es decir el numero de registros por pagina;
$numeronoticias=el total de registros;
$totalpaginas=el numero total de enlaces con los que se hara el paginador
$pagina=el numero total de enlaces.

Igual este es solo un ejemplo toca ajustarlo al paginador tuyo, pero es para revisar si se esta haciendo algo similar o no.

Código PHP:
if(!$pagina){
$inicio=0;
$pagina=1;
}
else {
$inicio=($pagina-1)*tamanoPagina;
}


$consulta="SELECT * FROM tabla WHERE condicion=".$condicion."ORDER BY columna;";
$hacerconsulta=mysql_query($consulta,$conexion);
$numeroNoticias=mysql_rows($hacerconsulta);
$totalPaginas=ceil($numeronoticias/$tamanoPagina);
$consulta="SELECT * FROM tabla WHERE condicion=".$condicion."ORDER BY columna LIMIT".$inicio.",".$tamanopagina;
$hacerconsulta=mysql_query($consulta,$conexion); 
Por favor verifica con un echo que todos los GET estan llegando bien y toman los valores que deben de tomar. Por el ejemplo que muestras la consulta es bastante compleja, pruebala por aparte y verifica que con los valores correctos si toma un valor, porque si igual el valor de la consulta es igual a cero, el paginador no va a tomar nada.

Espero que con esto ya puedas arreglar el problema. Mi recomendación personal es ir mirando el codigo paso a paso porque si el error esta en un paso intermedio de nada sirve modificar si no se ha revisado que lo anterior funcione bien.
  #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!!

Etiquetas: paginacion
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 23:32.