Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/05/2007, 13:38
acantocephala
 
Fecha de Ingreso: mayo-2007
Mensajes: 19
Antigüedad: 17 años
Puntos: 1
Problemas con paginación

Hola a todos,

Mi problema es que tengo que paginar en PHP unos datos producto de una consulta SQL, pero siempre (y he usado varios scripts) logro paginar la primera página correctamente, es decir establezco el numero de rows a mostrar y el cálculo de las páginas a paginar (el típico: <<primero [1][2][3]...ultimo>>), pero al hacer click sobre [2], por ejemplo pareciera que el SELECT se aplicara a toda la base y NO a mi query deseado.

El script que uso:
Código PHP:
<?php 
$link 
mysql_connect("myhost.com""myuser""mypass"); 
mysql_select_db("mydb"$link); 

if (!isset(
$pag)) $pag 1// Por defecto, pagina 1

//'$_REQUEST[localidades]%' proviene de un menú desplegable
//de una página anterior enviado via "submit" con el método "post"
$result mysql_query("SELECT COUNT(*) from miembros where localidad like '$_REQUEST[localidades]%'"$link); 
list(
$total) = mysql_fetch_row($result);
$tampag 3//He establecido 3 para efectos de pruebas
$reg1 = ($pag-1) * $tampag;
$result mysql_query("select * from socios where localidad like '$_REQUEST[localidades]%' LIMIT $reg1, $tampag"$link);
   
if (
mysql_num_rows($result)){ 
  echo 
"<table border = '1'> \n"
  echo 
"<tr><td>Nombre</td><td>Apellidos</td></tr> \n"
  while (
$row = @mysql_fetch_array($result)) { 
    echo 
"<tr><td>".$row["nombre"].
      
"</td><td>".$row["apellidos"]."</td></tr> \n"
  }
  echo 
"</table> \n"
}
else
  echo 
"¡ No se ha encontrado ningún registro !";
  
/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */
function paginar($actual$total$por_pagina$enlace) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;
}

echo 
paginar($pag$total$tampag"busqueda.php?pag=");
?>
El asunto es que de alguna manera la primera paginación la arroja bien, pero luego a las siguientes parece perder los criterios de la búsqueda y hace la paginación pero en base a toda la base de datos. Ej:

Cita:
(resultados de la búsqueda)

Nombre | Apellidos
Juan | Gonzalez
Pedro | Pérez
Alfonso | Giménez

[1][2][3]
Si hago click sobre [2]

Cita:
(resultados de la búsqueda)

Nombre | Apellidos
Antonio | Gonzalez
Amelesio | Pérez
Alfonso | Giménez

[1][2][3][4][5][6][7][8][9][10]
Es decir.. pagina TODA la db (nótese que no pone rojo el enlace [2])

¿Alguien puede darme una luz a ver donde está el error?

Gracias de antemano